C++ C++;相似在二维数组上实现并行循环
好的,alphaBetaMiniMax是递归的,在2d板上循环。这有点简化,但执行时间的任何改进都是一个巨大的胜利,因为它可以看到前面的移动量。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
只需两个额外的动作就可以真正改变现状 这个问题。 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是理想的。就执行速度而言,仍然取得了胜利,但超时的动作暴露了死锁问题。继续保持这个爱好。