Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-10-2016, 09:03   #41
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Due cose riguardo GCC (Clang non l'ho ancora potuto usare seriamente nell'ambito lavorativo):
  1. -O2 / -O3: quando provammo anni fa ad abilitare l'ottimizzazione ottenemmo due belle cosine: in caso di SEGFAULT il core non aveva senso ("value optimized out"... SEGFAULT comodo!), tolse un if (x != NULL) perché non serviva secondo lui e il codice iniziò ad andare allegramente in core Da quel giorno compiliamo tutto in debug
  2. Lo sapete vero che -march=native si riferisce alla macchina su cui stai compilando ? Chi ti garantisce per esempio che abbia AVX512 anche la macchina su cui il codice verrà poi eseguito? Penso se provi ad usare AVX512 su una CPU che non ha l'istruzione l'applicazione va bellamente in core. Quindi? Quindi o ti limiti a un safe subset (su X64 puoi sperare che SSE1 e SSE2 sono sempre supportate) o sei fritto... e AVX512? Forse lo sfrutteremo tra 10 anni quando sarà safe abiltarla di default

Avevo fatto un po' di test con l'auto vettorizzazione dovevi fare dei for con valori numerici e null'altro bastava una printf() dentro al for e l'auto vettorizzazione si disabilitava (che è ovvio la printf() non è di certo un'operazione vettoriale!) temo che gli ambiti in cui le istruzioni vettoriali hanno senso sia davvero limitato (codec video? Ma non è meglio far fare quel lavoro alla GPU invece che a SSE? Videogames? Di nuovo meglio far fare i conti float alla GPU...).
__________________
Cosmos C# Open Source Managed Operating System
Cosmos Thread Ufficiale
Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat!
fano è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2016, 11:57   #42
GTKM
Senior Member
 
L'Avatar di GTKM
 
Iscritto dal: Jan 2014
Messaggi: 3826
Quote:
Originariamente inviato da fano Guarda i messaggi
Due cose riguardo GCC (Clang non l'ho ancora potuto usare seriamente nell'ambito lavorativo):
  1. -O2 / -O3: quando provammo anni fa ad abilitare l'ottimizzazione ottenemmo due belle cosine: in caso di SEGFAULT il core non aveva senso ("value optimized out"... SEGFAULT comodo!), tolse un if (x != NULL) perché non serviva secondo lui e il codice iniziò ad andare allegramente in core Da quel giorno compiliamo tutto in debug
  2. Lo sapete vero che -march=native si riferisce alla macchina su cui stai compilando ? Chi ti garantisce per esempio che abbia AVX512 anche la macchina su cui il codice verrà poi eseguito? Penso se provi ad usare AVX512 su una CPU che non ha l'istruzione l'applicazione va bellamente in core. Quindi? Quindi o ti limiti a un safe subset (su X64 puoi sperare che SSE1 e SSE2 sono sempre supportate) o sei fritto... e AVX512? Forse lo sfrutteremo tra 10 anni quando sarà safe abiltarla di default
E poi vi divertite con GDB.
Quindi pure con -O2 si rischiano casini?

Beh dai, per il second punto, però, non si può dare la colpa a GCC, anzi, è un problema generale. AVX512 rimarranno segregate per un bel po', secondo me...
GTKM è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2016, 20:38   #43
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Lascia almeno che arrivino prima.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2016, 09:15   #44
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Quote:
Originariamente inviato da GTKM Guarda i messaggi
E poi vi divertite con GDB.
Guarda usare GDB è proprio uno spasso
Almeno lasciando i simboli di debug qualcosa ci capisci, ma spesso si va più a "intuito" o a botte di printf() per capire dove il CORE è capitato

Eh ma il C è "efficiente" quindi ce lo teniamo... avevo letto una cosa divertente (credo riguardasse proprio Python vs C @cdimauro) "il tempo del programmatore è più importante di quello della CPU"

Quote:
Originariamente inviato da GTKM Guarda i messaggi
Quindi pure con -O2 si rischiano casini?
Dalla mia esperienza personale sì: del resto da un linguaggio che "unsafe" by design perché mai non dovrebbe essere così? I problemi sono 2:
  1. Le modifiche che GCC fa per "ottimizzare" il tuo codice possono farlo andare in core (inacettabile che codice corretto vada in core perché il compilatore si permette di togliere controlli)
  2. Il core generato ha dei "buchi" dove GCC ha ottimizzato il codice
  3. Non è più il tuo codice quindi anche volendo cosa ci faresti per risolvere il bug? Togli l'ottimizzazione ecco cosa

Quote:
Originariamente inviato da GTKM Guarda i messaggi
Beh dai, per il second punto, però, non si può dare la colpa a GCC, anzi, è un problema generale. AVX512 rimarranno segregate per un bel po', secondo me...
No certo il discorso era generale anche Clang fa la stessa cosa ed ogni compilatore che fa la compilazione AOT deve decidere prima per quale generazione di CPU generare il codice e di solito è ovvio usare il minimo comun denominatore (per x86 era tipico usare 486 ).
L'unico motivo per risolvere questo è far la compilazione JIT o forse ed è una cosa che in futuro mi piacerebbe esplorare in Cosmos usare il "CPU dispatch"...
__________________
Cosmos C# Open Source Managed Operating System
Cosmos Thread Ufficiale
Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat!

Ultima modifica di fano : 19-10-2016 alle 09:27.
fano è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2016, 09:34   #45
GTKM
Senior Member
 
L'Avatar di GTKM
 
Iscritto dal: Jan 2014
Messaggi: 3826
Quote:
Originariamente inviato da fano Guarda i messaggi
Guarda usare GDB è proprio uno spasso
Almeno lasciando i simboli di debug qualcosa ci capisci, ma spesso si va più a "intuito" o a botte di printf() per capire dove il CORE è capitato

Eh ma il C è "efficiente" quindi ce lo teniamo... avevo letto una cosa divertente (credo riguardasse proprio Python vs C @cdimauro) "il tempo del programmatore è più importante di quello della CPU"
Ah guarda, non ti dico quanto mi stia divertendo a fare il debugging di quel progetto con le Pthread...

Quote:
Originariamente inviato da fano Guarda i messaggi
Dalla mia esperienza personale sì: del resto da un linguaggio che "unsafe" by design perché mai non dovrebbe essere così? I problemi sono 2:
  1. Le modifiche che GCC fa per "ottimizzare" il tuo codice possono farlo andare in core (inacettabile che codice corretto vada in core perché il compilatore si permette di togliere controlli)
  2. Il core generato ha dei "buchi" dove GCC ha ottimizzato il codice
  3. Non è più il tuo codice quindi anche volendo cosa ci faresti per risolvere il bug? Togli l'ottimizzazione ecco cosa



No certo il discorso era generale anche Clang fa la stessa cosa ed ogni compilatore che fa la compilazione AOT deve decidere prima per quale generazione di CPU generare il codice e di solito è ovvio usare il minimo comun denominatore (per x86 era tipico usare 486 ).
L'unico motivo per risolvere questo è far la compilazione JIT o forse ed è una cosa che in futuro mi piacerebbe esplorare in Cosmos usare il "CPU dispatch"...
Concordo. Cosa che è un po' OT, sto pensando di usare ICC per quel progetto che ho accennato prima, tanto noi universitari lo possiamo scaricare aggratisse
GTKM è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2016, 10:50   #46
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Quote:
Originariamente inviato da GTKM Guarda i messaggi
Ah guarda, non ti dico quanto mi stia divertendo a fare il debugging di quel progetto con le Pthread...
Te lo avevo detto che i pthread erano pure e semplice satanismo sono "intrisi" di undefined behaviour fino al midollo


Quote:
Originariamente inviato da GTKM Guarda i messaggi
Concordo. Cosa che è un po' OT, sto pensando di usare ICC per quel progetto che ho accennato prima, tanto noi universitari lo possiamo scaricare aggratisse
Credo qualunque cosa sia meglio del GCC noi purtroppo non possiamo cambiare compilatore perché come il kernel Linux abbiamo fatto la cappellata di dipenderà da feature che solo GCC possiede (diaboliche estensioni!):

1. __builtin_va_arg_pack / __builtin_va_arg_len (siamo costretti ad usare il C, ma alla fine nei paradigmi moderni molte cose del mondo ad oggetti sono necessario per esempio una funzione con argomenti opzionali)
2. _Decimal32 i faccio calcoli con valute: non mi serve che sia veloce, ma che sia corretto

Clang non supporta nulla di tutto questo (l'1 si può fare lo stesso ed in modo più elegante hanno messo un po' di C++ dentro al C! Il 2 mi attacco...) ICC non lo so sinceramente...
__________________
Cosmos C# Open Source Managed Operating System
Cosmos Thread Ufficiale
Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat!
fano è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2016, 16:50   #47
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
No il codice era semplicemente:

Codice:
if (var != NULL) {
      do_something_with_var();
}
Il SEGFAULT era dentro do_something_with_var() e var secondo GDB era NULL! Il compilatore aveva deciso che l'if era inutile e l'aveva raschiato via
'var' poteva senza problemi valere NULL non aveva scuse di "assumere" che fosse sempre valorizzato (era a sua volta un parametro di input di quella funzione).

Sarà stato un bug di quella specifica versione di GCC tanto ne esce una al mese e chi mai le testa?
__________________
Cosmos C# Open Source Managed Operating System
Cosmos Thread Ufficiale
Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat!

Ultima modifica di fano : 19-10-2016 alle 16:59.
fano è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2016, 18:20   #48
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Ma è un bug troppo strano, e soprattutto in un pattern molto comune, per essere sfuggito. Non ci posso credere. :|
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2016, 20:54   #49
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12843
Quote:
Originariamente inviato da fano Guarda i messaggi
Due cose riguardo GCC (Clang non l'ho ancora potuto usare seriamente nell'ambito lavorativo):
[list=1][*]-O2 / -O3: quando provammo anni fa ad abilitare l'ottimizzazione ottenemmo due belle cosine: in caso di SEGFAULT il core non aveva senso ("value optimized out"... SEGFAULT comodo!), tolse un if (x != NULL) perché non serviva secondo lui e il codice iniziò ad andare allegramente in core Da quel giorno compiliamo tutto in debug
E' chiaro che un certo tipo di ottimizzazioni rendono più ostico il debug, ma questo è normale (es. l'inlining delle funzioni).

