[C++]CMake使用OpenMP并行加速

5 篇文章 1 订阅

一、简介

OpenMP (Open Multi-Processing) 是一个用于并行编程的应用程序接口(API),它支持多平台共享内存的多线程并行化。本文介绍了如何在CMake项目中使用OpenMP进行并行加速。

二、在CMake项目中使用OpenMP

1. 在CMakeLists.txt中添加OpenMP库

CMakeLists.txt代码:

cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 14)

project(learn_openmp)
include_directories(include)
# 搜索 OpenMP 库
find_package(OpenMP REQUIRED)
file(GLOB project_file main.cpp)
add_executable(${PROJECT_NAME} ${project_file})
# 链接 OpenMP 库
if(OpenMP_CXX_FOUND)
    target_link_libraries(${PROJECT_NAME} PUBLIC OpenMP::OpenMP_CXX)
endif()

main.cpp代码:

#include <omp.h>
#include <iostream>
int main()
{
    // 设置使用的 线程数
    omp_set_num_threads(8);
#pragma omp parallel // 构造一个并行块
    {
        int thread_id = omp_get_thread_num(); // 获取当前线程id
        std::cout << "Hello from thread " << thread_id << std::endl;
    }
    return 0;
}

可能的运行结果:

Hello from thread Hello from thread Hello from thread Hello from thread 235
Hello from thread 
Hello from thread 0

4
Hello from thread 7
Hello from thread 1
6

三、OpenMP样例

1. 并行执行代码块

#include <omp.h>
#include <iostream>
int main()
{

    omp_set_num_threads(8);// 设置使用的线程数为 8
#pragma omp parallel // 构造一个并行块,该线程块内的代码会被并行的运行 8 次
    {
        int thread_id = omp_get_thread_num(); // 获取当前线程id
        std::cout << "Hello from thread " << thread_id << std::endl;
    }
    return 0;
}

2. 并行执行 for 循环

#include <omp.h>
#include <iostream>
int main()
{
    // 设置使用的 线程数
    omp_set_num_threads(8);

    /* 1.第一种并行for循环方法 */
#pragma omp parallel
    {
#pragma omp for
        for (int i = 0; i < 10; i++)
        {
            std::cout << "i:" << i << " thread_id:" << omp_get_thread_num() << ";\n";
        }
    }
    std::cout << "======================\n";
    
    /* 2.第二种并行for循环方法 */
#pragma omp parallel for
    for (int j = 0; j < 10; j++)
    {
        std::cout << "j:" << j << " thread_id:" << omp_get_thread_num() << ";\n";
    }
    return 0;
}

三、参考

[1].学习openmp-cmake配置
[2].OpenMP简易教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值