1 |
|
|
/*************************************** |
2 |
|
|
Auteur : Pierre Aubert |
3 |
|
|
Mail : pierre.aubert@lapp.in2p3.fr |
4 |
|
|
Licence : CeCILL-C |
5 |
|
|
****************************************/ |
6 |
|
|
|
7 |
|
|
#include "micro_benchmark.h" |
8 |
|
|
|
9 |
|
|
///Do the Hadamard product |
10 |
|
|
/** @param[out] tabResult : table of results of tabX*tabY |
11 |
|
|
* @param tabX : input table |
12 |
|
|
* @param tabY : input table |
13 |
|
|
* @param nbElement : number of elements in the tables |
14 |
|
|
*/ |
15 |
|
232180400 |
void hadamard_product(float* tabResult, const float* tabX, const float* tabY, size_t nbElement){ |
16 |
✓✓ |
616674880400 |
for(size_t i(0lu); i < nbElement; ++i){ |
17 |
|
616442700000 |
tabResult[i] = tabX[i]*tabY[i]; |
18 |
|
|
} |
19 |
|
232180400 |
} |
20 |
|
|
|
21 |
|
|
///Get the number of nanoseconds per elements of the Hadamard product |
22 |
|
|
/** @param nbElement : number of elements of the tables |
23 |
|
|
*/ |
24 |
|
66 |
void evaluateHadamardProduct(size_t nbElement){ |
25 |
|
|
//Allocation of the tables |
26 |
✓✗✓ |
66 |
float * tabResult = new float[nbElement]; |
27 |
✓✗✓ |
66 |
float * tabX = new float[nbElement]; |
28 |
✓✗✓ |
66 |
float * tabY = new float[nbElement]; |
29 |
|
|
//Initialisation of the tables |
30 |
✓✓ |
275066 |
for(size_t i(0lu); i < nbElement; ++i){ |
31 |
|
275000 |
tabX[i] = (float)(i*32lu%17lu); |
32 |
|
275000 |
tabY[i] = (float)(i*57lu%31lu); |
33 |
|
|
} |
34 |
|
|
// size_t nbTestPerf(400lu); |
35 |
|
|
// size_t nbCallPerTest(600lu); |
36 |
|
66 |
size_t fullNbElement(nbElement); |
37 |
|
|
//Stating the timer |
38 |
|
|
// micro_benchmarkNsPrint("evaluateHadamardProduct", |
39 |
|
|
// nbTestPerf, nbCallPerTest, fullNbElement, hadamard_product, |
40 |
|
|
// tabResult, tabX, tabY, nbElement); |
41 |
|
|
|
42 |
✓✓✓✓
|
66 |
micro_benchmarkAutoNsPrint("evaluateHadamardProductAuto", fullNbElement, hadamard_product, tabResult, tabX, tabY, nbElement); |
43 |
|
|
|
44 |
|
|
//Deallocate the tables |
45 |
✓✗ |
66 |
delete[] tabResult; |
46 |
✓✗ |
66 |
delete[] tabX; |
47 |
✓✗ |
66 |
delete[] tabY; |
48 |
|
66 |
} |
49 |
|
|
|
50 |
|
11 |
int main(int argc, char** argv){ |
51 |
|
11 |
return micro_benchmarkParseArg(argc, argv, evaluateHadamardProduct); |
52 |
|
|
} |
53 |
|
|
|