自动并行化不安全的呼叫

时间:2015-02-25 06:32:44

标签: c parallel-processing solaris

当我在使用Oracle Solaris编译器的自动并行化功能时,我遇到了一个问题。假设我有以下代码:

int var = -1;
int i;
for (i = 0; i < 3; i++){
  bool flag = false;
  // do operations to set the flag
  if (flag == true)
    var = i;
}
// do other operations with var

当我运行此代码时,编译器会抱怨由于不安全的依赖而无法并行化。

有谁知道这里可能有什么问题?有没有办法避免这种情况,但保持代码的原始功能?

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

编译器看到的是一堆循环迭代,所有循环迭代都可以分配给V.如果写入发生是原子的,那么这将获得i的一些随机值,并且有人可能会说这没关系。在假设写入变量不是原子的情况下,大多数编译器将其视为数据竞争......(那么究竟是什么以V结尾?)。因此抱怨。