前提・実現したいこと
C++で画像データの分類を行い,認識率を計算するプログラムを作成しています.
その中で,下記プログラムのようにopenMPを用いてfor文を並列化し,そのfor文内で呼び出している関数内でもopenMPを用いた並列処理を使用しています.
Windows上でVC++を用いてコンパイルした際には呼び出した関数内の並列処理も並列化されていたのですが,
同様にUbuntu上でg++を用いてコンパイルすると,最初のfor文しか並列化されず,呼び出した関数内での処理が並列化されません.
Ubuntu上でもfor文から呼び出した関数内の処理を並列化したいのですが,なにか方法はないでしょうか.
該当のソースコード
C++
1#include <iostream> 2#ifdef _OPENMP 3#include <omp.h> 4#endif 5 6using namespace std; 7 8void func(int i); 9 10int main(void){ 11 int i; 12#ifdef _OPENMP 13#pragma omp parallel for 14#endif 15 for(i = 0; i < 5; i++){ 16 func(i); 17 } 18 19 return 0; 20} 21 22void func(int i){ 23 int j; 24#ifdef _OPENMP 25#pragma omp parallel for 26#endif 27 for(j = 0; j < 100; j++){ 28 cout << "i:" << i << "j:" << j << endl; 29 /*計算処理*/ 30 } 31}
補足情報(FW/ツールのバージョンなど)
windows PC:
CPU : Intel Core i7-5960X (コア数:8,スレッド数:16)
OS : windows 10
IDE : visual studio 2017
Ubuntu PC:
CPU : Intel Xeon E5-2690 v4 (コア数:14,スレッド数:28)
OS : Ubuntu 18.04 LTS
コンパイラ : g++ 7.3.0
リンク:
g++ -c main.cpp main.o -fopenmp
コンパイル:
g++ -o main main.o -fopenmp -lpthread
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/07 14:28
2018/11/10 04:35