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

11 ビュー (過去 30 日間)
tensor33
tensor33 2017 年 12 月 8 日
編集済み: Kei Otsuka 2017 年 12 月 8 日
下記のコードの実行結果が「経過時間は 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 件のコメント
michio
michio 2017 年 12 月 8 日
あくまで一般論ですが、データの転送等の余計な処理の分、処理時間が長くなる場合もあります。
GPU計算のオーバーヘッド分を考慮した速度計測には gputimeit がオススメです。

サインインしてコメントする。

回答 (1 件)

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

カテゴリ

Help Center および File ExchangeGPU 計算 についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!