0
У меня есть следующая программа в OPen MP (C).Отладка параллельной программы В C
Иногда он дает 0 или 3 в качестве числа финнако или сбоев, выдающих ошибку сегментации.
#include <stdlib.h>
#include <stdio.h>
#include <omp.h>
static int fib(int);
int main(){
int nthreads, tid;
int n =8;
#pragma omp parallel num_threads(4) private(tid)
{
#pragma omp single
{
tid = omp_get_thread_num();
printf("Hello world from (%d)\n", tid);
printf("Fib(%d) = %d by %d\n", n, fib(n), tid);
}
} // all threads join master thread and terminates
}
static int fib(int n){
int i, j, id;
if(n < 2)
return n;
#pragma omp task shared (i) private (id)
{
i = fib(n-1);
}
#pragma omp task shared (j) private (id)
{
j = fib(n-2);
}
return (i+j);
}
Что не так с программой?
Выход как:
Привет мир из (3)
Фибо (8) = 3 по 3
Итак, вы слышали лекарство от Сельчука Чихана. Это сработало? Мне очень хотелось бы услышать, что такое номера производительности; Fib (n), реализованный таким образом, является самым сложным на Земле, чтобы хорошо распараллелить. Для сравнения номеров см. Http://stackoverflow.com/q/5086040/120163 –