gpt4 book ai didi

c - OpenMp C 文件输出

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:13 24 4
gpt4 key购买 nike

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

最佳答案

#pragma omp for 需要在并行区域中。在内部使用 #pragma omp parallel 后跟 #pragma omp for,或者使用快捷方式 #pragma omp parallel for


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

关于c - OpenMp C 文件输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54320907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com