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;
}
posted @ 2022-07-18 21:12  小小灰迪  阅读(129)  评论(0编辑  收藏  举报