個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。2019-07-03WindowsでプロセスにSIGINTを送るバッチファイル将棋AIの自己対局のプログラムで途中で中断(Ctrl+C)した場合に、それまでに生成した局面を安全にファイルに書き出すためにSIGINTをハンドリングしている。順にシーケンシャルに処理していた。現在1台のPCにGPUを3枚刺して使用しており、学習は1枚のGPUで行っているため、学習中に他の2枚が無駄になっている。そこで、GPUを有効活用するため、学習中にも自己対局を行い、学習完了時にSIGINTを送信して自己対局を安全に中断するようにした。自己対局のプログラムが新しいモデルがあれば取りに行くような仕組みの方がエレガントだが、一連の処理をWindowsのバッチファイルで処理するダサい仕組みになっている。以下、処理方式に関する説明です。...}のようにして、SIGINTをハンドリングできる。学習と自己対局を並列で実行バッチファイルでプログラムを並列で実行するために、startコマンドで自己対局を別のコマンドプロンプトで起動してから学習を行うようにした。ログをリダイレクトで出力していたため、直接自己対局プログラムを起動するのではなく、cmdコマンドを起動してその引数に実行するコマンド行を記述するようにした。学習完了後に、並列で実行中の自己対局プログラムを終了するために、SIGINTを送信する。Windowsで標準でSIGINTを送信する方法がないため、windows-killというコマンドを使用した。標準のプロセスを終了するコマンドとしてtaskkillコマンドがあるが、SIGINTは送信できない。windows-killコマンドは引数がPIDになっているため、tasklistコマンドでPIDを取得する必要がある。%pid%のようにしてSIGINGを送信する。その後、自己対局プログラムが終了するのを待つ必要があるため、powershellのWait-Processを使って待つようにした。%pid%以上、バッチファイルでプロセスの並列処理を頑張る方法についてでした。バッチファイルで頑張るよりPythonとかで作った方がよいです。»プロフィールid:TadaoYamaokaスマホアプリ開発とディープラーニングを使った将棋ソフトの開発を行っています。)はてなブログをはじめよう!TadaoYamaokaさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。