38,760
edits
No edit summary |
(Updating to match new version of source page) |
||
Line 143: | Line 143: | ||
{{Command | {{Command | ||
| | |nvc++ -fast -Minfo{{=}}accel -ta{{=}}tesla:managed main.cpp -o challenge | ||
|result= | |result= | ||
... | ... | ||
matvec(const matrix &, const vector &, const vector &): | matvec(const matrix &, const vector &, const vector &): | ||
23, include "matrix_functions.h" | 23, include "matrix_functions.h" | ||
27, Generating copyout(ycoefs[:num_rows]) | 27, Generating implicit copyin(xcoefs[:]) [if not already present] | ||
Generating copyin( | Generating implicit copyout(ycoefs[:num_rows]) [if not already present] | ||
Generating implicit copyin(row_offsets[:num_rows+1],Acoefs[:],cols[:]) [if not already present] | |||
30, Loop carried dependence of ycoefs-> prevents parallelization | |||
Loop carried backward dependence of ycoefs-> prevents vectorization | Loop carried backward dependence of ycoefs-> prevents vectorization | ||
Complex loop carried dependence of | Complex loop carried dependence of Acoefs->,xcoefs-> prevents parallelization | ||
Generating Tesla code | Generating Tesla code | ||
30, #pragma acc loop seq | |||
34, #pragma acc loop vector(128) /* threadIdx.x */ | |||
Generating implicit reduction(+:sum) | |||
34, Loop is parallelizable | |||
}} | }} | ||
As we can see in the compiler output, the compiler could not parallelize the two loops. We will see in the following sections how to deal with this. | As we can see in the compiler output, the compiler could not parallelize the two loops. We will see in the following sections how to deal with this. | ||
Line 164: | Line 164: | ||
|title=Choix du compilateur | |title=Choix du compilateur | ||
|content= | |content= | ||
En date de mai 2016, relativement peu de compilateurs offraient les fonctionnalités d'OpenACC. Les plus avancés en ce sens sont les compilateurs du [http://www.pgroup.com/ Portland Group] de [http://www.nvidia.com/content/global/global.php NVidia] et ceux de [http://www.cray.com/ Cray]. Pour ce qui de [https://gcc.gnu.org/wiki/OpenACC GNU], l'implémentation d'OpenACC était expérimentale et devrait être complète dans la version 6. | <div class="mw-translate-fuzzy"> | ||
En date de mai 2016, relativement peu de compilateurs offraient les fonctionnalités d'OpenACC. Les plus avancés en ce sens sont les compilateurs du [http://www.pgroup.com/ Portland Group] de [http://www.nvidia.com/content/global/global.php NVidia] et ceux de [http://www.cray.com/ Cray]. Pour ce qui de [https://gcc.gnu.org/wiki/OpenACC GNU], l'implémentation d'OpenACC était expérimentale et devrait être complète dans la version 6. | |||
</div> | |||
Dans ce tutoriel, nous utilisons la version 16.3 des [http://www.pgroup.com/support/download_pgi2016.php?view=current compilateurs du Portland Group] qui sont gratuits pour des fins de recherche universitaire. | <div class="mw-translate-fuzzy"> | ||
Dans ce tutoriel, nous utilisons la version 16.3 des [http://www.pgroup.com/support/download_pgi2016.php?view=current compilateurs du Portland Group] qui sont gratuits pour des fins de recherche universitaire. | |||
</div> | |||
}} | }} | ||
Line 211: | Line 215: | ||
Remarquez que les autres pointeurs n'ont pas besoin d'être restreints puisque le compilateur ne les rapporte pas comme causant des problèmes. En recompilant avec les changements que nous venons de faire, le compilateur émet le message suivant : | Remarquez que les autres pointeurs n'ont pas besoin d'être restreints puisque le compilateur ne les rapporte pas comme causant des problèmes. En recompilant avec les changements que nous venons de faire, le compilateur émet le message suivant : | ||
{{Command | {{Command | ||
| | |nvc++ -fast -Minfo{{=}}accel -ta{{=}}tesla:managed main.cpp -o challenge | ||
|result= | |result= | ||
matvec(const matrix &, const vector &, const vector &): | matvec(const matrix &, const vector &, const vector &): | ||
23, include "matrix_functions.h" | 23, include "matrix_functions.h" | ||
27, Generating copyout(ycoefs[:num_rows]) | 27, Generating implicit copyout(ycoefs[:num_rows]) [if not already present] | ||
Generating copyin(xcoefs[:], | Generating implicit copyin(xcoefs[:],row_offsets[:num_rows+1],Acoefs[:],cols[:]) [if not already present] | ||
30, Loop is parallelizable | |||
Generating Tesla code | Generating Tesla code | ||
30, #pragma acc loop gang /* blockIdx.x */ | |||
34, #pragma acc loop vector(128) /* threadIdx.x */ | |||
Generating implicit reduction(+:sum) | |||
34, Loop is parallelizable | |||
}} | }} | ||