Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale
La prima tappa italiana della Road to CES porta a Milano i vertici della Consumer Technology Association, con una nuova griglia di lettura dei trend tecnologici e una posizione netta su dazi e regolamentazione dell'IA
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
OPPO ha appena lanciato sul mercato la nuova serie Find X10, che ha come smartphone premium il Find X10 Pro Max, uno smartphone completo, che fa del comparto fotografico il suo vero punto di forza. Ma sono tante le novità, tra cui l'AI che adesso diventa agentica. Ma andiamo a vedere nel dettaglio questo nuovo smartphone.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-08-2011, 15:35   #1
cndcnd
Junior Member
 
Iscritto dal: Feb 2011
Messaggi: 13
controllo precisione fpu

Ciao,

Per un'applicazione geometrica scritta in c++ utilizzo due piattaforme, una è un laptop con:

- windows
- compilatore gcc
- processori intel

l'altra è un cluster con:

- linux
- compilatore gcc
- processori intel

Il problema è che, pur essendo il codice lo stesso, i risultati numerici sono (leggermente) diversi. Ho provato a inserire il codice seguente, che dovrebbe consentire di controllare la precisione della fpu:

void set_fpu (unsigned int mode)
{
asm ("fldcw %0" : : "m" (*&mode));
}

set_fpu (0x27F); /* use double-precision rounding */

Purtroppo non funziona :-( Avete qualche idea?

Grazie,

Alex
cndcnd è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2011, 15:41   #2
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Prova in fase di compilazione a disabilitare eventuali ottimizzazioni del processore.

Se entrambe le piattafome supportano SSE prova ad usare queste flags

"-O2 -march=i686 -mfpmath=sse -msse2"

oppure potresti usare

"-O2 -march=i686 -mfpmath=387"

Se non riesci a risolvere prova a giochicchiare con le flags di compilazione, in particolare per disabilitare tutte le ottimizzazioni :

"-O0 -march=i386 -mtune=i386 -mfpmath=387"

Usare la STESSA versione di GCC potrebbe aiutare ad avere risultati consistenti, perchè magari il codice generato è leggermente diverso

Ciao

PS= ovviamente per usare la doppia precisione assicurati di stare usando dei double nel tuo programma
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 31-08-2011 alle 17:21. Motivo: Mancava una flag per le SSE :p
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2011, 17:10   #3
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Verifica quali ottimizzazioni relative all'fpu sono abilitate (di default?) nei due ambienti.
In particolare se vuoi rendere la cosa piu' portabile, devi forzare un comportamento conforme allo standard (al prezzo di performance potenzialmente piu' basse).
Prova a dare una occhiata alle varie flag relative di gcc. Un "sospetto" potrebbe essere -fexcess-precision visto che di default con nel caso di sse usa la precisione definita dallo standard, mentre nel caso dell'fpu no.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 01-09-2011, 14:49   #4
cndcnd
Junior Member
 
Iscritto dal: Feb 2011
Messaggi: 13
@ anonimo veneziano: "PS= ovviamente per usare la doppia precisione assicurati di stare usando dei double nel tuo programma!". In realtà ci sono anche parecchi float, ma non capisco perchè questo fatto dovrebbe c'entrare. A me non interessa che i risultati siano precisi, io voglio soltanto che venga fuori lo stesso risultato.

@ Marco. Non posso disabilitare le ottimizzazioni, la versione sul cluster dev’essere più veloce possibile, mentre l’altra mi serve per il debug. Comunque l’unico flag che utilizzo in compilazione è –O3.

In ogni caso adesso sto cercando di usare double dappertutto, poi provo a rimettere il codice di controllo della FPU e vediamo.
cndcnd è offline   Rispondi citando il messaggio o parte di esso
Old 01-09-2011, 15:03   #5
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da cndcnd Guarda i messaggi
@ Marco. Non posso disabilitare le ottimizzazioni, la versione sul cluster dev’essere più veloce possibile, mentre l’altra mi serve per il debug. Comunque l’unico flag che utilizzo in compilazione è –O3.
Non puoi pretendere di avere risultati consistenti da una macchina all'altra se abiliti delle ottimizzazioni che sono dipendenti dalla piattaforma sottostante. Secondo me dovresti almeno fare una prova per verificare se il problema sta proprio li'.
Magari scopri che sono quelle sulla tua macchina ad essere colpevoli (esempio: magari il cluster utilizza istruzioni SSE con precisione 64 bit, mentre il tuo pc utilizza l'FPU, con una precisione di 80 bit per i dati intermedi)
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele

Ultima modifica di marco.r : 01-09-2011 alle 15:06.
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 01-09-2011, 16:14   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Come ha detto marco se usi ottimizzazioni diverse per le due macchine i risultati possono essere diversi. In particolare devi assicurarti che entrambe le macchine usino le stesse unità floating point (o entrambi quelle SSE o entrambi la FPU 387) perchè la FPU 387 usa una precisione interna a 80bit e poi per farlo stare in un double il risultato viene riscalato a 64 bit, mentre la FPU SSE utilizza la precisione a 64 bit per i calcoli interni e questa cosa può creare risultati differenti se su una macchina usi 387 e sull'altra SSE .

Inoltre se non ti interessa la precisione, ma preferisci la velocità allora potresti pensare di usare l' ottimizzazione "-ffast-math" che più di qualsiasi altra ottimizzazione velocizza i calcoli con la FPU a scapito però della compliance con lo standard IEEE per i calcoli in virgola mobile. Se usando "-ffast-math" non si rompe niente allora sei a cavallo
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 02-09-2011, 12:12   #7
cndcnd
Junior Member
 
Iscritto dal: Feb 2011
Messaggi: 13
Grazie per le risposte ragazzi, sto facendo delle prove. A proposito, al compilatore microsoft visual studio l'istruzione:

asm ("fldcw %0" : : "m" (*&mode));

non piace. Non gli piace nemmeno:

_asm ("fldcw %0" : : "m" (*&mode));

Sapete qual'è la versione giusta?
cndcnd è offline   Rispondi citando il messaggio o parte di esso
Old 02-09-2011, 14:14   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da cndcnd Guarda i messaggi
Grazie per le risposte ragazzi, sto facendo delle prove. A proposito, al compilatore microsoft visual studio l'istruzione:

asm ("fldcw %0" : : "m" (*&mode));

non piace. Non gli piace nemmeno:

_asm ("fldcw %0" : : "m" (*&mode));

Sapete qual'è la versione giusta?
Su windows penso che sia meglio usare questa API:

http://msdn.microsoft.com/en-gb/library/e9b52ceh.aspx
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato WoW Forever provato: il MMORPG che la community ...
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita TCL P80 Ultra: con un display AMOLED opaco &egra...
NordVPN anticipa il Black Friday: sconti...
HPE Spaceborne Computer-4: calcolo ad al...
500 chilometri in soli 5 minuti: la rica...
CATL e BAIC puntano a un milione di auto...
La Svezia blocca ChatGPT e Claude sui co...
La NASA ha tenuto una conferenza sulle f...
Galaxy S27 Ultra, spunta la batteria in ...
Google Maps porta l'intelligenza artific...
Una foto troppo perfetta può costare car...
Caldo in Europa, oltre 50.000 morti stim...
Il low cost spopola su Amazon: 7 offerte...
HP Envy 6120e a 49,90€ su Amazon: stampa...
Dove finiscono le ore che l’IA fa rispar...
Radiatori a olio in offerta su Amazon: M...
Tlc, l'occupazione crolla al minimo stor...
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: 04:28.


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