【发布时间】:2016-09-15 16:59:11
【问题描述】:
我制作了这个简单的程序来测试 openmp 库:
#include<omp.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
int i;
char buffer[10];
FILE *fp1;
sprintf(buffer, "out.txt");
fp1=fopen(buffer, "a");
#pragma omp parallel for
for(i=0;i<16;i++)
fprintf(fp1, "%d ", i);
}
我得到以下结果:8 9 14 15 0 1 6 7 4 5 2 3 12 13 10 11
所以我尝试了一个更简单的程序,将数字放在终端上:
#include<omp.h>
#include<stdio.h>
int main()
{
int i;
#pragma omp parallel for
for(i=0;i<16;i++)
printf("%d ", i);
}
当我运行它时,这是我的输出: 12 13 4 5 0 1 6 7 2 3 14 15 10 11 8 9
我想了解为什么变量 i 没有被我的核心按顺序排列,我预计会是这样的:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16。
编辑:是的,我有 8 个内核。谢谢大家的回答,现在很清楚了。
【问题讨论】:
-
“我运行了并行代码和预期的顺序行为” - 你为什么期望这个输出?你期待“平行”的事情发生什么变化? (我猜你有 8 个核心?看看每个核心如何按顺序列出 (12,13)、(2,3)),但所有核心都同时运行,这是一个先完成的折腾)
-
是的,这是有道理的。但我认为出于某种原因,第一个获取值的核心是第一个打印输出的核心。我的坏...
标签: c loops io parallel-processing openmp