我使用Intel OpenMP并行指令来增加数组元素。但是,启用Intel Profile-Guided Optimization时,数组中的第一个和第二个元素将得到错误的结果。
代码是用C语言编写的。它是由Windows 10教育版(Intel i7-8750H)上具有IDE Visual Studio 2017的Intel Compiler 19.0工具链(Intel Parallel Studio XE 2019 Update 3)编译的。通过项目属性页->常规->特定于英特尔->配置文件引导的构建选项启用配置文件引导的优化。要启用它,我选择“阶段1:优化工具(Qprof-gen
)。
int test[300];
int main() {
#pragma omp parallel for
for (int idx = 0; idx < 100; idx++) {
//printf("%d\n", idx);
test[idx] += 1;
}
}
对区域执行并行之后,测试中的第0
至第99
元素应为1
。禁用配置文件引导的优化时,这是正确的。但是,启用配置文件引导的优化后,test[0]
变为12
,并且test[1]
在执行后保留为0
,而所有其他98个元素都位于2
-nd之间。到第99
的元素已正确更新为1
。奇怪的是,如果我取消注释printf
语句,即使启用了配置文件引导的优化,代码也将给出正确的结果。