Salut,
J'ai une fonction template resolvant une équation de Poisson.
Dans cette méthode je fais appel des boucles que je parallelise avec OpenMP.
A un moment donné de l'algo, une boucle incrémente une variable extérieure à la boucle, donc je la passe en reduction.
Les problèmes arrivent lorsque mon template prendre des types non scalaire, par exemple un objet Coord_2D (pour gérer des coordonnées 2D).
Du coup la compile plante sur le pragma open mp reduction car la variable n'est plus de type scalaire.
J'ai donc besoin de commandes préprocesseur pour tester le type du template, et adapter les déclarations de variables / directives OpenMP en fonction.
Considérons la déclaration suivante :
Code :
- template <class type> void Poisson_solver(..)
|
J'ai essayé ça :
Code :
- typedef Coord_2D<float> coord_2d_float
- ...
- #if type == coord_2d_
- ..
- #endif
|
Mais cela ne semble pas fonctionner.
J'ai également essayé en passant un 2ème paramètre au template, comme ça :
Code :
- template <class type, int dimension> void Poisson_solver(..)
- ..
- #if dimension == 2
- ..
- #endif
|
[/cpp]
Mais ça ne semble pas fonctionner non plus.
Est-il possible de tester à la précompile le type du template ?
Merci d'avance !