五十嵐/並列プログラム
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[五十嵐]]
*蛙跳び法を用いたN体問題の解決 [#ae5f2b81]
[[並列処理輪講2009/プログラム発表会]]にて発表。~
**蛙跳び法とは? [#hea6da3b]
N体問題を解く際に使用する。~
一般的に3物体以上の場合のN体問題を解析的に解くことはできない。(ただし解が存在する特殊な場合もある)~
したがって、物体の新しい速度と位置を逐次計算する必要がある。~
しかし速度は常に変化しているので、現在の速度のみを参考にして新しい速度と位置を計算すると誤差が出てきてしまう。~
そこで、新しく得られた速度を利用して新しい位置を計算するというステップを踏むと効果的な解を得ることができる。~
この、「速度と位置を交互に計算する」ことが蛙跳び法である。
**並列実行 [#j535a8cf]
逐次実行では1つのプロセス(プロセッサ)で全ての物体に対して同じ計算を行う。~
全ての物体に対して同じ計算を行うので、多数のプロセス(プロセッサ)でいくつかの物体の計算を担当し並列に実行することが可能である。
**並列コード及び実行結果 [#w0a3ca75]
-並列コード
添付ファイル参照
#ref(五十嵐/並列プログラム/n_body_flog.tar.gz)
-実行速度の比較
--条件
---使用ホスト std2dc2〜std2dc17
---プロセス数 p = 1, 2, 4, 8, 16, 32, 64
---物体数 n = 256, 512, 1024, 2048
---時間間隔 dt = 1/1024
---計算時間 t_max = 1024
---乱数によって物体の各値を初期化
--結果(縦軸:計算時間 横軸:プロセス数)
#ref(五十嵐/並列プログラム/n_body_calc_res.JPG,60%)
プロセス数が1〜8まではプロセスが2倍になると計算時間が約1/2になっていることがわかる。~
それ以降計算時間が増加している理由は、プロセス数の増加により各プロセスの通信にかかる時間が増加したためと思われる。
**その他資料等 [#l4179c6d]
添付ファイル参照
#ref(五十嵐/並列プログラム/n_body_flog.tar.gz)
終了行:
[[五十嵐]]
*蛙跳び法を用いたN体問題の解決 [#ae5f2b81]
[[並列処理輪講2009/プログラム発表会]]にて発表。~
**蛙跳び法とは? [#hea6da3b]
N体問題を解く際に使用する。~
一般的に3物体以上の場合のN体問題を解析的に解くことはできない。(ただし解が存在する特殊な場合もある)~
したがって、物体の新しい速度と位置を逐次計算する必要がある。~
しかし速度は常に変化しているので、現在の速度のみを参考にして新しい速度と位置を計算すると誤差が出てきてしまう。~
そこで、新しく得られた速度を利用して新しい位置を計算するというステップを踏むと効果的な解を得ることができる。~
この、「速度と位置を交互に計算する」ことが蛙跳び法である。
**並列実行 [#j535a8cf]
逐次実行では1つのプロセス(プロセッサ)で全ての物体に対して同じ計算を行う。~
全ての物体に対して同じ計算を行うので、多数のプロセス(プロセッサ)でいくつかの物体の計算を担当し並列に実行することが可能である。
**並列コード及び実行結果 [#w0a3ca75]
-並列コード
添付ファイル参照
#ref(五十嵐/並列プログラム/n_body_flog.tar.gz)
-実行速度の比較
--条件
---使用ホスト std2dc2〜std2dc17
---プロセス数 p = 1, 2, 4, 8, 16, 32, 64
---物体数 n = 256, 512, 1024, 2048
---時間間隔 dt = 1/1024
---計算時間 t_max = 1024
---乱数によって物体の各値を初期化
--結果(縦軸:計算時間 横軸:プロセス数)
#ref(五十嵐/並列プログラム/n_body_calc_res.JPG,60%)
プロセス数が1〜8まではプロセスが2倍になると計算時間が約1/2になっていることがわかる。~
それ以降計算時間が増加している理由は、プロセス数の増加により各プロセスの通信にかかる時間が増加したためと思われる。
**その他資料等 [#l4179c6d]
添付ファイル参照
#ref(五十嵐/並列プログラム/n_body_flog.tar.gz)
ページ名: