GPUは、ビットコインの生成や気候シミュレーションの実行など、特定の種類の計算で優れています。
チェスエンジンがCPUではなくGPUで計算された場合、メリットがありますか?
たぶん、知識のある人がこの2つの違いを強調して、GPUがチェスエンジンが実行する計算のタイプに(不適切)かどうかを教えてくれるかもしれません。
GPUは、ビットコインの生成や気候シミュレーションの実行など、特定の種類の計算で優れています。
チェスエンジンがCPUではなくGPUで計算された場合、メリットがありますか?
たぶん、知識のある人がこの2つの違いを強調して、GPUがチェスエンジンが実行する計算のタイプに(不適切)かどうかを教えてくれるかもしれません。
回答:
編集:
http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317で指摘された他のポイントはほとんどありません。
オリジナル:
@ Maxwell86はすでに優れたリンクとリソースを提供しています。ゼータチェスエンジンに注意してください。GPUチェスエンジンです。残念ながら、GPUはチェスプログラミングでの有用性を証明していません。実際、ゼータチェスエンジンプロジェクトはどこにも行きませんでした。
GPUは、並列化できる浮動計算とアルゴリズムで非常にうまく機能します。これには独立が必要です。しかし、典型的なmin-max(またはalpha-beta)ツリー(すべてのチェスエンジンで使用される)を見ると
右ブランチは左ブランチに依存します。特に、カットオフ(フェイルハイ)を取得できれば、残りのノードを検索する必要さえありません。残念ながら、これはGPUが効率的に実行できるものではありません。アルファベータ用のGPUプログラムを作成することは可能ですが、GPUスレッド(カーネルと呼ばれる)を一時停止する必要があります。CPUとは異なり、GPU犬小屋は他の何か(スレッドスイッチまたはプロセススイッチと呼ばれるプロセス)に切り替えることはできません。
私たちの既存のアルゴリズムとエンジンの知識は、CPUの世界のために導き出されました。GPUのアルゴリズム全体を再調査する必要があります。残念なことに、あまり興味も研究もありません。
GPUプログラミングの経験はありませんが、通常、GPUは単純なコマンドを並行して実行するのに非常に効率的です。どうやら、これはチェスエンジンに使用される検索ツリーの場合ではありません。したがって、GPUはCPUに対する計算上の利点を失います。
もちろん、これはチェスエンジンのGPUプログラミングの現在の状態ですが、GPUプログラミングは比較的新しいため、将来の現在の問題の解決策が見つかるかもしれません。
ここにいくつかの興味深いリンクがあります。特に、GPU用のチェスエンジンの実装に関するブログは非常に洞察に富んでいます。
AlphaZeroをチェス用にオープンソース化したLC0(Leela Chess Zero)プロジェクトは、大規模なニューラルネットワークで使用されるgpus、浮動小数点パフォーマンス、メモリ帯域幅の利点を示しています。
私は実験的なGPUチェスエンジンであるZeta v099aでの現在の実行を終了しました。
https://github.com/smatovic/Zeta
現在の反復の実際の結論は、標準のチェスプログラミング技術を備えた単純なエンジンをOpenCLに移植してgpuで実行できることですが、1秒あたりの計算ノード数に関してエンジンの競争力を高めるには、より多くの労力が必要です(速度)、ヒューリスティック(専門知識)、およびスケーリング(並列検索アルゴリズム)。
コンピューターチェスはコンピューターサイエンスのトピックとして、40代から50代にかけて数十年にわたって進化し、1997年にディープブルーとカプサローの試合で1つのピークに達しました。現在、チェスエンジンは何千ものゲームをプレイすることによって調整されているため、GPUでチェスをプレイするエンジンを取得することと、GPUでチェスをプレイする競争力のあるエンジンを取得することは2つの異なるタスクです。
CUDAとチェスプログラミング(エンジンプログラミングではない)の経験があります。この質問も何度も思い浮かびました。これが私の意見です、私はこれを研究したことはありません。
まあ、最初に、チェスエンジンの現在の設計では不可能であることはほぼ確実です。それ以外の場合は、誰かがそれを行うだけです。
完全に新しいデザインで使用できるかどうかは、大きな疑問です。整数演算に問題はありませんが、多くのエンティティで深刻な分岐を行わずにプリミティブコードを実行する必要があることは明らかです。
私の意見では、すべてのツリー計算はCPU上で実行する必要があります。
しかし、私は想像することができます(可能だとは言えません)、より多くのCPUの時間を与え、より良い方法でツリーを構築するのを助けるために、できるだけ多くの位置の評価を行う部分評価関数そのような関数の1つは、各ポジションでどの程度深刻な計算を行うべきかを計算できます。
攻撃された正方形の数、攻撃されたピースの数、キングの周りの火力、ボード上のいくつかのサブリージョン、ポーン構造に関連するものを計算できます。おそらく、これらのGPU最適化コードを作成できます。おそらく無料で多くの有用な情報を得ることができます(CPU時間なし、CPU待機なし)が、そのような小さなことに最新のGPUのフルパワーを使用するには、真の天才でなければなりません。
エンジンの完全に新しいデザインを作成して、30%の速度を上げることは、おそらくあまり面白くないことです。そして、最先端のGPUで20倍の高速化を実現するには、評価関数を本当に異質にする必要があります。
そして、これに関する最後のことは、私が問題だと思うことです。CPUで1つのコードをあまり考えずに実行できますが、CPU + GPUシナリオでは、CPUとGPUの実際に異なる比率を処理する必要があります。速度とコア数。ハードウェアの全機能を使用するには、超高速GPUを備えた低速CPU上とは異なるGPUを備えた16コアクラスターに異なるコードが必要です。CPUとGPUのベンチマークを行い、より高速なマシンでより多くのコードを実行することが望ましいでしょう。しかし、それでも、評価関数だけで3000コアの獣に餌をやるには至らないと思います。
編集:わかりやすくするために、CPUは定期的に位置のGPU配列を送信して、部分評価を行います。たぶんそれは私が書いたことから明らかではなかった。
これを機能させるには多くの問題があります。
GPUベースのチェスエンジンを使用する利点はありますが、それを行うことで深刻な問題は発生しません。たぶん、あなたは問題が標準のチェスプログラムを使ってみて、他のことについてあまり知らないということがあります。CUDAで最初のプログラミングテストを特定の意味なしに行った後、2行目のCUDAベースのプログラムとして、最初の行からチェスプログラムを書き始めました。すぐにいくつかの最初のパフォーマンステストを行い、他のエンジンに対してゲームをテストできます。たぶん来週中に。作成を開始しましたが、既に終了しており、ほとんどの機能は既に終了しています。