スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OpenCL GPGPU:陽解法、応力増分計算部分の並列化

OpenCL GPGPU。ついに本命の陽解法への適用です。
最も計算時間を要する応力増分計算の所をGPU並列化しました。
例によってFEM要素が少ない場合は効果がありませんが
ある程度の数になってくるとGPU並列の効果が明確に出てきます。

スクリーンショット 2012-06-11 10.33.34

スクリーンショット 2012-06-11 10.19.45 スクリーンショット 2012-06-11 10.17.03

要素数:375
節点数:850
時間ステップ数:1000

CPU解析時間:42[s]
GPU解析時間:26[s]

要素数が数100程度で効果が出ました。
現状では数10,000要素規模の解析には一晩程度かかっていますが
並列箇所を増やしていけばかなり短時間で解析できそうです。

GPU計算部分をもう少し細かく見てみました。
スクリーンショット 2012-06-11 11.10.05

これによると1ステップにおいて

総計算時間:26.0[ms]
要素増分計算:16.0[ms]
GPUセット:8.7[ms]
GPU計算:2.0[ms]
GPU結果読み込み:1.6[ms]

となっています。
GPUセットではGPUに渡す値をfloatなどで定義し直して
・clCreateBuffer
・clEnqueueWriteBuffer
・clSetKernelArg
等でGPUに送るわけですが、ここに大半の時間がかかっています。
ここは削りようがないです。。。
GPU計算自体は非常に短時間で終わっています。
結果の読み込みにも多少時間がかかると。。。

結局、ステップごとにGPUセットの時間があるので
解析が一瞬で終わる事は無さそうです。
仮に1,000,000ステップの解析を行えば
GPUセットだけで約10,000[s](約3時間)かかってしまうわけで。。。
計算自体が非常に高速なだけに何とかならないものか。。。



スポンサーサイト

コメントの投稿

非公開コメント

No title

こんばんわ。
私はCUDAしかやってないためclCreateBufferなどがわからないので役に立つかわからないのですが、
一般的にはHOST⇔DEVICEの転送がボトルネックになる場合は
データをデバイス側に置きっぱなしにできるように効果が薄くても処理をまるごとGPUで行うのが良いとされていますね。
(言うは易し行うは・・・なのですが)

Re: No title

ご助言ありがとうございます。
ノウハウまではなかなか検索できなくて困っていました。

>データをデバイス側に置きっぱなしに

確かにそうすれば転送は初回のみで良さそうですね。
clCreateBufferの引数を調べたところ
 CL_MEM_USE_HOST_PTR:CPU側とGPU側でデータが同期する
というのがありました。
これでいけるかもしれません。
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
プロフィール

uglab

Author:uglab
ソフト開発会社

【Twitter】
フォローお願いします

【You tube動画一覧】
チャンネル登録お願いします


最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
スポンサードリンク
    【スポンサードリンク】

リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。