#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& 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(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) ); }