Supposons que jePuis-je demander à mon compilateur d'utiliser fast-math pour chaque fonction?
template <bool UsesFastMath> void foo(float* data, size_t length);
et je veux compiler un instanciation avec -ffast-math
(--use-fast-math
pour nvcc), et l'autre instanciation sans elle. Ceci peut être réalisé en instanciant chacune des variantes dans une unité de traduction séparée, et en compilant chacune d'entre elles avec une ligne de commande différente - avec et sans le commutateur.
Ma question est de savoir s'il est possible d'indiquer aux compilateurs populaires (*) d'appliquer ou de ne pas appliquer -ffast-math
pour des fonctions individuelles - afin que je puisse avoir mes instanciations dans la même unité de traduction.
Notes:
- Si la réponse est "non", des points bonus pour expliquer pourquoi.
- Ce ne sont pas les mêmes questions que this one, qui consiste à activer et désactiver le calcul rapide au moment de l'exécution. Je suis beaucoup plus modeste ...
(*) par les compilateurs populaires que je veux dire tout de: gcc, clang, msvc cpi, nvcc (pour le code du noyau GPU) dont vous avez cette information.
'nvcc': Non. Les indicateurs de compilation sont appliqués par unité de compilation. Aucun attribut de fonction équivalente n'existe pour appliquer cette fonction par fonction. Si vous souhaitez appliquer différents indicateurs, collez le code dans différentes unités de compilation (vous pouvez inclure le code source du même fichier, si vous le souhaitez). Pour un contrôle local serré, divers éléments intrinsèques du dispositif CUDA (ou le pire des cas, un assemblage en ligne) peuvent fournir une grande partie de ce dont vous avez besoin. – njuffa
@njuffa: Faites-en une réponse s'il vous plaît. – einpoklum
J'ai fourni une réponse comme suggéré – njuffa