bonjour à tous j'ai un soucis qui me prend la tete et j'ai besoin d'aide et c'est vraiment vraiment urgent.toute aide est la bien venu.merci d'avance
soit le code suivant:
Etudier et optimisé la fonction C suivante:
float baseline (int n , double a[ n ][ n ])
{ int i , j ; float s = 1.0;
for ( j =0; j < n ; j ++) for ( i =0; i < n ; i ++) s += a [ i ][ j ];
return s ;
}
Phase I ======= 1) Ecrivez un driver permettant de mesurer la performance du noyau
2) Compilez le noyau avec gcc -O2
3) Mesurez la performance du noyau
4) Recommencez avec gcc -O3, gcc -O3 -march=native, icc -O2, icc -O3 et icc -O3 -xHost.
5) Recommencez avec d'autres options d'optimisation qui vous sembleraient pertinentes (vous devrez les chercher dans la documentation de gcc et d'icc), que vous pourrez combiner entre elles...
6) Expliquez les différences de performances entre versions avec MAQAO (*) et likwid-perfctr (**)
7) Question indépendante des 6 premières : justifiez les points d'implémentation du driver susceptibles d'impacter les mesures. Vous en ferez notamment une analyse de sensibilité (montrez par exemple qu'augmenter un paramètre au-delà d'une certaine limite a un impact négligeable...)
Phase II ======== 0) Configurez la compilation selon le sujet (à défaut, gcc -O2)
1) Mesurez la performance du noyau
2) Analysez le noyau avec MAQAO (*) et likwid-perfctr (**)
3) Identifiez le goulet d'étranglement (ce qui limite les performances)
4) Proposez une optimisation (au niveau source)
5) Recommencez (rebouclez à l'étape 1) tant que vous arrivez à améliorer les performances. Vous pouvez soit repartir du noyau non optimisé, soit d'un noyau précédemment optimisé
6) Une fois (mais pas avant) que vous n'arrivez plus à obtenir de gain, notez bien les performances correspondantes ainsi que toutes les étapes qui vous ont permis d'y arriver puis relâchez la contrainte sur la compilation : vous pouvez alors utiliser des options plus agressives ou/et un autre compilateur => rebouclez à l'étape 1 jusqu'à ne plus obtenir de gain supplémentaire
7) Utilisez des directives OpenMP pour paralléliser votre noyau. S'il ne vous semble pas parallélisable, expliquez pourquoi, et comment on pourrait malgré tout le paralléliser (avec degré de concurrence moindre, autre algorithme etc.) 8) Question facultative (1 à 2 points bonus) : Utilisez des intrinsics pour écrire/optimiser le code (niveau avancé), voire modifiez directement l'assembleur (niveau expert).
Marsh Posté le 11-03-2016 à 22:33:14
bonjour à tous j'ai un soucis qui me prend la tete et j'ai besoin d'aide et c'est vraiment vraiment urgent.toute aide est la bien venu.merci d'avance
soit le code suivant:
Etudier et optimisé la fonction C suivante:
float baseline (int n , double a[ n ][ n ])
{
int i , j ;
float s = 1.0;
for ( j =0; j < n ; j ++)
for ( i =0; i < n ; i ++)
s += a [ i ][ j ];
return s ;
}
Phase I
=======
1) Ecrivez un driver permettant de mesurer la performance du noyau
2) Compilez le noyau avec gcc -O2
3) Mesurez la performance du noyau
4) Recommencez avec gcc -O3, gcc -O3 -march=native, icc -O2, icc -O3 et
icc -O3 -xHost.
5) Recommencez avec d'autres options d'optimisation qui vous
sembleraient pertinentes (vous devrez les chercher dans la documentation de gcc et d'icc), que vous pourrez combiner entre elles...
6) Expliquez les différences de performances entre versions avec MAQAO
(*) et likwid-perfctr (**)
7) Question indépendante des 6 premières : justifiez les points
d'implémentation du driver susceptibles d'impacter les mesures. Vous en
ferez notamment une analyse de sensibilité (montrez par exemple
qu'augmenter un paramètre au-delà d'une certaine limite a un impact
négligeable...)
Phase II
========
0) Configurez la compilation selon le sujet (à défaut, gcc -O2)
1) Mesurez la performance du noyau
2) Analysez le noyau avec MAQAO (*) et likwid-perfctr (**)
3) Identifiez le goulet d'étranglement (ce qui limite les performances)
4) Proposez une optimisation (au niveau source)
5) Recommencez (rebouclez à l'étape 1) tant que vous arrivez à
améliorer les performances. Vous pouvez soit repartir du noyau non
optimisé, soit d'un noyau précédemment optimisé
6) Une fois (mais pas avant) que vous n'arrivez plus à obtenir de gain,
notez bien les performances correspondantes ainsi que toutes les étapes
qui vous ont permis d'y arriver puis relâchez la contrainte sur la
compilation : vous pouvez alors utiliser des options plus agressives
ou/et un autre compilateur => rebouclez à l'étape 1 jusqu'à ne plus
obtenir de gain supplémentaire
7) Utilisez des directives OpenMP pour paralléliser votre noyau. S'il
ne vous semble pas parallélisable, expliquez pourquoi, et comment on
pourrait malgré tout le paralléliser (avec degré de concurrence moindre, autre algorithme etc.)
8) Question facultative (1 à 2 points bonus) : Utilisez des intrinsics
pour écrire/optimiser le code (niveau avancé), voire modifiez
directement l'assembleur (niveau expert).