启用配置文件引导的优化时,OpenMP并行元素增量得到错误的结果

时间:2019-04-19 06:36:39

标签: c openmp intel icc

我使用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语句,即使启用了配置文件引导的优化,代码也将给出正确的结果。

0 个答案:

没有答案