共有メモリ型並列計算機上での強化学習 学習時間が変だ・・・
共有メモリ型並列計算機上での強化学習 複数CPU(2003/8/1)の続き。前の結果を見ると、1スレッドと2スレッドの間は10倍遅くなっているが3スレッドにすると速くなっている。何か怪しかったけどさらにスレッドを増やして測定してみた。
学習曲線は
学習収束までの時間は
スレッド数 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
---|---|---|---|---|---|---|---|---|
収束エピソード | 7800 | 3930 | 2000 | 1000 | 700 | 600 | 150 | 130 |
収束までの時間(秒) | 5.84 | 54.19 | 27.81 | 17.60 | 8.19 | 5.30 | 2.93 | 2.05 |
スレッド1個のときは5.84秒だけど2個並列に動かすと54.19秒と10倍遅くなる。これがなぜだか分からなかったが、キャッシュミスのせいではないかというアドバイスを頂いた。
スレッド1個で1つのCPUだけ使っている場合は共有メモリの内容を書き換えてもキャッシュに保存されるため、キャッシュミスが起きづらく速い。一方、スレッド2個並列に動かして複数のCPUが使われるようになると複数のCPUが共有メモリへの書き込みをするため、CPUのキャッシュと共有メモリの内容が合わずキャッシュミスが頻発することになる。メモリのアクセス時間はキャッシュのアクセス時間より遅いため上のように10倍遅くなってしまう。行動価値テーブル書き換えのため頻繁に共有メモリに書き込んでいたのでこの理由は納得できた。
スレッドをさらに増やすとキャッシュミスによるオーバヘッドより収束エピソードが早いことの方がきいてくるため時間が早まっているのだと考えられる(んだけどどうなんだろうか)。
とりあえず1スレッドのときより学習時間を減らすことが目下の目標だったので達成できた(かもしれない)。でも速くなったといっても2倍くらいだし。それに8CPUしかないのに128スレッドって・・・何か変。