2013-02-27 1 views
0

Je travaille sur un projet, j'essaie de paralléliser l'application. il y a quelques fonctions que j'essaye de paralléliser mais le problème est que ces fonctions appellent d'autres fonctions très fréquemment. Les boucles sont seulement pour le calcul et il y a beaucoup de boucles dans un corps de fonction. Je sais qu'OpenACC ne supporte pas les appels de fonctions (seulement les appels en ligne) dans sa directive, donc j'ai trouvé deux approches: a) soit Mettre la directive OpenAcc autour des boucles et obtenir le parallélisme requis et ignorer l'appel de la fonction (non b) ou je peux mettre le corps de la fonction appelée à l'intérieur de la fonction d'appel, puis le temps de création du fil plusieurs fois en entrant dans la directive acc est minimisé (en incluant un grand nombre de boucles dans un bloc). mais cela semble être un mal de tête parce que les corps de fonction sont grands (environ 4000-5000 lignes de code).OpenAcc: Comment paralléliser les appels de fonction

Je n'arrive pas à comprendre comment gérer un tel scénario.

en résumé j'ai besoin de trouver un moyen efficace de paralléliser les appels de fonction dans OpenACC

+0

Si vous laissez les appels de fonction dans les régions parallélisées, le compilateur ne sera probablement pas en mesure de paralléliser les boucles. Quel compilateur utilisez-vous? La sortie du compilateur vous sera très utile lorsque vous le ferez. –

+0

La bonne nouvelle est que le support d'appel de fonction est ajouté dans la spécification OpenACC 2.0. –

Répondre

0

Comme certains Mark Ebersole dit, OpenACC 2.0 est la solution. La directive de routine dans 2.0 permet de marquer les fonctions en tant que cibles de périphérique.

Questions connexes