Template, OpenMP et clause reduction - C++ - Programmation
Marsh Posté le 14-03-2009 à 09:15:57
Alors deja, on n'essaye aps des trucs au hasard en pensant que ca amrche.
Le preprocesseur est appelé en amont de la compilation, la résolution des types en plein mileiux, donc jamais ca amrche.
c'est pas du preprocesseur qu'il te faut mais meta-programmer deux variantes de ta boucle que tu spécialise selon le retour de la meta-fonction boost::is_fundamental qui renvoit un booleen statique si le type testé est un type atomique du langage.
en gros
Code :
|
http://www.boost.org/doc/libs/1_38 [...] ental.html
Marsh Posté le 14-03-2009 à 10:14:04
Le truc c'est que je ne veux pas réécrire 2 fois l'agorithmes du solver, c'est pas beau à mon gout. Je veux une seule fonction template qui gère tout les cas.
Marsh Posté le 14-03-2009 à 10:24:30
C'est pas bien compliqué. Si la seule difference entre la version OpenMP et l'autre c'est les pragma openMP tu ecris :
Code :
|
Aprés tu n'as pas le choix, le controle sur les types se fait là et pas avant.
Marsh Posté le 14-03-2009 à 00:55:34
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 :
J'ai essayé ça :
Mais cela ne semble pas fonctionner.
J'ai également essayé en passant un 2ème paramètre au template, comme ça :
[/cpp]
Mais ça ne semble pas fonctionner non plus.
Est-il possible de tester à la précompile le type du template ?
Merci d'avance !