[英]C++ parallelism. Implementing parallelism looping on a 2D array
好的,alphaBetaMiniMax 是递归的并在 2d 板上循环 这在这里有点简化,但是执行时间的任何改进对于它可以看到的前进步数来说都是一个巨大的胜利。
只需 2 个额外的动作就可以产生真正的不同。
问题。 二维阵列本身代表一个方格板,需要优化为平行。 我知道有几种用于拆分外部 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();
}
}
这是一种过度简化,我(认为我)对代码进行了结构化和设置,以避免数据竞争和死锁。 此处省略。
我的问题是如何处理外循环。
for_each 有并行执行选项,但我不知道它是否适用于内部,另外我需要每个线程知道它在哪一行(我是什么),或者谁知道每个板会发生什么。 我有关于如何实现这一目标的理论,但仅此而已。
我只需要朝着正确的方向轻推。
这个只有头文件的库可能会帮助你。 它代表您处理线程管理。 如果每一行i都独立于其他行,您可以将内部循环包装为一个函数,让库为每一行并行运行它并收集结果,如 Github 中的示例所示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.