質問編集履歴

3

実施したのを記載

2021/10/16 08:46

投稿

datenine_com
datenine_com

スコア1

test CHANGED
File without changes
test CHANGED
@@ -44,10 +44,6 @@
44
44
 
45
45
  - [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の併用で行う並列計算」**に関する解決は現状見つかってない。
46
46
 
47
-
48
-
49
- ### 現在試していないが、近日中に試すこと
50
-
51
47
  - [リンク先の質問](https://jp.mathworks.com/matlabcentral/answers/311336-gpu?s_tid=srchtitle)にて、gpuDevice関数を用いて、GPUを選択させて並列計算を行うコードを見つけた。そこで以下のコードを作製して、《CPU上での並列計算》と《GPU上での並列計算》を別々で行う。
52
48
 
53
49
  ```MATLAB
@@ -62,29 +58,63 @@
62
58
 
63
59
 
64
60
 
61
+ tic;
62
+
65
63
  parfor i=1:n
66
64
 
67
- if mod(5,i)==0
65
+ if mod(i,16)==0
68
66
 
69
- A = rand(1,m);
67
+ gpuDevice(1);
70
68
 
71
- B = rand(m,1);
69
+ A = rand(1,m,'gpuArray');
72
70
 
73
- v(i) = A*B;
71
+ B = rand(m,1,'gpuArray');
74
72
 
75
- else
73
+ v(i) = A*B;
76
74
 
77
- k = mod(i,5);
75
+ elseif mod(i,16)==1
78
76
 
79
- gpuDevice(k);
77
+ gpuDevice(2);
80
78
 
81
- A = rand(1,m,'gpuArray');
79
+ A = rand(1,m,'gpuArray');
82
80
 
83
- B = rand(m,1,'gpuArray');
81
+ B = rand(m,1,'gpuArray');
84
82
 
85
- v(i) = A*B;
83
+ v(i) = A*B;
84
+
85
+ elseif mod(i,16)==2
86
+
87
+ gpuDevice(3);
88
+
89
+ A = rand(1,m,'gpuArray');
90
+
91
+ B = rand(m,1,'gpuArray');
92
+
93
+ v(i) = A*B;
94
+
95
+ elseif mod(i,16)==3
96
+
97
+ gpuDevice(4);
98
+
99
+ A = rand(1,m,'gpuArray');
100
+
101
+ B = rand(m,1,'gpuArray');
102
+
103
+ v(i) = A*B;
104
+
105
+ else
106
+
107
+ A = rand(1,m);
108
+
109
+ B = rand(m,1);
110
+
111
+ v(i) = A*B;
112
+
113
+ end
86
114
 
87
115
  end
116
+
117
+ toc
88
118
 
89
119
 
90
120
 
@@ -92,6 +122,10 @@
92
122
 
93
123
  ```
94
124
 
125
+ **マルチコアCPUのみの実施→0.39sec、マルチコアCPU+4台GPUでの計算→50sec**
126
+
127
+ GPUの使用量を確認したところ増えたのを確認したが、時間がかかった。
128
+
95
129
 
96
130
 
97
131
  ### 補足情報

2

試したことの記載

2021/10/16 08:46

投稿

datenine_com
datenine_com

スコア1

test CHANGED
File without changes
test CHANGED
@@ -40,8 +40,60 @@
40
40
 
41
41
  ```
42
42
 
43
- ### 補足情報
43
+ ### 試したこと
44
+
45
+ - [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の併用で行う並列計算」**に関する解決は現状見つかってない。
44
46
 
45
47
 
46
48
 
49
+ ### 現在試していないが、近日中に試すこと
50
+
51
+ - [リンク先の質問](https://jp.mathworks.com/matlabcentral/answers/311336-gpu?s_tid=srchtitle)にて、gpuDevice関数を用いて、GPUを選択させて並列計算を行うコードを見つけた。そこで以下のコードを作製して、《CPU上での並列計算》と《GPU上での並列計算》を別々で行う。
52
+
53
+ ```MATLAB
54
+
55
+ n = 100000;
56
+
57
+ m = 500;
58
+
59
+ v = zeros(1,n);
60
+
61
+ parpool('local');
62
+
63
+
64
+
65
+ parfor i=1:n
66
+
67
+ if mod(5,i)==0
68
+
69
+ A = rand(1,m);
70
+
71
+ B = rand(m,1);
72
+
73
+ v(i) = A*B;
74
+
75
+ else
76
+
77
+ k = mod(i,5);
78
+
79
+ gpuDevice(k);
80
+
81
+ A = rand(1,m,'gpuArray');
82
+
83
+ B = rand(m,1,'gpuArray');
84
+
85
+ v(i) = A*B;
86
+
87
+ end
88
+
89
+
90
+
91
+ delete(gcp('nocreate'));
92
+
93
+ ```
94
+
95
+
96
+
97
+ ### 補足情報
98
+
47
- PC環境12コアマルチCPU + 4つのGPUを搭載したワークステーション。故に並列プールは16になるはずである。
99
+ PC環境12コアマルチCPU + 4つのGPUを搭載したワークステーション。故に並列プールは16になるはずである。

1

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

2021/10/16 08:14

投稿

datenine_com
datenine_com

スコア1

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