Pregunta

algún programa en C y hace extensivos cálculos de punto flotante obtienen resultados adecuados en una máquina Linux PC, pero resultados erróneos sobre la SPE del procesador celular, pero no en el PPU de la célula. Estoy utilizando compiladores gcc. Me pregunto si hay alguna opción de compilación gcc para aumentar método de redondeo o similar, por lo que obtener los cálculos de precisión simple flotador con más precisión. No puedo cambiar el doble, como en el rendimiento SPE drástica reducir

Gracias

¿Fue útil?

Solución

Basado en el IBM documentación de las diferencias de IEEE 754 de la SPU , podría ser cualquier número de cosas:

    Resultados
  • Cero de operaciones aritméticas son siempre 0, nunca se -0.
  • entradas denormal 2-149 a 2-126 a operaciones aritméticas son tratados como cero con el mismo signo. Aritmética operaciones nunca producen denormal resultados, pero producen 0 en su lugar.
  • Las operaciones aritméticas no son compatibles con IEEE Inf o NaN. Estos patrones de bits representar números válidos. Desbordamiento resultados producen la máxima magnitud valor de signo apropiado.
  • Las operaciones aritméticas use solamente la ronda a cero (CHOP, truncado) modo de redondeo, independientemente de la Ajuste del modo de redondeo en el Estado y control de punto flotante Registro (FPSCR), que afecta sólo aritmética de doble precisión operaciones.

Por supuesto, en una página relacionada, puede código SPU también compilación de estricta conformidad con IEEE :

Por defecto, XL C / C ++ sigue la mayor parte, pero No todas las reglas de la IEEE estándar. Si se compila con el -qnostrict opción, que está activada de forma predeterminada en el nivel de optimización o -O3 normas superiores, algunas de punto flotante IEEE son violados de manera que puedan mejorar rendimiento, pero podría afectar programa exactitud. Para evitar este problema, y compilar para el estricto cumplimiento de el estándar IEEE, haga lo siguiente:

  • Use las -qfloat = opción de compilador nomaf.
  • Si el programa cambia el modo de redondeo en tiempo de ejecución, utilice el -qfloat = RRM opción.
  • Si el código de datos o programa contiene señalización valores NaN (NANS), utilice el -qfloat = NANS opción. (Señalización NaN es diferente de una tranquila NaN; se debe codificar explícitamente en el programa o de datos o crearlo usando la opción -qinitauto compilador.)
  • Si se compila con -O3, -O4 o -O5, incluye la opción -qstrict después de ella.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top