#include #include #define TOTAL 2000000 //gcc -fopenmp tp4.c -o tp4 ./tp4 // gcc -fopenmp tp4.c -o tp4 // OMP_NUM_THREADS=4 ./tp4 //for np in 1 2 4 8 16; do OMP_NUM_THREADS=$np ./syracuse;done int main(int argc, char * argv []) { int pass=0, cur; double start = omp_get_wtime(); //sol 1 #pragma omp parallel for reduction (+:pass) for(int i=0; i1) { cur=cur%2?3*cur+1:cur/2; } pass++; } // sol 2 #pragma omp parallel for private (cur) for(int i=0; i1) { cur=cur%2?3*cur+1:cur/2; } #pragma omp critical pass++; } //sol3 #pragma omp paralel { int mypass=0,cur; #pragma omp for for(int i=0; i1) { cur=cur%2?3*cur+1:cur/2; } mypass++; } #pragma omp critical pass=pass+mypass; } // sol 4 #pragma omp parallel { int id= omp_get_thread_num(); int np = omp_get_num_threads(); int cur; for(int i=id; i1) { cur=cur%2?3*cur+1:cur/2; } #pragma omp critical pass++; } } ///////////////////// MODIFIER JUSQU'ICI UNIQUEMENT ///////////////////// double end = omp_get_wtime(); printf("%d out of %d ! (delta= %d)\n", pass, TOTAL, TOTAL-pass); printf("time: %lf ms\n ", (end-start)*1000); }