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