GPU在某些类型的计算方面表现更好,例如生成比特币和执行气候模拟。
如果象棋引擎使用GPU而不是CPU进行计算,将会受益吗?
也许一些知识渊博的人可以强调两者之间的区别,并启发我们了解GPU是否适合于国际象棋引擎执行的计算类型。
GPU在某些类型的计算方面表现更好,例如生成比特币和执行气候模拟。
如果象棋引擎使用GPU而不是CPU进行计算,将会受益吗?
也许一些知识渊博的人可以强调两者之间的区别,并启发我们了解GPU是否适合于国际象棋引擎执行的计算类型。
Answers:
编辑:
在http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317中提出的其他几点。
原件:
@ Maxwell86已经提供了出色的链接和资源。注意zeta-chess引擎。这是GPU国际象棋引擎。不幸的是,GPU尚未在国际象棋编程中证明其有用性。实际上,zeta国际象棋引擎项目完全没有进展。
GPU在可以并行化的浮动计算和算法上效果很好。这需要独立性。但是,如果我们看一看典型的最小-最大(或alpha-beta)树(每个象棋引擎都使用)
右分支取决于左分支。特别是,如果我们可以得到一个截止值(失败),那么我们甚至不需要搜索其余节点。不幸的是,这不是GPU可以有效完成的事情。可以为alpha-beta编写GPU程序,但是需要暂停GPU线程(称为内核)以等待。与CPU不同,GPU内核不能只切换到其他东西(称为线程切换甚至进程切换的进程)。
我们现有的算法和引擎知识源自CPU领域。整个算法需要针对GPU进行重新研究。不幸的是,对此并没有太多的兴趣和研究。
我没有进行GPU编程的经验,但是通常,GPU在并行执行简单命令方面非常高效。显然,用于象棋引擎的搜索树不是这种情况。因此,GPU失去了其与CPU相比的计算优势。
当然,这是国际象棋引擎的GPU编程的当前状态,但是GPU编程相对较新,因此也许他们将来会找到解决当前问题的解决方案。
这里有几个有趣的链接,尤其是有关为GPU实现国际象棋引擎的博客。
LC0(Leela Chess Zero)项目是AlphaZero的国际象棋开源改编版,显示了大型神经网络中gpus,浮点性能和内存带宽的优势。
我完成了当前的实验性gpu国际象棋引擎Zeta v099a的运行。
https://github.com/smatovic/Zeta
当前迭代的实际结论是,可以将具有标准象棋编程技术的简单引擎移植到OpenCL上,使其在gpu上运行,但是要使引擎在每秒计算节点数方面具有竞争力,则需要付出更多的努力(速度),启发式(专家知识)和缩放(并行搜索算法)。
Computer Chess作为计算机科学主题,在40年代和50年代开始发展了数十年,并在1997年的Deep Blue vs. Kapsarow比赛中达到顶峰。如今,通过玩成千上万的游戏来调整象棋引擎,因此要在gpu上运行国际象棋引擎和在gpu上运行具有竞争力的国际象棋引擎是两个不同的任务。
我对CUDA和国际象棋编程(不是引擎编程)有一些经验。我也多次想到这个问题。这是我的看法,我从未研究过。
好吧,首先,几乎可以肯定的是,当前象棋引擎的设计是不可能的。否则,有人会简单地做到这一点。
是否可以在全新设计中使用它,这是一个更大的问题。整数运算没有问题,但是很明显,有很多事情必须运行原始代码,并且不能在许多实体上进行严重分支。
我认为所有的树计算都应在CPU上运行。
但是我可以想象(我没有说这是可能的)一些局部评估函数可以对位置进行尽可能多的评估,从而给CPU更多的时间,以帮助他以更好的方式构建树。一个这样的函数可以计算在每个位置上应该进行多认真的计算。
您可以计算出被攻击的方块数量,被攻击的碎片,国王周围的火力以及船上某些子区域中与兵器结构相关的东西,您可能会为这些做GPU优化的代码。您可能可以免费获得许多有用的信息(无需CPU时间,无需等待CPU),但是您必须是真正的天才,才能将现代GPU的全部功能用于如此小的事情。
创建全新的发动机设计以使速度提高30%可能不是一件很有趣的事情。而要想使先进的GPU的速度提高20倍,您就必须使评估功能变得与众不同。
我认为这是最后一个问题。您可以花很多精力在CPU上运行一个代码,但是在CPU + GPU方案中,您必须处理不同比例的CPU和GPU。速度和核心数。要使用完整的硬件功能,对于具有弱GPU的16核群集,您将需要与在具有超快速GPU的慢速CPU上需要不同的代码。最好对CPU和GPU进行基准测试,然后在更快的计算机上运行更多代码。但是,我仍然认为,仅凭评估功能,您将无法接近喂食3000核的野兽。
编辑:为了使情况更清楚,CPU会定期发送GPU位置数组以进行部分评估。也许从我写的内容还不清楚。
许多问题使这项工作。
我只看到使用基于GPU的国际象棋引擎的好处,而看不到任何严重的问题。也许您有尝试使用标准国际象棋程序的问题,但对其他问题知之甚少。我刚开始从第一行开始编写象棋程序,这是我在没有特殊感觉的情况下在CUDA上进行了一些首次编程测试后,作为第二个基于CUDA的程序编写的。很快,我可以进行一些首次性能测试,并针对其他引擎测试游戏。也许在下周。我只是开始创建它,但是我已经关闭完成它,并且大多数功能已经完成。