OpenMP并行计算for循环
test.cpp
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
int main(){
vector<int> a={1,2,3,4,5,6,7,8};
vector<int> b={1,1,2};
vector<int> c(8);
#pragma omp parallel for
for(int i = 0; i < 8; i++)
{
c[i] = a[i] + b[i];
printf("c[%d]=%d\n",i,c[i]);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
From Stack Overflow[1] :
The OpenMP pragmas are only enabled when compiled with -fopenmp. Otherwise they are completely ignored by the compiler.
Therefore,you will need to add -fopenmp to the compilation of every single module that uses OpenMP. (As opposed to just the final linking step.)
g++ -std=c++11 -c test.cpp -o test.o -fopenmp
g++ test.o -o test -fopenmp -lpthread
- 2
Environment Variable OMP_NUM_THREADS sets the number of threads[2]
export OMP_NUM_THREADS=4
./test
- 2
My Results
c[0]=2 c[6]=8 c[5]=8 c[3]=6 c[2]=4 c[7]=10 c[1]=4 c[4]=6
- 9
for (auto &vi : vec)
这种for不能够用#pragma omp parallel for
来并行。要改成普通的int遍历。