OpenMp C Fileoutput - PullRequest
       12

OpenMp C Fileoutput

0 голосов
/ 23 января 2019

Я вспомнил, что у меня были некоторые проблемы с OpenMp и параллельной записью в файлы, поэтому я написал простую тестовую программу, которая создает файлы для каждой итерации и ведет отсчет до нуля в файле.Удивительно, но это похоже на работу!Если я открываю диспетчер задач сверху, я всегда вижу только один процессор с нагрузкой около 90%, а остальные около 1% -5%.Это потому, что задача не тяжелая для процессора или что-то идет не так (иногда 2-3 процессора увеличиваются до 40%)?

Тестовая программа

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<omp.h>

void print2file(char filename[],int i){
  FILE *fp;
  int j;
  fp=fopen(strcat(filename,".txt"),"w");
  for(j=i;j>=0;j--)
    fprintf(fp,"%d\n",j);
  fclose(fp);
}

int main(){
  int i;
  char test[12];
  #pragma omp for
  for(i=0;i<1000000000;i++){
    sprintf(test,"%d",i);
    //printf("test %d",i);
    print2file(test,i);
  }
}

1 Ответ

0 голосов
/ 23 января 2019

#pragma omp for должны находиться в параллельном регионе.Либо используйте #pragma omp parallel с последующим #pragma omp for внутри, либо ярлык #pragma omp parallel for.


Обратите внимание, что i и test должны быть локальными переменными потока, а не общими,чтобы предотвратить гонку данных.Есть много способов, как добиться этого, например, объявить эти переменные в параллельной области, сделать их private / firstprivate в предложении OpenMP, сделать их threadprivate и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...