シミュレータの実行速度が遅いのは,単純にサンプル毎に必要な演算が
多いのが原因のようです.
まず,コンパイラオプションをDebugからReleaseのデフォルト値に
するだけで,実行速度が倍になりました.それでも実時間の4倍ほどの
処理時間が掛かります.このときのCPU使用率は12%と,余裕があります.
(クリックで拡大)
さらに,マルチコアを有効に使うために,OpenMPを試してみました.
受信信号の生成は,各衛星で同じ処理なので,ここを並列化します.
(クリックで拡大)
サンプル毎に衛星間で並列化を行うと,スレッドの生成コストが高く,
並列化の効果がありません.そこで,衛星毎のforループを並列化し,
その中である一定時間分のサンプルを生成します.その後,それらを
足し合わせて,まとめてファイルに書き込むという構成にしました.
この並列化で,8コア全部が有効に使用され,平均して50%程度の
CPU使用率になっています.
(クリックで拡大)
実行速度も,Core i7-3770,3.4GHzでほぼ実時間となりました.
快適というほどではありませんが,ストレスなくシミュレーション
ファイルの生成ができます.
多いのが原因のようです.
まず,コンパイラオプションをDebugからReleaseのデフォルト値に
するだけで,実行速度が倍になりました.それでも実時間の4倍ほどの
処理時間が掛かります.このときのCPU使用率は12%と,余裕があります.
(クリックで拡大)
さらに,マルチコアを有効に使うために,OpenMPを試してみました.
受信信号の生成は,各衛星で同じ処理なので,ここを並列化します.
(クリックで拡大)
サンプル毎に衛星間で並列化を行うと,スレッドの生成コストが高く,
並列化の効果がありません.そこで,衛星毎のforループを並列化し,
その中である一定時間分のサンプルを生成します.その後,それらを
足し合わせて,まとめてファイルに書き込むという構成にしました.
この並列化で,8コア全部が有効に使用され,平均して50%程度の
CPU使用率になっています.
(クリックで拡大)
実行速度も,Core i7-3770,3.4GHzでほぼ実時間となりました.
快適というほどではありませんが,ストレスなくシミュレーション
ファイルの生成ができます.