Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;相似在二维数组上实现并行循环_C++_Arrays_Parallel Processing_C++17 - Fatal编程技术网

C++ C++;相似在二维数组上实现并行循环

C++ C++;相似在二维数组上实现并行循环,c++,arrays,parallel-processing,c++17,C++,Arrays,Parallel Processing,C++17,好的,alphaBetaMiniMax是递归的,在2d板上循环。这有点简化,但执行时间的任何改进都是一个巨大的胜利,因为它可以看到前面的移动量。 只需两个额外的动作就可以真正改变现状 这个问题。 2D阵列本身代表一个棋盘格,需要优化以实现并行。 我知道有几种将外部for循环拆分的方法,但是内部for循环比较复杂,可能需要保持一个香草型for循环 foo() { .... for (i=0; i<8; i++) { for (j=calibrate(i); j<8; j

好的,alphaBetaMiniMax是递归的,在2d板上循环。这有点简化,但执行时间的任何改进都是一个巨大的胜利,因为它可以看到前面的移动量。
只需两个额外的动作就可以真正改变现状

这个问题。 2D阵列本身代表一个棋盘格,需要优化以实现并行。 我知道有几种将外部for循环拆分的方法,但是内部for循环比较复杂,可能需要保持一个香草型for循环

foo() {
  ....
  for (i=0; i<8; i++) {
    for (j=calibrate(i); j<8; j=j+2) {
      // to account for checkerboard pattern, 
      // calibrate offsets board color where applicable
      makeMove(i,j)
      foo();
    }
  }
foo(){
....

对于(i=0;i可能会帮助您。它代表您管理线程管理。如果每行独立于其他行,则可以将内环打包为函数,让库并行运行每行并收集结果,如GITHUB中的示例所示。

对于不规则模式,您可以考虑任务并行性。这是PROVE。比如,用英特尔TBB和OpenMP。如果你想坚持使用纯C++,你可以在单独的<代码> STD::AcYNC/<代码>或 STD::Type 调用中解决每个新任务。谢谢,线程的最大问题是每个线程将在不同的对象上运行。指向以确定哪个对象是“最佳的”。将线程绑定到for循环(for each、parallel_for等)这似乎是保持其有序性和可控性的最佳方法。我采用了@DanielLangr的解决方案,并对独立线程之外的线程进行了并行处理。我现在正在寻求继续优化,但这足以让我做好准备。不幸的是,我在4核系统上运行了8x8板…这意味着包括调用线程在内的9个线程…又一次a是理想的。就执行速度而言,仍然取得了胜利,但超时的动作暴露了死锁问题。继续保持这个爱好。