|
Voici le fichier calcul.c :
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
36
37
38
39
40
41
|
#include "calcul.h"
#ifdef __i386
extern uint64_t rdtsc(void) {
uint64_t x;
__asm__ volatile ("rdtsc" : "=A" (x));
return x;
}
#elif defined __amd64
extern uint64_t rdtsc(void) {
uint64_t a, d;
__asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
return (d<<32) | a;
}
#endif
///Fonction qui renvoie un nombre aléatoire entre 0 et 1
/** @return nombre aléatoire entre 0 et 1
*/
float randFloat(){
return ((float)rand())/((float)RAND_MAX);
}
///Fonction qui fait la multiplication de deux matrices
/** @param r : résultat de la multiplication
* @param a : matrice
* @param b : matrice
*/
void sgemmRef(float * r, float * a, float * b, size_t size){
size_t i,j,k;
float tmp;
for(j = 0; j < size; ++j){
for(i = 0; i < size; ++i){
tmp = 0.0f;
for(k = 0; k < size; ++k){
tmp += a[j*size + k]*b[k*size + i];
}
r[j*size + i] = tmp;
}
}
}
|
|
|