質問編集履歴
2
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -13,6 +13,9 @@
|
|
13
13
|
|
14
14
|
```C++
|
15
15
|
#include <iostream>
|
16
|
+
#ifdef _OPENMP
|
17
|
+
#include <omp.h>
|
18
|
+
#endif
|
16
19
|
|
17
20
|
using namespace std;
|
18
21
|
|
1
補足情報を更新しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
C++で画像データの分類を行い,認識率を計算するプログラムを作成しています.
|
4
4
|
|
5
|
-
その中で,openMPを用いてfor文を並列化し,そのfor文内で呼び出している関数内でもopenMPを用いた並列処理を使用しています.
|
5
|
+
その中で,下記プログラムのようにopenMPを用いてfor文を並列化し,そのfor文内で呼び出している関数内でもopenMPを用いた並列処理を使用しています.
|
6
6
|
|
7
7
|
Windows上でVC++を用いてコンパイルした際には呼び出した関数内の並列処理も並列化されていたのですが,
|
8
8
|
同様にUbuntu上でg++を用いてコンパイルすると,最初のfor文しか並列化されず,呼び出した関数内での処理が並列化されません.
|
9
9
|
|
10
|
-
|
10
|
+
Ubuntu上でもfor文から呼び出した関数内の処理を並列化したいのですが,なにか方法はないでしょうか.
|
11
11
|
|
12
12
|
### 該当のソースコード
|
13
13
|
|
@@ -26,6 +26,8 @@
|
|
26
26
|
for(i = 0; i < 5; i++){
|
27
27
|
func(i);
|
28
28
|
}
|
29
|
+
|
30
|
+
return 0;
|
29
31
|
}
|
30
32
|
|
31
33
|
void func(int i){
|
@@ -34,16 +36,26 @@
|
|
34
36
|
#pragma omp parallel for
|
35
37
|
#endif
|
36
38
|
for(j = 0; j < 100; j++){
|
37
|
-
|
39
|
+
cout << "i:" << i << "j:" << j << endl;
|
40
|
+
/*計算処理*/
|
41
|
+
}
|
38
42
|
}
|
39
|
-
|
40
|
-
}
|
41
43
|
```
|
42
44
|
|
43
|
-
###
|
45
|
+
### 補足情報(FW/ツールのバージョンなど)
|
44
46
|
|
47
|
+
windows PC:
|
48
|
+
CPU : Intel Core i7-5960X (コア数:8,スレッド数:16)
|
49
|
+
OS : windows 10
|
45
|
-
|
50
|
+
IDE : visual studio 2017
|
46
51
|
|
52
|
+
Ubuntu PC:
|
53
|
+
CPU : Intel Xeon E5-2690 v4 (コア数:14,スレッド数:28)
|
54
|
+
OS : Ubuntu 18.04 LTS
|
55
|
+
コンパイラ : g++ 7.3.0
|
56
|
+
リンク:
|
47
|
-
|
57
|
+
> g++ -c main.cpp main.o -fopenmp
|
48
58
|
|
59
|
+
コンパイル:
|
60
|
+
|
49
|
-
|
61
|
+
> g++ -o main main.o -fopenmp -lpthread
|