Domanda

qualche programma in C che fa ampi calcoli in virgola mobile ottengono risultati retto su una macchina Linux pc, ma risultati errati sulla SPE del processore cellulare, ma non sul PPU della cella. Sto usando i compilatori gcc. Mi chiedo se c'è qualche opzione di compilazione gcc per aumentare metodo di arrotondamento o simili in modo da ottenere singoli calcoli galleggiante di precisione con più precisione. Non posso cambiare per raddoppiare, come sulle prestazioni SPE sarebbe drastica riduzione

Grazie

È stato utile?

Soluzione

In base alla IBM documentazione per le differenze da IEEE 754 sul SPU , potrebbe essere qualsiasi numero di cose:

  
      
  • Zero risultati di operazioni aritmetiche sono sempre +0, mai -0.
  •   
  • ingressi denormal da 2-149 a 2-126 per operazioni aritmetiche vengono trattate   come zero con lo stesso segno. Aritmetica   operazioni producono mai denormal   risultati, ma producono +0, invece.
  •   
  • Le operazioni aritmetiche non supportano IEEE Inf o NaN. Queste sequenze di bit   rappresentare i numeri validi. straripamento   risultati producono la massima grandezza   valore del segno appropriato.
  •   
  • operazioni aritmetiche utilizzare solo il round-a-zero (chop, troncamento)   modalità di arrotondamento, indipendentemente dal   impostazione della modalità di arrotondamento nella   Floating-Point di stato e di controllo   Register (FPSCR), che riguarda solo   l'aritmetica a doppia precisione   operazioni.
  •   

Naturalmente, in una pagina correlata, è possibile codificare SPU anche compilazione di una rigorosa IEEE conformità :

  

Per impostazione predefinita, XL C / C ++ segue la maggior parte, ma   Non tutte le regole della IEEE   standard. Se si compila con la   opzione -qnostrict, che viene attivata per impostazione predefinita a livello di ottimizzazione -O3 o   regole superiore, alcune IEEE in virgola mobile   sono violati in modi che possono migliorare   prestazioni, ma potrebbe influenzare programma   correttezza. Per evitare questo problema, e   per la compilazione di un rigoroso rispetto   lo standard IEEE, procedere come segue:

     
      
  • Utilizzare i = -qfloat opzione del compilatore nomaf.
  •   
  • Se il programma cambia la modalità di arrotondamento in fase di esecuzione, utilizzare il -qfloat = RRM   opzione.
  •   
  • Se il codice di dati o di programma contiene la segnalazione valori NaN (NANS), utilizzare il   -qfloat = nans opzione. (A segnalazione NaN è diverso da una tranquilla NaN; voi   deve codificare in modo esplicito nella   programma o di dati o crearlo utilizzando   l'opzione -qinitauto compilatore.)
  •   
  • Se si compila con -O3, -O4 o -O5, includere l'opzione -qstrict dopo di esso.
  •   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top