GPUのeig関数の速度が遅い原因を知りたい

17 views (last 30 days)
tensor33
tensor33 on 8 Dec 2017
Edited: Kei Otsuka on 8 Dec 2017
下記のコードの実行結果が「経過時間は 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); % 計測終了
  1 Comment
michio
michio on 8 Dec 2017
あくまで一般論ですが、データの転送等の余計な処理の分、処理時間が長くなる場合もあります。
GPU計算のオーバーヘッド分を考慮した速度計測には gputimeit がオススメです。

Sign in to comment.

Answers (1)

Kei Otsuka
Kei Otsuka on 8 Dec 2017
Edited: Kei Otsuka on 8 Dec 2017
今回配列のデータ型はdouble(倍精度)で使われていますが、
GeForce系のGPUはグラフィックス用であり、倍精度や半精度が重要視されないため、
倍精度浮動小数点の演算器(DP)があまり搭載されていません。
(倍精度と単精度の性能比が1:32とも言われています)
 
また、eigの計算自体が並列性を得にくいという点もあります。
どこまで高速化できるかわかりませんが、倍精度で性能が出るGPU(Tesla等)をお持ちであれば、
一度試されると良いと思います。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!