适用于国际象棋引擎的CPU v.GPU


16

GPU在某些类型的计算方面表现更好,例如生成比特币和执行气候模拟。

如果象棋引擎使用GPU而不是CPU进行计算,将会受益吗?

也许一些知识渊博的人可以强调两者之间的区别,并启发我们了解GPU是否适合于国际象棋引擎执行的计算类型。

Answers:


13

编辑:

http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317中提出的其他几点。

  • GPU不太适合递归
  • GPU不太适合浮动
  • 对于新的机器学习方法,GPU可能会更好,但传统引擎算法则不能

原件

@ Maxwell86已经提供了出色的链接和资源。注意zeta-chess引擎。这是GPU国际象棋引擎。不幸的是,GPU尚未在国际象棋编程中证明其有用性。实际上,zeta国际象棋引擎项目完全没有进展。

GPU在可以并行化的浮动计算和算法上效果很好。这需要独立性。但是,如果我们看一看典型的最小-最大(或alpha-beta)树(每个象棋引擎都使用)

在此处输入图片说明

右分支取决于左分支。特别是,如果我们可以得到一个截止值(失败),那么我们甚至不需要搜索其余节点。不幸的是,这不是GPU可以有效完成的事情。可以为alpha-beta编写GPU程序,但是需要暂停GPU线程(称为内核)以等待。与CPU不同,GPU内核不能只切换到其他东西(称为线程切换甚至进程切换的进程)。

我们现有的算法和引擎知识源自CPU领域。整个算法需要针对GPU进行重新研究。不幸的是,对此并没有太多的兴趣和研究。


您不必卸载minimax本身。有一些非常适合GPU的子任务(例如Botvinnik的alpha路径查找,木板哈希,静态评估等)。就是说,我对这方面的研究一无所知。
user58697

真正。但是,如果主搜索本身无法卸载,那么就没有必要卸载小型任务。
HelloWorld

3
这是一个很好的答案。+3开关在屏幕上哪里?我找不到!
thb

7

我没有进行GPU编程的经验,但是通常,GPU在并行执行简单命令方面非常高效。显然,用于象棋引擎的搜索树不是这种情况。因此,GPU失去了其与CPU相比的计算优势。

当然,这是国际象棋引擎的GPU编程的当前状态,但是GPU编程相对较新,因此也许他们将来会找到解决当前问题的解决方案。

这里有几个有趣的链接,尤其是有关为GPU实现国际象棋引擎的博客。


1
您已经错过了:zeta-chess.blogspot.com
HelloWorld

GPU擅长的领域包括分数数学,向量运算和需要最少同步的并行化。国际象棋引擎有最后一个,但没有前两个。
intx13


2

我完成了当前的实验性gpu国际象棋引擎Zeta v099a的运行。

https://github.com/smatovic/Zeta

当前迭代的实际结论是,可以将具有标准象棋编程技术的简单引擎移植到OpenCL上,使其在gpu上运行,但是要使引擎在每秒计算节点数方面具有竞争力,则需要付出更多的努力(速度),启发式(专家知识)和缩放(并行搜索算法)。

Computer Chess作为计算机科学主题,在40年代和50年代开始发展了数十年,并在1997年的Deep Blue vs. Kapsarow比赛中达到顶峰。如今,通过玩成千上万的游戏来调整象棋引擎,因此要在gpu上运行国际象棋引擎和在gpu上运行具有竞争力的国际象棋引擎是两个不同的任务。


0

我对CUDA和国际象棋编程(不是引擎编程)有一些经验。我也多次想到这个问题。这是我的看法,我从未研究过。

好吧,首先,几乎可以肯定的是,当前象棋引擎的设计是不可能的。否则,有人会简单地做到这一点。

是否可以在全新设计中使用它,这是一个更大的问题。整数运算没有问题,但是很明显,有很多事情必须运行原始代码,并且不能在许多实体上进行严重分支。

我认为所有的树计算都应在CPU上运行。

但是我可以想象(我没有说这是可能的)一些局部评估函数可以对位置进行尽可能多的评估,从而给CPU更多的时间,以帮助他以更好的方式构建树。一个这样的函数可以计算在每个位置上应该进行多认真的计算。

您可以计算出被攻击的方块数量,被攻击的碎片,国王周围的火力以及船上某些子区域中与兵器结构相关的东西,您可能会为这些做GPU优化的代码。您可能可以免费获得许多有用的信息(无需CPU时间,无需等待CPU),但是您必须是真正的天才,才能将现代GPU的全部功能用于如此小的事情。

创建全新的发动机设计以使速度提高30%可能不是一件很有趣的事情。而要想使先进的GPU的速度提高20倍,您就必须使评估功能变得与众不同。

我认为这是最后一个问题。您可以花很多精力在CPU上运行一个代码,但是在CPU + GPU方案中,您必须处理不同比例的CPU和GPU。速度和核心数。要使用完整的硬件功能,对于具有弱GPU的16核群集,您将需要与在具有超快速GPU的慢速CPU上需要不同的代码。最好对CPU和GPU进行基准测试,然后在更快的计算机上运行更多代码。但是,我仍然认为,仅凭评估功能,您将无法接近喂食3000核的野兽。

编辑:为了使情况更清楚,CPU会定期发送GPU位置数组以进行部分评估。也许从我写的内容还不清楚。

许多问题使这项工作。


0

我只看到使用基于GPU的国际象棋引擎的好处,而看不到任何严重的问题。也许您有尝试使用标准国际象棋程序的问题,但对其他问题知之甚少。我刚开始从第一行开始编写象棋程序,这是我在没有特殊感觉的情况下在CUDA上进行了一些首次编程测试后,作为第二个基于CUDA的程序编写的。很快,我可以进行一些首次性能测试,并针对其他引擎测试游戏。也许在下周。我只是开始创建它,但是我已经关闭完成它,并且大多数功能已经完成。


Google已证明GPU非常适合用于机器学习,但GPU不适用于传统的象棋编程。
HelloWorld '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.