GPUのeig関数の速度が遅い原因を知りたい
17 views (last 30 days)
Show older comments
下記のコードの実行結果が「経過時間は 5.108886 秒です。 経過時間は 9.642106 秒です。」となりCPU使用時とGPU使用時の実行時間が逆転してしまう原因を教えて頂きたいです。
PCスペック
- グラフィックボード GeForce GTX 1080Ti (ドライバのバージョンは388.13)
- プロセッサ Intel® Core™ i9-7900X CPU @3.30GHz 3.31GHz
- 実装 RAM 32.0GB ( 31.7GB 使用可能)
%%パラメータ設定と行列の定義
N = 3000;
A = rand(N); % [0 1]の一様乱数(N x N行列)
gpuA = gpuArray(A); % AのデータをGPU上のメモリに確保
%%CPUで実行
timer = tic(); % 計測開始
eig(A); % 固有値の計算
toc(timer); % 計測終了
%%GPUで実行
timer = tic(); % 計測開始
eig(gpuA); % 固有値の計算
toc(timer); % 計測終了
Answers (1)
Kei Otsuka
on 8 Dec 2017
Edited: Kei Otsuka
on 8 Dec 2017
今回配列のデータ型はdouble(倍精度)で使われていますが、
GeForce系のGPUはグラフィックス用であり、倍精度や半精度が重要視されないため、
倍精度浮動小数点の演算器(DP)があまり搭載されていません。
(倍精度と単精度の性能比が1:32とも言われています)
また、eigの計算自体が並列性を得にくいという点もあります。
どこまで高速化できるかわかりませんが、倍精度で性能が出るGPU(Tesla等)をお持ちであれば、
一度試されると良いと思います。
0 Comments
See Also
Categories
Find more on GPU 計算 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!