C++ oepnMP
查看openmp版本
echo |cpp -fopenmp -dM |grep -i open
#define _OPENMP 201511
1.cmake 调用库
find_package(OpenMP REQUIRED)
if(OPENMP_FOUND)
message("OPENMP FOUND")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()
2.并行运行
#pragma omp parallel for //后面接for循环
omp_set_num_threads(2); //指定线程
#pragma omp parallel{ //指定区域
#pragma omp parallel for
}
critical
critical区域同一时间只能被一条线程执行
#include <iostream>
int main() {
int max = 0;
int a[10] = {11, 2, 33, 49, 113, 20, 321, 250, 689, 16};
#pragma omp parallel for
for (int i=0;i<10;i++) {
int temp = a[i];
#pragma omp critical
{
if (temp > max)
max = temp;
}
}
std::cout<<"max: "<<max<<std::endl;
return 0;
}