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

質問編集履歴

2

誤字の修正

2018/11/07 14:05

投稿

merll0573
merll0573

スコア17

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

補足情報を更新しました

2018/11/07 14:05

投稿

merll0573
merll0573

スコア17

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
- どうにかUbuntu上でも呼び出した関数内の処理並列化したいのですが,なにか方法はないでしょうか.
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
- ### 補足情報(FW/ツールのバージョンなど)
57
+ > g++ -c main.cpp main.o -fopenmp
48
58
 
59
+ コンパイル:
60
+
49
- ここにより詳細な情報を記載してください。
61
+ > g++ -o main main.o -fopenmp -lpthread