質問編集履歴
3
実施したのを記載
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(
|
65
|
+
if mod(i,16)==0
|
68
66
|
|
69
|
-
|
67
|
+
gpuDevice(1);
|
70
68
|
|
71
|
-
|
69
|
+
A = rand(1,m,'gpuArray');
|
72
70
|
|
73
|
-
|
71
|
+
B = rand(m,1,'gpuArray');
|
74
72
|
|
75
|
-
|
73
|
+
v(i) = A*B;
|
76
74
|
|
77
|
-
|
75
|
+
elseif mod(i,16)==1
|
78
76
|
|
79
|
-
gpuDevice(
|
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
試したことの記載
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環境
|
99
|
+
PC環境:12コアマルチCPU + 4つのGPUを搭載したワークステーション。故に並列プールは16になるはずである。
|
1
MATLABの問題であることを記載
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
|
|