У меня есть этот кодpragma omp for/parallel не работает?
#define N 2048
int main(void)
{
FILE *fp1;
fp1=fopen("myfile.txt", "a");
for(int i=0;i<N;i++)
{
#pragma omp parallel
{
int *x=malloc(sizeof(int)*N);
int *xtemp=malloc(sizeof(int)*N);
int (*adj)[N];
adj=malloc(sizeof *adj *N);
...//other declarations
#pragma omp for
for(int k=0;k<100;k++)
{
/* do things involving x,xtemp, adj...*/
}
fprintf(fp1,"things \n");
... //free vectors part...
}
}
fclose(fp1);
return 0;
}
код кажется работать нормально, но когда я проверяю с htop
использования моего процессора (i3 двухъядерных с Hyper-Threading), я вижу, что только один поток работает в 100%.
Так что я положил некоторые printf
в мой код, чтобы увидеть, сколько раз я хотел бы получить такую же надпись на моем терминале, как, после того, как:
#pragma omp parallel
{
printf("Hey, I'm inside the par zone!\n");
....
}
но мне кажется, что я получаю только один printf
за время, поэтому я думаю, что работает только одно ядро. Я пробовал то же самое после части pragma omp for
, но все равно получаю ту же самую проблему.
Почему кажется, что pragma omp parallel
ничего не распараллеливает? Я попробовал более простую программу (простую параллельную версию hello world!), И она работает, я получаю столько марок, сколько моих основных номеров.
Я пытался поставить все вместе в #pragma omp parallel for
цикле, но я получаю ошибку сегментации - ядро сбрасывали ошибку ...
................... ........
Here это мой код MCVE, он дает ту же проблему. (Извините за отступы, но загрузчик файлов напортачил). Функции перед основным просто делают некоторые вычисления, используя rand(), ничего особенного.
мой сборник линия: gcc -w -std=c99 MC.c -o try -lm -fopenmp -lquadmath -O3
Вы скомпилировали с помощью переключателя компилятора с поддержкой OpenMP? Например, GCC требует, чтобы '-fopenmp' использовал прагмы OpenMP. Аналогично, вы установили переменную окружения 'OMP_NUM_THREADS' в значение до запуска кода? – Gilles
Да, я скомпилировал с -fopenmp, и я не установил OMP_NUM_THREADS –
Не могли бы вы дать [MCVE] (http://stackoverflow.com/help/mcve) пример вашей проблемы вместе с вашей командной строкой компиляции и командой выполнения? – Gilles