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.