Una delle caratteristiche di -O3 se non ricordo male è abilitare un inlining più aggressivo e una profondità maggiore per il loop unroll, oltre ad attivare (questo lo so per certo) la vettorizzazione.

Due caratteristiche che non sempre sono convenienti, banalmente perché aumentano la size del codice e quindi l'impatto sulla cache istruzioni.

E' possibile visualizzare quali flag vengono usati ad un certo livello di ottimizzazione usando il comando:

Codice:
gcc -Q --help=optimizers
E passandogli il relativo flag, ad esempio:

Codice:
gcc -Q --help=optimizers -O2
Ti mostra quali ottimizzazioni sono abilitate a livello O2.

Relativamente alla "rimozione" del controllo NULL, come hai verificato questa cosa? Hai visto il codice assembly che è stato generato?

Se è come dici è presumibile che il compilatore abbia determinato che x non potesse mai essere NULL e quindi ha rimosso un check inutile.

Bisognerebbe vedere il codice originale per poter dire quali assunzioni ha fatto GCC.

Detto ciò in fase di debug presumibilmente conviene compilare con -Og (è un O2 ma con meno inlining).

Quote:
Originariamente inviato da fano Guarda i messaggi
[*]Lo sapete vero che -march=native si riferisce alla macchina su cui stai compilando ? Chi ti garantisce per esempio che abbia AVX512 anche la macchina su cui il codice verrà poi eseguito? Penso se provi ad usare AVX512 su una CPU che non ha l'istruzione l'applicazione va bellamente in core. Quindi? Quindi o ti limiti a un safe subset (su X64 puoi sperare che SSE1 e SSE2 sono sempre supportate) o sei fritto... e AVX512? Forse lo sfrutteremo tra 10 anni quando sarà safe abiltarla di default
Certamente!!! Se vuoi distribuire un eseguibile che giri su tutte le piattaforme le strade sono due:

- ti adegui restringendo il compilatore a generare codice meno ottimizzato ma che giri su un ampio numero di macchine

- rendi il tutto dinamico, scegliendo a runtime l'implementazione ottimizzata per la CPU che trovi (vedi kernel Linux e molte librerie matematiche).

Quote:
Originariamente inviato da fano Guarda i messaggi
Avevo fatto un po' di test con l'auto vettorizzazione dovevi fare dei for con valori numerici e null'altro bastava una printf() dentro al for e l'auto vettorizzazione si disabilitava (che è ovvio la printf() non è di certo un'operazione vettoriale!) temo che gli ambiti in cui le istruzioni vettoriali hanno senso sia davvero limitato (codec video? Ma non è meglio far fare quel lavoro alla GPU invece che a SSE? Videogames? Di nuovo meglio far fare i conti float alla GPU...).
L'ambito in cui la vettorizzazione da il meglio di se è proprio quando devi eseguire una singola istruzione su più dati contemporaneamente (SIMD), ed in generale dunque gli ambiti di calcolo numerico sono quelli in cui i vantaggi sono più evidenti.

In realtà negli ultimi anni anche nel processamento delle stringhe, con le istruzioni di shuffle si riescono a fare cose interessanti.

Se fai una chiamata a funzione ad ogni passo di un ciclo for non c'è niente da vettorizzare, l'esecuzione dev'essere per forza di cose serializzata.

Riguardo le GPU sicuramente sono progettate appositamente per il calcolo vettoriale, ma il problema grande che ancora sussiste è la comunicazione tra CPU e GPU, e il fatto che le GPU mediamente hanno una quantità di memoria molto inferiore rispetto a quanto accessibile alla CPU.

Quindi come sempre la risposta a tutto è: dipende.

Ultima modifica di WarDuck : 19-10-2016 alle 20:56.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2016, 21:30   #50
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
appunto, quel codice è orrendo.

do_something_with_var() è una funzione che non riceve var come parametro di ingresso eppure assume che var sia valido, ed il check di validità è effettuato all'esterno della funzione.

nello scope del chiamante molto probabilmente il compilatore ha assunto che var non poteva cambiare. se volevate semplicemente evitare che il compilatore ottimizzasse quel pezzo di codice potevate semplicemente dichiarare var volatile.

bisogna stare attenti ad usare O3 (personalmente ho sempre usato O2 e solo controllando l'assembly prodotto), questo perchè le regole per poter scrivere codice solido anche dopo l'ottimizzazione sono tante e non sono conosciute.

per poter dire che era un bug di gcc si doveva indagare un po' di più, personalmente 1 volta su 50 forse in problemi di questo tipo il bug è nello strumento piuttosto che nell'utilizzatore (ci vorrebbe un disclaimer "use with care")
Rimane un fatto strano, perché se quella variabile viene scritta da qualche parte, il compilatore dovrebbe tenerne conto e non togliere di mezzo quel controllo.
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Detto ciò in fase di debug presumibilmente conviene compilare con -Og (è un O2 ma con meno inlining).
No no: -O0 e basta per il debug!
Quote:
L'ambito in cui la vettorizzazione da il meglio di se è proprio quando devi eseguire una singola istruzione su più dati contemporaneamente (SIMD), ed in generale dunque gli ambiti di calcolo numerico sono quelli in cui i vantaggi sono più evidenti.

In realtà negli ultimi anni anche nel processamento delle stringhe, con le istruzioni di shuffle si riescono a fare cose interessanti.
Da un po' di anni sono state introdotte anche apposite istruzioni per alcune operazioni comuni con le stringhe, come il confronto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2016, 08:36   #51
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
appunto, quel codice è orrendo.

do_something_with_var() è una funzione che non riceve var come parametro di ingresso eppure assume che var sia valido, ed il check di validità è effettuato all'esterno della funzione.

nello scope del chiamante molto probabilmente il compilatore ha assunto che var non poteva cambiare. se volevate semplicemente evitare che il compilatore ottimizzasse quel pezzo di codice potevate semplicemente dichiarare var volatile.
Non mi ricordo adesso se era una funzione o se dentro l'if era inserito il codice in linea, ma dai non è difendibile che GCC ottimizzando leva i controlli che un povero programmatore C è costretto a mettere per evitare che tutto vada in core!

Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
bisogna stare attenti ad usare O3 (personalmente ho sempre usato O2 e solo controllando l'assembly prodotto), questo perchè le regole per poter scrivere codice solido anche dopo l'ottimizzazione sono tante e non sono conosciute.
Boh erano i flag di default di come compilavamo in azienda uso il passato perché le ottimizzazione le ho abolite e compiliamo sempre con -g3 invece...

Almeno se va in core (e il C primo o poi ci andrà) c'è una flebile speranza di recuperare qualcosa dal core se no era tutto un "value optimezed out"

Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
per poter dire che era un bug di gcc si doveva indagare un po' di più, personalmente 1 volta su 50 forse in problemi di questo tipo il bug è nello strumento piuttosto che nell'utilizzatore (ci vorrebbe un disclaimer "use with care")
Per me che l'ottimizzatore faccia corare codice corretto è un bug poi...
__________________
Cosmos C# Open Source Managed Operating System
Cosmos Thread Ufficiale
Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat!
fano è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2016, 19:26   #52
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Un sistema di ottimizzazione che io povero programmatore devo pure "aiutare" se no crea codice non valido non è che sia proprio il massimo dai!
Poi non so che tipo di programmi fate voi, ma i miei devono stare su H24 / 365 giorni all'anno appena c'è un crash tutti i telefoni iniziano a suonare

E' per questo che io inizio ad essere sempre più convinto che il C non sia più una soluzione efficace cosa me ne frega se è veloce se poi si schianta (va in SEGFAULT)?

Ritornando in topic mi è piaciuto come hanno fatto le istruzioni SSE per confrontare i double (CMPSD e CMPSS) che ritorna il valore come un array di bit 1 o 0 nella destinazione se la condizione è true o false... molto semplice da convertire nel tipo bool di .NET: un bel AND e via! Senza dover fare branch o altri casini...

Peccato che manchi l'istruzione equivalente per fare il confronto tra interi la vecchia CMP setta i flag register e lì un branch non te lo toglie nessuno (forse puoi usare l'istruzione TEST per evitarlo?). Avevo provato a cercare nelle istruzione MMX, ma mi sembra che le uniche comparazione erano tra "packed integer" e non scalari... poi MMX usa gli stessi "registri" della FPU quindi mi pare un incubo da usare (infatti mi sa non la usa più nessuno!).

Non mi piace nemmeno che SSE non abbia modo di operare su Int64 (mentre la vecchia FPU sì come è possibile?), né con valori unsigned... questo mi ruppe le uova nel paniere quando cercai di abolire ogni traccia della FPU da Cosmos
__________________
Cosmos C# Open Source Managed Operating System
Cosmos Thread Ufficiale
Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat!

Ultima modifica di fano : 30-10-2016 alle 20:18.
fano è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2016, 20:47   #53
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da fano Guarda i messaggi
Ritornando in topic mi è piaciuto come hanno fatto le istruzioni SSE per confrontare i double (CMPSD e CMPSS) che ritorna il valore come un array di bit 1 o 0 nella destinazione se la condizione è true o false... molto semplice da convertire nel tipo bool di .NET: un bel AND e via! Senza dover fare branch o altri casini...

Peccato che manchi l'istruzione equivalente per fare il confronto tra interi la vecchia CMP setta i flag register e lì un branch non te lo toglie nessuno (forse puoi usare l'istruzione TEST per evitarlo?). Avevo provato a cercare nelle istruzione MMX, ma mi sembra che le uniche comparazione erano tra "packed integer" e non scalari... poi MMX usa gli stessi "registri" della FPU quindi mi pare un incubo da usare (infatti mi sa non la usa più nessuno!).

Non mi piace nemmeno che SSE non abbia modo di operare su Int64 (mentre la vecchia FPU sì come è possibile?), né con valori unsigned... questo mi ruppe le uova nel paniere quando cercai di abolire ogni traccia della FPU da Cosmos
Hai dato un'occhiata alle varie PCMP*?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2016, 06:25   #54
GTKM
Senior Member
 
L'Avatar di GTKM
 
Iscritto dal: Jan 2014
Messaggi: 3826
Quote:
Originariamente inviato da fano Guarda i messaggi
Un sistema di ottimizzazione che io povero programmatore devo pure "aiutare" se no crea codice non valido non è che sia proprio il massimo dai!
Poi non so che tipo di programmi fate voi, ma i miei devono stare su H24 / 365 giorni all'anno appena c'è un crash tutti i telefoni iniziano a suonare

E' per questo che io inizio ad essere sempre più convinto che il C non sia più una soluzione efficace cosa me ne frega se è veloce se poi si schianta (va in SEGFAULT)?
Sì però non è che va all'improvviso va tutto in SEGFAULT così, senza un motivo. Quando succede è perché c'è un errore nella gestione delle memoria eh.
GTKM è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2016, 15:13   #55
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Hai dato un'occhiata alle varie PCMP*?
Si le ho viste, ma appunto funzionano con "packed integers" e non con "scalar integers" cioè non possono essere usati per fare il semplice:

Codice:
   int a = 42;
   int b = 69;

   bool res = (a == b); // res = false;
Giusto?
__________________
Cosmos C# Open Source Managed Operating System
Cosmos Thread Ufficiale
Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat!
fano è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2016, 20:41   #56
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
E tu usa solo la parte bassa / primo elemento.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Auto elettriche: dalla Cina il prototipo...
Più di 2.000 operai cinesi e fond...
ECOVACS DEEBOT T50 MAX PRO OMNI scende d...
La Cina è 'nanosecondi dietro' ag...
Scontro tra robot low-cost: Eureka NERE1...
Dreame L40 Ultra AE crolla di prezzo su ...
Russia, roadmap fino al 2037 per sistemi...
Ecovacs X9 PRO OMNI, da 1.199€ a 799€ og...
Helsing CA-1 Europa: il nuovo drone da c...
Windows 10 riceve l'ultimo aggiornamento...
Oggi sono questi i 3 migliori PC portati...
Amazon, Google e la sudditanza verso NVI...
AMD Instinct MI450X fa paura a NVIDIA? S...
DJI perde la causa negli Stati Uniti: co...
Leonidas abbatte 49 droni in un colpo so...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v