5.1.2 Le fichier calcul.c

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;
		}
	}
}