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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| #include "essai_fibo.h"
//=================================================================
// IMPLEMENTATION POUR LA CLASSE Calcul_fibo
//=================================================================
//initialisation du membre static
int Calcul_fibo::nb_appel_copie = 0;
//operateur ()
void Calcul_fibo::operator() ( const blocked_range<int>& range) const
{
//on charge le tableau dans une variable locale (pour les perfs)
int * tab_local = tab;
//on applique notre operateur fibo sur la partie du tableau donnee par le blocked_range
for (int i = range.begin(); i != range.end(); ++i)
tab_local[i] = fibo( tab_local[i], rang);
}
//constructeur
Calcul_fibo::Calcul_fibo(int * le_tab, int le_rang)
{
tab = le_tab;
rang = le_rang;
}
//constructeur de copie
Calcul_fibo::Calcul_fibo(const Calcul_fibo & cf)
{
tab = cf.tab;
rang = cf.rang;
nb_appel_copie++;
}
//=================================================================
// FONCTION QUI EFFECTUE LE CALCUL PARALLELE
//===================================================================
void calcul_fibo_parallele(int * tab_paral, int rang, int range_begin, int range_end)
{
parallel_for(blocked_range<int>(range_begin, range_end, 250), Calcul_fibo(tab_paral, rang) );
}
//=================================================================
// FONCTION QUI EFFECTUE LE CALCUL SERIE
//===================================================================
void calcul_fibo_serie(int * tab_serie, int taille, int rang)
{
for (int i = 0; i < taille; ++i)
tab_serie[i] = fibo( tab_serie[i], rang);
}
//=================================================================
// FONCTION RECURSIVE POUR LE CALCUL D UN TERME DE LA SUITE FIBO
//===================================================================
//complexite de l'ordre de 2^(rang) appels recursifs...
int fibo( int u1, int rang)
{
if (rang == 1)
return u1;
if (rang == 0)
return 0;
return ( fibo(u1, rang-1) + fibo(u1, rang-2) );
} |
Partager