5.6.5 : Le fichier main.cpp
Développons le main.cpp :Pour afficher les résultats :
1 |
#include <iostream>
|
Notre chonomètre :
1 |
#include "timer.h"
|
Notre produit de Hadamard :
1 |
#include "hadamard_product.h"
|
La fonction principale du programe :
1 |
int main(int argc, char** argv){ |
Définissons le nombre d'éléments et le nombre d'appels du calcul par défaut :
1 |
size_t nbElement(100000000), nbCallPerTest(10000lu); |
Ensuite, nous prennons en compte les éventuels arguments passés au programme, le nombre d'élément tout seul, ou le nombre d'éléments suivit du nombre de d'appels :
1 2 3 4 5 6 7 |
if(argc == 2){ nbElement = atol(argv[1]); }else if(argc == 3){ nbElement = atol(argv[1]); nbCallPerTest = atol(argv[2]); } std::cout << "Perform test with " << nbElement << " elements and "<< nbCallPerTest << " repetitions" << std::endl; |
Déclaration et initialisation de nos tableaus de test :
1 2 3 4 5 6 |
std::vector<float> tabX, tabY, tabRes; tabRes.resize(nbElement); for(size_t i(0lu); i < nbElement; ++i){ tabX.push_back(i*19lu%11); tabY.push_back(i*27lu%19); } |
Résultat et lancement du chronomètre :
1 2 |
float res(0.0f); HiPeTime beginTime = phoenix_getTime(); |
Répétition du nombre de calcul
1 2 3 4 |
for(size_t i(0lu); i < nbCallPerTest; ++i){ hadamard_product(tabRes, tabX, tabY); res += tabRes[0]; } |
Arrêt du chronomètre :
1 |
NanoSecs elapsedTime(phoenix_getTime() - beginTime); |
Calcul du temps par test :
1 |
double fullNs(elapsedTime.count()/((double)nbCallPerTest)); |
Affichage des résultats :
1 2 |
std::cerr << "timing\t" << nbElement << "\t" << fullNs << std::endl; std::cout << "x = " << tabX.front() << ", y = " << tabY.front() << ", tabRes = " << tabRes.front() << ", res = "<< res << ", nbElement = "<<nbElement<<", elapsedTime " << fullNs << std::endl; |
Fin de la fonction principale :
1 2 |
return 0; } |
Le fichier main.cpp complet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/*************************************** Auteur : Pierre Aubert Mail : pierre.aubert@lapp.in2p3.fr Licence : CeCILL-C ****************************************/ #include <iostream> #include "timer.h" #include "hadamard_product.h" int main(int argc, char** argv){ size_t nbElement(100000000), nbCallPerTest(10000lu); if(argc == 2){ nbElement = atol(argv[1]); }else if(argc == 3){ nbElement = atol(argv[1]); nbCallPerTest = atol(argv[2]); } std::cout << "Perform test with " << nbElement << " elements and "<< nbCallPerTest << " repetitions" << std::endl; std::vector<float> tabX, tabY, tabRes; tabRes.resize(nbElement); for(size_t i(0lu); i < nbElement; ++i){ tabX.push_back(i*19lu%11); tabY.push_back(i*27lu%19); } float res(0.0f); HiPeTime beginTime = phoenix_getTime(); for(size_t i(0lu); i < nbCallPerTest; ++i){ hadamard_product(tabRes, tabX, tabY); res += tabRes[0]; } NanoSecs elapsedTime(phoenix_getTime() - beginTime); double fullNs(elapsedTime.count()/((double)nbCallPerTest)); std::cerr << "timing\t" << nbElement << "\t" << fullNs << std::endl; std::cout << "x = " << tabX.front() << ", y = " << tabY.front() << ", tabRes = " << tabRes.front() << ", res = "<< res << ", nbElement = "<<nbElement<<", elapsedTime " << fullNs << std::endl; return 0; } |
Le fichier main.cpp est disponible ici.