MATLAB Answers

tensor33
0

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

Asked by tensor33
on 8 Dec 2017
Latest activity Edited by 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
on 8 Dec 2017
あくまで一般論ですが、データの転送等の余計な処理の分、処理時間が長くなる場合もあります。
GPU計算のオーバーヘッド分を考慮した速度計測には gputimeit がオススメです。

Sign in to comment.

1 Answer

Answer by Kei Otsuka
on 8 Dec 2017
Edited by Kei Otsuka
on 8 Dec 2017

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

  0 Comments

Sign in to comment.