共有メモリ型並列強化学習 持ち直した・・・
強化学習を共有メモリ型の並列計算機に実装して、高速化しようとしていた。強化学習の並列化 崖っぷち(2003/10/9)で崖っぷちに追いこまれ、速くするのは絶望的な雰囲気だったが、少しだけ持ち直した。
指導教授からLinuxマシン(8CPU)ではなく、Solarisマシン(4CPU)の方がいいというアドバイスを頂いて、Solaris上で動かしてみたところ結果はがらりと変わった。スレッドを増やすことによって学習速度(実行時間)が速くなるのをちゃんと確認できた(表1)。ちなみにLinux上で実行した結果が表2。
表1: Solaris上で実行
スレッド数 | 1 | 2 | 4 | 8 |
---|---|---|---|---|
収束までの時間(秒) | 50.3 | 26.0 | 14.0 | 13.4 |
表2: Linux上で実行(スレッド増やすとめちゃくちゃ遅くなる)
スレッド数 | 1 | 2 | 4 | 8 |
---|---|---|---|---|
収束までの時間(秒) | 36 | 768 | 906 | 1069 |
LinuxとSolarisではスレッドスケジューリング時にキャッシュを考慮しないかするかで違いがあるようだ。Linuxでは、今まで使っていたCPUとは異なるCPUにスレッドを割り当ててしまうことがありキャッシュが無駄になってしまう。一方、Solarisでは、今まで使っていたCPUと同じCPUにスレッドを割り当てるためキャッシュが無駄にならない。
キャッシュがうまく使えるか使えないかによってこんなに差がでるなんて知らなかった。プログラミングでハードのこと考えたことほとんどなかったのでいい勉強になった。
ちなみに共有メモリ型並列強化学習ってのは造語。英語のParallel Reinforcement Learningっていうのと、並列分散遺伝的アルゴリズムってのからまねてつけてみた。今回のは並列ではあるが、当然分散ではない。