cuda nvidia fma

cuda - fmad=falso da buen rendimiento



nvidia (1)

De las notas de la versión de Nvidia:

The nvcc compiler switch, --fmad (short name: -fmad), to control the contraction of floating-point multiplies and add/subtracts into floating-point multiply-add operations (FMAD, FFMA, or DFMA) has been added: --fmad=true and --fmad=false enables and disables the contraction respectively. This switch is supported only when the --gpu-architecture option is set with compute_20, sm_20, or higher. For other architecture classes, the contraction is always enabled. The --use_fast_math option implies --fmad=true, and enables the contraction.

Tengo dos núcleos: uno está puramente relacionado con muchas multiplicaciones, mientras que el otro está atado a la memoria. Observé una mejora constante en el rendimiento (alrededor del 5%) para mi kernel de cómputo intensivo cuando hago -fmad=false ... y en torno al mismo porcentaje de disminución en el rendimiento cuando lo -fmad=false para mi kernel de memoria. Por lo tanto, FMA funciona mejor para mi kernel de memoria, pero mi kernel enlazado al cómputo podría exprimir un poco de rendimiento al apagarlo. ¿Cuál podría ser la razón? Mi dispositivo es M2090 y estoy usando CUDA 4.2.

Opciones de compilación completas: -arch,sm_20,-ftz=true,-prec-div=false,-prec-sqrt=false,-use_fast_math,-fmad=false (o simplemente fmad=false porque de todos modos es el valor predeterminado.


El uso de FMA puede aumentar ligeramente la presión de registro, ya que tres operandos de origen deben estar disponibles al mismo tiempo. Así que activar / desactivar la generación de FMA puede generar pequeñas diferencias en la programación de instrucciones y la asignación de registros, lo que a su vez puede generar pequeñas diferencias de rendimiento. Para un kernel con muchos lenguajes multiply-add, -fmad = true debería hacer una diferencia de rendimiento significativa, pero como dices, tu kernel está dominado por multiplicaciones y por lo tanto se beneficiará poco del uso de FMA, y cualquier ganancia puede ser compensado por los aspectos de registro de presión / programación de instrucciones