#include #include #ifndef N #define N 1000 // la taille des matrices [N][N]/vecteurs[N^2] #endif #ifndef M #define M 16 // nombre d'itérations de chaque fonction #endif #ifndef TYPE #define TYPE float // ou double ou int, etc. On peut essayer les // différents types de données #endif // pour éviter des conversions int-float inutiles #if TYPE==int || TYPE==short || TYPE==char || TYPE==uint64_t # define ZERO 0 #elif TYPE==float # define ZERO 0.0f #else # define ZERO 0.0 #endif #ifndef BL #define BL 16 // La taille des blocs pour la mult de matrices par blocs #endif #define STR1(x) #x #define STR(x) STR1(x) // Permet de lire le compteur interne du nombre de cycles du // processeur (TSC timestamp counter). // Le TSC renvoie le nombre de cycles codé sur 64 bits (long long) // start_timer() initie la mesure et stop_timer() la termine // dtime() convertit en double la différence pour simplifier les calculs ultérieurs // et retranche le temps (approximatif) bécessaire à la mesure du TSC static unsigned long long start_timer() ; static unsigned long long stop_timer() ; static double dtime(long long debut, long long fin); // le fichier où sont les fonctions d'accès au TSC #include "tsc.h" TYPE AF[N][N], YF[N][N], XF[N][N], YT[N][N], // matrices [N][N] BF[N*N], CF[N*N], // vecteurs N^2 SF; // accumulateur double resultats[M]; // les temps de calcul en double static inline int min (int a,int b) { if (a