fmad = false ergibt eine gute Leistung

Aus den Nvidia-Versionshinweisen:

 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.

Ich habe zwei Kernel - einer ist rein rechnergebunden mit vielen Multiplikationen, während der andere speichergebunden ist. Bei meinem rechenintensiven Kernel stelle ich eine konstante Leistungsverbesserung (ca. 5%) fest-fmad=false... und ungefähr dieselbe prozentuale Abnahme der Leistung, wenn ich sie für meinen speichergebundenen Kernel ausschalte. FMA funktioniert also besser für meinen speichergebundenen Kernel, aber mein rechnergebundener Kernel könnte die Leistung ein wenig beeinträchtigen, indem er ausgeschaltet wird. Was könnte der Grund sein? Mein Gerät ist M2090 und ich verwende CUDA 4.2.

Vollständige Kompilierungsoptionen:-arch,sm_20,-ftz=true,-prec-div=false,-prec-sqrt=false,-use_fast_math,-fmad=false (oder ich entferne einfachfmad=false denn das ist sowieso die Voreinstellung.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage