Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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.
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato
Abbiamo provato la beta di World of Warcraft: Forever, il Classic+ di Blizzard in arrivo il 4 novembre: la nuova razza Skyborne restituisce la sensazione di un gioco nuovo, ma le zone storiche conservano la noia divertita di Classic. Classi ribilanciate, sciamani anche nell'Alleanza e un motore grafico che in 4K gira bene anche su una RTX 3070. Cosa cambia in Forever? La risposta nell'articolo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-08-2011, 14: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, 14: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 16:21. Motivo: Mancava una flag per le SSE :p
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2011, 16: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, 13: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, 14: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 14:06.
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 01-09-2011, 15: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, 11: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, 13: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


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...
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
Dove sono finite tutte le GeForce RTX 50...
Nintendo Switch 2 già violata gra...
OpenAI apre a tutti la sua IA che scegli...
Apple estende il Self Service Repair a i...
Linux, falle critiche del kernel pubblic...
Gli agenti AI diventano un incubo per le...
Fastweb e Vodafone verso il sistema unic...
70mai A800 Nano a 69,99€ su Amazon: dash...
Mini pacchi extra Ue, la tassa da 2 euro...
Metro 2033 Redux e Last Light Redux si a...
Silicio a 1.000 °C in un microonde: ...
Sigma FP2 senza mirino né slitta ...
Huawei Pura 90 Plus, preordini aperti in...
Addio al limite di 1,5 °C: il nuovo ...
Tor sotto attacco: manipolati oltre 300 ...
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: 19:55.


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