2018-02-01から1ヶ月間の記事一覧
前回マルチスレッドで2つのCPUを使用して自己対局を行うプログラムを作成したが、局面生成の速度はGPU1つの場合と変わらなかった。 ChainerをPython経由で使用しているため、GILのために効率が上がらなかったためと考えている。そこで、プロセスを分けてマル…
TensorFlowは公式でWindowsに対応しているが、C++のAPIはLinuxとMacでしかサポートされていない。 https://www.tensorflow.org/install/install_cdllをダウンロードして、defを作成してリンクする方法もあるようだが、CPUでしか使えない。 visual studioでte…
自己対局のプログラムをマルチGPUに対応させました。処理方式は、対局プログラムのマルチGPU対応とほとんど同じです。マルチGPU対応により局面生成の速度がどれくらいあがるか測定しました。 測定条件 シングルGPUは、TitanV 1枚。200スレッドで対局。 マル…
STLのvectorのemplace_backを使うと要素の追加時にコンストラクタで初期化できる。しかし、コンストラクタとデストラクタで副作用のある処理をしている場合、注意が必要だ。 以下のようなコードはうまく動作しない。 #include <iostream> #include <vector> using namespace st</vector></iostream>…
Windowsのコマンドラインでテキストの加工を行うとき、クリップボードと連携できると便利である。コマンドの結果をクリップボードにコピーするには、clip.exeコマンドにパイプで渡せばよい。 dir /b | clip逆に、クリップボードのテキストを加工したい場合も…
GPUが2つになったので、dlshogiをマルチGPUに対応させました。ニューラルネットワークの計算要求をキューにためてミニバッチで推論を行う仕組みにしていたので、キューをGPUごとに用意して、探索スレッドを一方のキューに対応させて、キューを監視してニュ…
C/C++からPythonの処理をマルチスレッドで使うには、C/C++側でもGILの制御が必要になる。マルチスレッドでGILを取得せずにPythonの処理を呼び出すとメモリ例外などで異常終了する。Pythonの仮想マシンはスレッドセーフではなくマルチスレッドでは動かせない…
C++で静的メンバ関数をスレッドで実行するには、以下のように記述する。 class A { public: static void f() {}; }; int main() { thread th(A::f); th.join(); return 0; } では、メンバ関数をスレッドで実行するにはどうすればよいだろうか。 class A { pu…
GPUが2枚になったので、ChainerでマルチGPUによる学習を試してみた。MNISTサンプルを使って、実行時間を測定した。 測定条件 CUDA v9.0 cuDNN 7.0.5 ChainerのGitHubレポジトリのexamples/mnistを使用 単体の実行時間はtrain_mnist.pyの実行時間 マルチGPUの…
ChainerのMNISTサンプルをUbuntuで動かすとWindowsよりも早いことがわかったので、dlshogiの自己対局をUbuntuで行えるようにした。AperyのMakefileを参考に、g++でビルドできるようにした。Windowsで32スレッドで1手800シミュレーションで自己対局を行うと、…
Ubuntu 16.04 LTSのaptでインストールできるBoostのバージョンは1.58なのでBoost.Numpyが使えない。 そこで、最新バージョンのBoostをソースからビルドした。手順は、 Boost Getting Started on Unix Variants - 1.66.0 を参照した。 ソースダウンロード wge…
久しぶりに音声スペクトルモニター(Audio Spectrum Monitor)をバージョンアップしました٩( 'ω' )و play.google.comベータ版で公開したままにしていた機能を正式にリリースしました。 ピッチホールド機能を追加 waveファイルをインポートする機能を追加(44.1k…
将棋ソフトの開発ばかりしていたので、しばらくスマホアプリの更新ができていませんでした。 要望はちょくちょくもらっていたのですが、返信もおこたってました・・(・´ω・`)ゞ 時間の使い方を見直して、アプリ開発にも少し時間をとることにしようと思いま…
AlphaZeroと同様の方式で、自己対局で教師局面を生成するプログラムを作成した。 自己対局の仕様 以下の仕様はAlphaZeroと同じとした。 自己対局を行う双方のプレイヤーは、同一のモデルを使用する。 プレイアウトは固定プレイアウト数 以下の点は変更した。…
電王トーナメントのときに将棋所のログ出力が同期処理で非常に遅いこと知らずに時間切れ負けを起こしてしまった。 その後、速度優先でログ出力を行わないように修正したが、ログ出力がないと探索の状況がわからず不便である。そこでログをファイルに出力する…