エントリーの編集
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
将棋AIの進捗 その47(Linuxのマルチスレッド排他処理) - TadaoYamaokaの開発日記
記事へのコメント0件
- 注目コメント
- 新着コメント
このエントリーにコメントしてみましょう。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
将棋AIの進捗 その47(Linuxのマルチスレッド排他処理) - TadaoYamaokaの開発日記
昨日の記事で、dlshogiのゲーム木の管理をロックレス方式に見直しを行った。 Windowsでは、ノード単位の... 昨日の記事で、dlshogiのゲーム木の管理をロックレス方式に見直しを行った。 Windowsでは、ノード単位の排他制御をmutexを用いずに、atomic_flag (TAS機能)で実現することで10%NPSが向上したが、Linuxで測定すると800NPSくらいしかでないという悲惨な結果になった。 原因 Linuxのスレッドは、Windowsのスレッドとは異なり、プロセスの一種にすぎない。 そのため、コンテキストスイッチのコストが高い。 atomic_flagでビジー待機を行った場合、スレッドの切り替えが頻発し、そのたびにコンテキストスイッチが起きる。 そのことが、Linuxでの性能低下を招いたと思われる。 ビジー待機の間にstd::this_thread::yield()を追加してみたが、結果は同じであった。 対策 atomic_flagで排他制御を実装した方が高速になると考えていたが