Hatena::ブログ(Diary)

Bonanzaソース完全解析ブログ

2009-11-22

FPGAって本当に速いのですか?

FPGAって本当に速いのですか?を含むブックマーク FPGAって本当に速いのですか?のブックマークコメント

■ FPGAって本当に速いのですか?


指し手生成祭りでは一応のところトップになった(→ http://vivio.blog.shinobi.jp/Entry/151/ )のですが、どうもこの結果に納得いかないのです。


あの局面なら私の普段使っているマシン(Core 2 Duo 2.8GHz)で4M回/secぐらい出てくれないとなぁと思い、いまプログラムを64bit前提に全面的に書き直している最中です。私が考えるに、4M回/secは十分可能な範囲です。私の目標としては、大会用マシンで8コア×6M回/sec。10Gmoves/secです。


単位がさっぱりわからないという人のために解説すると、コンピュータ将棋はいまだに1秒間に1億手(100M個の局面)は読めないですけど、指し手の生成だけなら100億手は生成できるかもってことですね。


まあ、それはそれとして、FPGAでどれくらいなのかというと、

…あ、指し手生成ですか?1サイクルで全手生成してて、20MHzで動いてます。なので、200手ある局面なら

20MHz * 200 = 4Gmoves/sec

でしょうか。まあほとんど強さとは関係ないと思いますけど。ていうか関係あってくれると大変うれしいのですけどねぇ。

http://aleag.cocolog-nifty.com/blog/2009/11/post-654d.html

らしいです。前回の私の指し手生成ルーチンでも大会用マシンなら1コア3M回/secはくだらないので、8コアで24M回/sec。意外とFPGAといい勝負なのかも知れませんね。


FPGAにとって指し手生成は一番FPGAの良さが出るはずの部分で、この部分でPCと同じぐらいの速度しか出てないとなると、FPGAがPCを追い抜くのはなかなか厳しいものがあるように思います。FPGAはハード的にはまだまだ伸びしろがあるとは思うのですが、embedded memoryやら回路規模やらがもう一桁ぐらい上がってもらわないとなぁと思ったりしています。

mkomiyamkomiya 2009/11/22 07:56 199手より少ない場合、例えば100手だと
PCは2倍速になると思いますけど、FPGAは速度一定だとすると
8coreのPCの方がかなり上回りますね。
FPGAの方はASIC化という手段はあるでしょうが……(お金が)

A級A級 2009/11/22 10:55 はじめまして、リンクありがとうございます。

>8コア×6M回/sec。10Gmoves/secです。

あれ?8x6M = 48Mmoves/sec、じゃないんですか?

mkomiyamkomiya 2009/11/22 12:00 8コアx6M回/sec
というのは、8x6Mx200手/secのことなので、
9600M/sec→9.6Gmoves/sec≒10Gmoves/sec
ということだと思います

LS3600LS3600 2009/11/22 14:02 > 例えば100手だとPCは2倍速になると思いますけど

GenCaptureで4手しか手がない局面でも200手ある局面の3倍ぐらいにしかならないです。本当は200/4 = 50倍になって欲しいんですけど、それはまあ無理ですよね..。


> あれ?8x6M = 48Mmoves/sec、じゃないんですか?

これは、私の意図は、小宮さんがフォローしてくださっている意味です。はい。

A級A級 2009/11/22 16:57 あ、1「回」では全手生成しているのですね。
他の方の記述では"moves/sec"で表している方もいらしたので
混同してました。失礼しました。ということは1コアあたりで
LSさん:2.4M回/sec
Aリーグ:20M回/sec
で8.3倍、という理解でいいんですよね。
それで「いい勝負」ですか^^; けっこういい数字かと
思ってたんですが、なかなかFPGAへの期待値が高いですね^^;
まあ、引き続き努力します。

ところで1コア2.4M回*200手=480Mmoves/secで仮に3GHzと
すると、1手あたり6サイクル強ですか?すさまじいですね。
6M回はさすがに無理では?(OCで5GHz、とかでないとw)

LS3600LS3600 2009/11/22 18:19 > で8.3倍、という理解でいいんですよね。

いまの環境でも大会用マシン×ICC×PGOで64bit環境なら、3M回/secは到達できるので、コア当たりは3M回/secと考えてください。

それで、PCのほうは大会マシンなら少なくとも8コアでしょうから、8コアである8コア×3 = 24M回/secと比較すべきではないかと思います。FPGAのほうも指し手生成に限ればもっと並列化できると思いますが、大会に出場するFPGAボードで現実的にはそんなに何並列もするだけのLE数に余裕はないと思うので。

> ところで1コア2.4M回*200手=480Mmoves/secで仮に3GHzとすると、1手あたり6サイクル強ですか?すさまじいですね

あの局面はGenDropで生成される手が多く、あの局面なら私の書いたGenDropは平均的には3命令強で1手生成出来るので、GenNoCap / GenCaptureが高速化すれば、4M回/secは十分到達可能な範囲なのです。

あと実は、64bit化が前提ならば、あの局面ならば、GenDropは2命令強で1手生成できます。2命令で1手というか、正確には4命令で2手なのですが。(つまり64bitレジスタで2手ずつ生成する)

ですので、5M回/secぐらいまでは十分到達可能な範囲だと考えています。6M回/secは、来年の大会出場時のマシンならば可能かも、というところです。

A級A級 2009/11/23 10:26 >いまの環境でも大会用マシン×ICC×PGOで64bit環境なら

>PCのほうは大会マシンなら少なくとも8コアでしょうから

たらればを言い出すと、FPGAもStratix IVにしてP&R effort
を上げてTjを下げて、とかやれば30MHzにはなるだろうし、
Stratix IV 820なら1チップに6コアくらい入るだろうから
8コアPCと同じ2チップなら12コアだな、じゃあ
30M * 12 * 200 = 72Gmoves/sec かな、とかいう話に
なりますね。それに今のAリーグもあまりチューンしてない
ので、ちゃんと作ればどこまで速くなるのかわからんし。
#最初に「まず速度度外視で一発作ってみた」レベルから
#基本構成いじってないので。Stratix IIIで20MHzという
#のは本来ものすごく遅いです

まあ要は、"apple to apple"で比較すべきでは。
片方は現状そのまま、片方はたらればたくさん、という
比較はいかがなものかと思います。

>GenDropは平均的には3命令強で1手生成出来るので

たしかにgendropの方がソフト的には簡単そうですね。
6サイクル/手も不思議でないかも。移動手(打つので
ない手)はどうなんですか?平手初期配置(30手)だと
何M回/secなんでしょう?

LS3600LS3600 2009/11/23 14:46 > まあ要は、"apple to apple"で比較すべきでは。

ハード的な優劣なのだから"apple to apple"で比較すべきというのは、私はひとりのエンジニアとしては理解できます。

しかし、大会の参加者としては(要するに大会での勝ち負けを占う上でのスペック比較としては)あまり意味のある比較とは思えません。

来年の大会で上位陣のPCはすべて8コア以上で参加するというのは、「たられば」ではなくもはや確定事項です。私に限って言えば私がもし出場するなら64bit OS(Windows2008Server R2)でICC×PGOでbuild。Xeon×2 , メモリ12GB以上。ここまでは間違いありません。

かたや、FPGAで参加されるのはA級さん以外にはおられないでしょう。

そのA級さんは、来年の大会でStratixIV 820の2チップ載っているFPGAボードで参加されるでしょうか?現実的にはその評価基板すら入手が不可能ではないでしょうか?

ですので、大会に出場させるマシン同士の比較であるなら「(一番FPGA側に有利であるはずの指し手生成ですら)いい勝負」という風に私は捉えています。この点に関して、私の説明が至らなかったように思います。お気に障ったら申し訳ありません。

> 移動手(打つのでない手)はどうなんですか?平手初期配置(30手)だと何M回/secなんでしょう?

それがかなり遅くてですね、前回の私の指し手生成ルーチンではBonanzaのアルゴリズムを引きずっていて、平手の初期局面はVC++ PGOなしで3.5M回/sec(マシンはCore2Duo2.8GHz)しか出なくて、指し手生成ルーチン自体を64bit化にともない全面的に書き直し中です。

LS3600LS3600 2009/11/23 18:43 自己レスですが、
× Windows2008Server R2
○ Windows Server 2008 R2
です。

余談ですが、静止探索の速度upのためにはどうしてもGenCapを高速化しないといけないのですが、取れる駒が一つもなくてもそれなりに時間がかかります。

これが結構痛くて、いまこの改善に取り組んでいます。駒の取り合いのないか、もしくは取れる駒が1つや2つの局面ならば、30M回/secぐらいは実行できて欲しいなぁと。

そこの高速化が終われば、初期局面も(主にGenNoCap)も高速化に取り組んでみたいと思っています。初期局面は大会マシンであれば8M〜10M回/secぐらいはいくだろうと考えています。

A級A級 2009/11/23 19:23 来年の大会限定の話、ということですね。その点は了解しました。
ただ、LSさんの記事のタイトルや、記事中の「PCとFPGAはいい勝負」などの記述を読むと、たいていの人はそういう限定的な話とはとらず、技術どうしのapple to appleの比較と受け取るでしょう。その結果、FPGAのポテンシャルを過少評価してしまう恐れがあります。
そういう人が出るのは私としてはいろいろ実際面で困るので、コメントで議論させていただきました。

来年の大会ということでいうと、今私の手元にはStratix III 340のボードがあります。これを使えば20MHz*2コアは確実にできます。ですから20M*2 = 40M回/sec、が「来年の大会向け」のFPGA側の数字となります。(種々の事情から、実際に来年の大会にこの340のボードで出るかというと実は微妙なのですが、少なくとも「やろうと思えば来年5月に確実に出せる数字」という意味で挙げておきます。)LSさんは、(たられば無しなら)24M、ですね?

ですので、「来年の大会」限定でもFPGAが倍近く速く、apple to appleなら先のコメントの通りFPGAが7倍強速いのが現状、という認識です。まああくまで現状なので、そちらは日々改善されてるようなのでそのうちどうなるかわかりませんけれども。(私は今は並列化に注力していて、ハードの方はまったく手をつけていないので)

なお、いろいろと反論させていただきましたが、個人的に「気に障った」とかいうのは全くありませんのでそこは気になさらないでください。私はあくまで「実利上の」理由から議論させていただいてるだけです。

このブログはいつも大変興味深く拝見しております。来年の大会でのご活躍を期待するとともに、会場でお会いできるのを楽しみにしております。

LS3600LS3600 2009/11/23 19:32 A級さん、もろもろ了解です!

LS3600LS3600 2009/11/24 08:49 初期局面の指し手速度は、ずいぶん以前のソースコードで測定したきりだったので比較的最近のコードで測定してみました。VC++でPGOなしで4.06M回/secでした。本家Bonanzaのソースコードでも初期局面はgendropがなく、3M弱回/sec程度にはなっています。

あと、ICC build + PGOなら、ここにさらに+15%程度です。

それから、64bit化でさらに+20%ほど改善するはずですが、64bit向けにコードをまだ書きなおしていないのでいまのところ私の(今回の測定に使っている)コードは64bit化してもほとんど効果がありません。

そんなわけで、差分指し手生成をせず、現在のコードでもICC×PGO×大会用マシン(+20%ぐらいup)なら、5.6M回/sec程度は出ます。8コアならその8倍なので44.8M回/secですね。

ですので、初期局面に限って言えば、『「来年の大会」限定でもFPGAが倍近く速く」』ってことはなく、互角ぐらいのようです。

あとは、現状、中終盤での指し手生成では倍近く負けているのですが、こちらについては、まだ64bit化やら、差分指し手生成などの改善予定があるので、まだまだ伸びしろはあります。

伸びしろと言えば、FPGAのほうが、ASIC化×32コアとかで一気に夢が広がりそうですけどね。