OpenMp C文件输出

时间:2019-01-23 06:04:06

标签: c openmp

我记得OpenMp在并行写入文件时遇到一些麻烦,因此我编写了一个简单的测试程序,该程序为每次迭代创建文件,并在文件中计数到零。令人惊讶的是,它似乎有效! 如果我用top打开任务管理器,我总是看到只有一个cpu负载约为90%,而其他cpu约为1%-5%。是因为任务不是CPU繁重还是有问题(有时2-3 cpus上升到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 :(得分:2)

#pragma omp for必须位于平行区域。在内部使用#pragma omp parallel后接#pragma omp for,或使用快捷方式#pragma omp parallel for


请注意,您需要itest是线程局部变量,而不是共享变量,以防止数据争用。有很多方法可以实现此目的,例如在并行区域内声明这些变量,在OpenMP子句中将它们设置为private / firstprivate,将它们设置为threadprivate,等等。