Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
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: 12850
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


Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Horizon vs Light of Motiram, si entra ne...
Atari rilancia Intellivision Sprint e fa...
Leapmotor lancia in Italia il SUV elettr...
QNAP punta sempre più in alto con...
Scandalo ibride plug-in: consumano come ...
L'intelligenza artificiale fa sempre pi&...
Oracle dal punto di vista dell’Europa: l...
James Dyson Award 2025: dall'accessibili...
Xiaomi: gli smartphone con display poste...
Final Fantasy 7 Remake Part 3 offrir&agr...
Chery presenta Omoda 4, da benzina a ele...
TSMC alza i prezzi: Qualcomm e MediaTek ...
Una Offline Room per aiutare gli student...
Partnership EOLO-Qualcomm: connettivit&a...
Fanatec senza freni: ufficiali il nuovo ...
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: 17:53.


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