速度追求
アルゴリズム的な改良はだいぶ進んだので、ここらでひとつクロックアップに手を染めてみました。
長らく「できたなり」の合成で動くクロック、ということで12.5MHzで動かしてましたが、これの速度アップにトライ。まずはQuartusIIのTimeQuestタイミングアナライザを使い、クリティカルパスを見てみます。なお、今のAリーグでは毎クロック必ず局面を進める(fwd)か戻す(rwd)かするので、実質2サイクルで1局面探索します。なので2MHzは1Mnpsに相当。12.5MHzは6.25Mnpsです。
Aリーグの開発を始めた当初は、とにかく前例がなく、何をどう作っていいのか全くわからなかったので、最初はまず「スピードはまあいいから、とにかく動くものを作ろう」という方針で設計してました。こういう状態だったので、今回出てきたクリティカルパスを見るとはじめは「ゆるゆる」で、ぱっと見高速化できそうなところがいくつも目につきました。でこれらをひとつずつ修正していく、という作業を最近やっていました。
ボード上では50MHzの水晶がFPGAへ入っています。最初はこれを4分周して12.5MHzにしてましたが、論理修正後今は5逓倍16分周の15.625MHzになってます。なお先週公開したパッケージの.sofは修正途中で、2逓倍7分周の14.28MHzです。
今までのところは論理(verilog RTL)の変更のみでやっています。ほんとはこの他、フロアプランや配置配線でディレイを縮める作業もあるのですが、何とQuartusIIのWeb Editionではfloorplanの機能がない!ためできてません。orz
これもちょっとつらいのでSubscription版のことも代理店に問い合わせてみました。1年間サポート付きで33.7万円。個人でもOK。納期1-2か月、とのこと。1年たった後も、同じバージョンでノーサポートで使い続けることはできます。ただしその後出る新しいデバイスには対応できません。サポート受け続けるなら毎年33.7万だそうです。納期がかかるのは、認証用のUSB「ガードキー」を送るため、とのこと。これでは今年の大会には間に合わないので、当面見合わせることにしました。大会はたぶん今くらいの速度で出るでしょう。アルゴリズムの方でまだやるべきことも残ってるし。
現在のクリティカルパスは、おおざっぱに言うと次のとおり:
・盤の端から端まで飛び利きを伝播
・端のマスで利き、(マスごとの)評価値を計算
・81マスぶんの評価値を集めて駒割と加算
・最終評価値を考慮して探索decision(fwd/rwd, 手の選択)
・decision結果で、局面や駒割のupdate
という感じです。これで1サイクル 64ns 弱。論理段数でいうと60数段で、ざっくり1段1nsくらい。配線ディレイが1nsとか2nsとか平気でかかってることが多く、やっぱfloorplan/配置無しではあかんな、と思います。まあ逆に言うと、floorplanやればもっと速くなりそう、とは言えますが。
簡単に削れるところはかなりやったので、さて次はどう変えればもっと速くできるか、と思案中。
« フリーハードウェア | トップページ | floodgate参加 »
「将棋プロセサ」カテゴリの記事
- ボンクラーズの開発過程について書いた記事が掲載されました(2019.03.07)
- 「浅い評価値を深い評価値に近づける学習法」誕生の背景(2016.10.06)
- 塚田九段の対ボンクラーズ練習棋譜を公開します(2013.09.07)
- Puella α ソース公開(2013.08.28)
- クラスタ並列の解説記事を公開します(2013.08.22)
コメント