g -cilkplus随机行为具有std ::向量



以下(减少)代码非常严重地处理了一系列GCC

#include <vector>
#include <cilk/cilk.h>
void walk(std::vector<int> v, int bnd, unsigned size) {
  if (v.size() < size)
    for (int i=0; i<bnd; i++) {
      std::vector<int> vnew(v);
      vnew.push_back(i);
      cilk_spawn walk(vnew, bnd, size);
    }
}
int main(int argc, char **argv) {
  std::vector<int> v{};
  walk(v , 5, 5);
}

特别:

  • g 5.3.1崩溃:

     red.cpp: In function ‘<built-in>’:
     red.cpp:20:39: internal compiler error: in lower_stmt, at gimple-low.c:397
            cilk_spawn walk(vnew, bnd, size);
    
  • g 6.3.1创建一个代码,如果在一个核心上执行,则可以很好地工作但是Segfault有时会发出拨打双释放的信号,如果使用更多的核心。一个学生有一个Arch Linux G 7报道了类似的结果。

我的问题:该代码有问题。我在援引一些吗未定义的行为,还是我应该报告的错误?

回答我自己的问题:

根据https://gcc.gnu.org/ml/gcc-help/2017-03/msg00078.html,其确实是GCC中的错误。临时性在父母中被摧毁,而不是在cilk_spawn中的孩子中被摧毁。因此,如果螺纹叉真正发生,可能会太早销毁。

相关内容

  • 没有找到相关文章

最新更新