質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

並列処理

複数の計算が同時に実行される手法

Q&A

解決済

2回答

2281閲覧

MATLABを用いた、マルチコアCPUとGPUを併用した並列計算

datenine_com

総合スコア1

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

並列処理

複数の計算が同時に実行される手法

0グッド

0クリップ

投稿2021/10/16 05:33

編集2021/10/16 08:46

前提・実現したいこと

MATLABという言語を用いて以下のプログラムをマルチコアCPUとGPUを併用して並列計算をしたいのですが、parpoolで並列プールを呼び出しても、マルチコアCPU物理コア数のみしか呼び出せません。
どのように設定すればGPUを併用した並列計算をできるのでしょうか?

該当のソースコード

**目的:**成分数が500の横ベクトルAと縦ベクトルBを乱数によって発生させ、その積を求める。求めた値を成分10万個のベクトルvに収納させる。

MATLAB

1n = 100000; 2m = 500; 3v = zeros(1,n); 4parpool('local'); 5 6parfor i=1:n 7A = rand(1,m); 8B = rand(m,1); 9v(i) = A*B; 10end 11 12delete(gcp('nocreate'));

試したこと

  • Parallel Tool boxのマニュアル及び公式質問の閲覧。基本的にマルチコアCPUのみ複数GPUのみでの並列計算に関する解決法のみで、本問題である**「マルチコアCPUとGPUの併用で行う並列計算」**に関する解決は現状見つかってない。
  • リンク先の質問にて、gpuDevice関数を用いて、GPUを選択させて並列計算を行うコードを見つけた。そこで以下のコードを作製して、《CPU上での並列計算》と《GPU上での並列計算》を別々で行う。

MATLAB

1n = 100000; 2m = 500; 3v = zeros(1,n); 4parpool('local'); 5 6tic; 7parfor i=1:n 8 if mod(i,16)==0 9 gpuDevice(1); 10 A = rand(1,m,'gpuArray'); 11 B = rand(m,1,'gpuArray'); 12 v(i) = A*B; 13 elseif mod(i,16)==1 14 gpuDevice(2); 15 A = rand(1,m,'gpuArray'); 16 B = rand(m,1,'gpuArray'); 17 v(i) = A*B; 18 elseif mod(i,16)==2 19 gpuDevice(3); 20 A = rand(1,m,'gpuArray'); 21 B = rand(m,1,'gpuArray'); 22 v(i) = A*B; 23 elseif mod(i,16)==3 24 gpuDevice(4); 25 A = rand(1,m,'gpuArray'); 26 B = rand(m,1,'gpuArray'); 27 v(i) = A*B; 28 else 29 A = rand(1,m); 30 B = rand(m,1); 31 v(i) = A*B; 32 end 33end 34toc 35 36delete(gcp('nocreate'));

マルチコアCPUのみの実施→0.39sec、マルチコアCPU+4台GPUでの計算→50sec
GPUの使用量を確認したところ増えたのを確認したが、時間がかかった。

補足情報

PC環境:12コアマルチCPU + 4つのGPUを搭載したワークステーション。故に並列プールは16になるはずである。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

投稿2021/10/16 07:54

yuki23

総合スコア1459

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PC環境;12コアマルチCPU + 4つのGPUを搭載したワークステーション。故に並列プールは16になるはずである。

ってどこかにかいてありますか?
まともに考えて、CPUにとって、どういうGPUが装着されてるかなんぞ知りようがないんで、
GPUのことなんか知ったこっちゃないんですが。

投稿2021/10/16 06:45

y_waiwai

総合スコア88163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問