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

11 vues (au cours des 30 derniers jours)
tensor33
tensor33 le 8 Déc 2017
Modifié(e) : Kei Otsuka le 8 Déc 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 commentaire
michio
michio le 8 Déc 2017
あくまで一般論ですが、データの転送等の余計な処理の分、処理時間が長くなる場合もあります。
GPU計算のオーバーヘッド分を考慮した速度計測には gputimeit がオススメです。

Connectez-vous pour commenter.

Réponses (1)

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

Catégories

En savoir plus sur GPU 計算 dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!