teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

実施したのを記載

2021/10/16 08:46

投稿

datenine_com
datenine_com

スコア1

title CHANGED
File without changes
body CHANGED
@@ -21,8 +21,6 @@
21
21
  ```
22
22
  ### 試したこと
23
23
  - [Parallel Tool boxのマニュアル](https://jp.mathworks.com/help/parallel-computing/getting-started-with-parallel-computing-toolbox.html)及び[公式質問](https://jp.mathworks.com/matlabcentral/answers/index)の閲覧。基本的に**マルチコアCPUのみ**や**複数GPUのみ**での並列計算に関する解決法のみで、本問題である**「マルチコアCPUとGPUの併用で行う並列計算」**に関する解決は現状見つかってない。
24
-
25
- ### 現在試していないが、近日中に試すこと
26
24
  - [リンク先の質問](https://jp.mathworks.com/matlabcentral/answers/311336-gpu?s_tid=srchtitle)にて、gpuDevice関数を用いて、GPUを選択させて並列計算を行うコードを見つけた。そこで以下のコードを作製して、《CPU上での並列計算》と《GPU上での並列計算》を別々で行う。
27
25
  ```MATLAB
28
26
  n = 100000;
@@ -30,21 +28,40 @@
30
28
  v = zeros(1,n);
31
29
  parpool('local');
32
30
 
31
+ tic;
33
32
  parfor i=1:n
34
- if mod(5,i)==0
33
+ if mod(i,16)==0
34
+ gpuDevice(1);
35
+ A = rand(1,m,'gpuArray');
36
+ B = rand(m,1,'gpuArray');
37
+ v(i) = A*B;
38
+ elseif mod(i,16)==1
39
+ gpuDevice(2);
40
+ A = rand(1,m,'gpuArray');
41
+ B = rand(m,1,'gpuArray');
42
+ v(i) = A*B;
43
+ elseif mod(i,16)==2
44
+ gpuDevice(3);
45
+ A = rand(1,m,'gpuArray');
46
+ B = rand(m,1,'gpuArray');
47
+ v(i) = A*B;
48
+ elseif mod(i,16)==3
49
+ gpuDevice(4);
50
+ A = rand(1,m,'gpuArray');
51
+ B = rand(m,1,'gpuArray');
52
+ v(i) = A*B;
53
+ else
35
- A = rand(1,m);
54
+ A = rand(1,m);
36
- B = rand(m,1);
55
+ B = rand(m,1);
37
- v(i) = A*B;
56
+ v(i) = A*B;
38
- else
57
+ end
39
- k = mod(i,5);
40
- gpuDevice(k);
41
- A = rand(1,m,'gpuArray');
42
- B = rand(m,1,'gpuArray');
43
- v(i) = A*B;
44
58
  end
59
+ toc
45
60
 
46
61
  delete(gcp('nocreate'));
47
62
  ```
63
+ **マルチコアCPUのみの実施→0.39sec、マルチコアCPU+4台GPUでの計算→50sec**
64
+ GPUの使用量を確認したところ増えたのを確認したが、時間がかかった。
48
65
 
49
66
  ### 補足情報
50
67
  PC環境:12コアマルチCPU + 4つのGPUを搭載したワークステーション。故に並列プールは16になるはずである。

2

試したことの記載

2021/10/16 08:46

投稿

datenine_com
datenine_com

スコア1

title CHANGED
File without changes
body CHANGED
@@ -19,6 +19,32 @@
19
19
 
20
20
  delete(gcp('nocreate'));
21
21
  ```
22
+ ### 試したこと
23
+ - [Parallel Tool boxのマニュアル](https://jp.mathworks.com/help/parallel-computing/getting-started-with-parallel-computing-toolbox.html)及び[公式質問](https://jp.mathworks.com/matlabcentral/answers/index)の閲覧。基本的に**マルチコアCPUのみ**や**複数GPUのみ**での並列計算に関する解決法のみで、本問題である**「マルチコアCPUとGPUの併用で行う並列計算」**に関する解決は現状見つかってない。
24
+
25
+ ### 現在試していないが、近日中に試すこと
26
+ - [リンク先の質問](https://jp.mathworks.com/matlabcentral/answers/311336-gpu?s_tid=srchtitle)にて、gpuDevice関数を用いて、GPUを選択させて並列計算を行うコードを見つけた。そこで以下のコードを作製して、《CPU上での並列計算》と《GPU上での並列計算》を別々で行う。
27
+ ```MATLAB
28
+ n = 100000;
29
+ m = 500;
30
+ v = zeros(1,n);
31
+ parpool('local');
32
+
33
+ parfor i=1:n
34
+ if mod(5,i)==0
35
+ A = rand(1,m);
36
+ B = rand(m,1);
37
+ v(i) = A*B;
38
+ else
39
+ k = mod(i,5);
40
+ gpuDevice(k);
41
+ A = rand(1,m,'gpuArray');
42
+ B = rand(m,1,'gpuArray');
43
+ v(i) = A*B;
44
+ end
45
+
46
+ delete(gcp('nocreate'));
47
+ ```
48
+
22
49
  ### 補足情報
23
-
24
- PC環境12コアマルチCPU + 4つのGPUを搭載したワークステーション。故に並列プールは16になるはずである。
50
+ PC環境12コアマルチCPU + 4つのGPUを搭載したワークステーション。故に並列プールは16になるはずである。

1

MATLABの問題であることを記載

2021/10/16 08:14

投稿

datenine_com
datenine_com

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- マルチコアCPUとGPUを併用した並列計算
1
+ MATLABを用いた、マルチコアCPUとGPUを併用した並列計算
body CHANGED
@@ -1,5 +1,5 @@
1
1
  ### 前提・実現したいこと
2
- 以下のプログラムをマルチコアCPUとGPUを併用して並列計算をしたいのですが、parpoolで並列プールを呼び出しても、マルチコアCPU物理コア数のみしか呼び出せません。
2
+ **MATLABという言語を用いて**以下のプログラムをマルチコアCPUとGPUを併用して並列計算をしたいのですが、parpoolで並列プールを呼び出しても、マルチコアCPU物理コア数のみしか呼び出せません。
3
3
  どのように設定すればGPUを併用した並列計算をできるのでしょうか?
4
4
 
5
5
  ### 該当のソースコード