fmad = false dá bom desempenho

De notas de lançamento da 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.

Eu tenho dois kernels - um é puramente computado com muitas multiplicações, enquanto o outro é ligado à memória. Percebo uma melhoria consistente no desempenho (cerca de 5%) para o meu kernel com uso intensivo de computação quando faço-fmad=false... e aproximadamente o mesmo percentual de declínio no desempenho quando eu desligo para o meu kernel ligado à memória. Então, o FMA está funcionando melhor para o meu kernel ligado à memória, mas o kernel ligado ao meu computador pode extrair um pouco do desempenho desativando-o. Qual seria a razão? Meu dispositivo é M2090 e estou usando o CUDA 4.2.

Opções completas de compilação:-arch,sm_20,-ftz=true,-prec-div=false,-prec-sqrt=false,-use_fast_math,-fmad=false (ou eu simplesmente removofmad=false porque esse é o padrão de qualquer maneira.

questionAnswers(1)

yourAnswerToTheQuestion