首页 > 其他分享 >OpenMP - 编译制导(1)

OpenMP - 编译制导(1)

时间:2024-03-10 20:14:23浏览次数:20  
标签:迭代 int 编译 omp 线程 子句 OpenMP 制导

编译制导是对程序设计语言的扩展。通过对串行程序添加制导语句实现并行化。

编译制导语句由下列几部分组成:

  • 制导标识符 ( #pragma omp )
  • 制导名称(parallel,for,section等)
  • 子句(private, shared, reduction, copyin等)

并行域制导

一个并行域就是一个能被多个线程并行执行的程序段。在并行域结尾有一个隐式同步(barrier)。

for循环制导

#include <iostream>
#include <omp.h>
using namespace std;

int main(int argc, char* argv[]){
    int max_threads = omp_get_max_threads();
    int num_procs = omp_get_num_procs();
    cout << "max threads: " << max_threads << " num procs: " << num_procs << endl;
    #pragma omp parallel for
    for (int i = 0; i < 10; ++i) {
        int num = omp_get_num_threads();
        int id = omp_get_thread_num();
        cout << "thread " << id << " --> " << i << endl;
    }
    return 0;
}

注:#pragma omp parallel for指令,它的创建线程的数量并不是由循环的迭代次数决定的,而是由OpenMP根据当前系统的配置和设置来确定的。一般来说,OpenMP会根据可用的CPU核心数量和其他因素来决定创建多少个线程来执行循环。线程和迭代之间可能并不是一一对应的,即一个线程可能执行多个迭代,或者多个线程可能合作执行一个迭代(这取决于循环的划分方式)。

要指明节点的进程数salloc -p com -N 1 -n 32,否则默认为1,并且n要小于等于节点cpu核心数. ---》omp_get_max_threads() ---》32

调度子句schedule

schedule子句用于指定在并行循环中如何分配迭代给不同的线程。schedule指令允许你控制迭代的分配方式,以优化性能或者满足特定需求。该子句给出迭代循环划分后的块大小和线程执行的块范围

 

标签:迭代,int,编译,omp,线程,子句,OpenMP,制导
From: https://www.cnblogs.com/tao-gak567/p/18064696

相关文章

  • Openwrt编译教程
    注意:不要用root用户进行编译国内用户编译前最好准备好梯子默认登陆IP192.168.1.1密码password编译命令:首先装好Linux系统,推荐Debian11或UbuntuLTS安装编译依赖sudoaptupdate-ysudoaptfull-upgrade-ysudoaptinstall-yackantlr3asciidocaut......
  • Ubuntu 22.04内核代码下载、编译、调试
    1下载Ubuntu Kernel参考《Kernel/Dev/KernelGitGuide-UbuntuWiki》,下载Ubuntu22.04代码:gitclonehttps://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy2修改、编译、安装UbuntuKernel参考《Kernel/BuildYourOwnKernel-UbuntuWiki》。......
  • 蓬莱enclave TEE编译和运行说明
    蓬莱enclave-spmp编译和运行说明蓬莱是一个RISC-VTEE系统,其设计具有安全性,高性能和可扩展性。基于PMP的OpenSBI版本的蓬莱Enclave使用可以参考下文,具体仓库地址为:https://github.com/Penglai-Enclave/Penglai-Enclave-sPMPpenglai编译环境准备创建~/dev目录,将sdk、penglai-e......
  • ubuntu 内核替换为自编译内核
    下载Linux内核源码安装编译时需要使用的工具,按照编译时做出的提示,灵活安装需要的工具链sudoapt-getupdatesudoapt-getinstalllibncurses5-devbuild-essentialkernel-packageopenssl-dev拷贝原内核中的配置文件做为Linux编译使用的默认配置cp/boot/config-x......
  • 编译实践学习 Part1
    本文采用CCBY协议发布。闲话开新坑辣!参考PKU的文档做的。为什么会做这个呢?之前看一位退役OIer的Blog然后发现了这个文档,想着自己退役之后也要做一个。主要是被文档最后的awesome-sysy吸引了。其实之前我在OI里也写过CYaRon!语的编译版本,所以算是有Bear来........
  • windows下体验quarkus原生编译打包
    基础本机是win10GraalVM21.0.2,用的社区版的最新版本,并配置其bin目录加入环境变量Maven3.96,用的最新版本IDEA,本机版本2023.2.5VisualStudio202217.9.2,用的社区版最新版本,quarkus官网提到过VisualStudio2017VisualC++BuildTools,可能2017或更高版本的这个也可以,但是......
  • OpenMP - 介绍
    OpenMP是基于线程的并行编程模型。OpenMP采用Fork-Join并行执行方式:OpenMP程序开始于一个单独的主线程(MasterThread),然后主线程一直串行执行,直到遇见第一个并行域(ParallelRegion),然后开始并行执行并行区域。其程序由一组编译制导、运行时库函数(Run-Timeroutines)和环境变量组成......
  • OpenMP-threadprivate
    threadprivate是OpenMP中的一个指令,用于在多线程环境中为每个线程创建私有变量。通常情况下,OpenMP中的变量默认是共享的,也就是说所有线程都可以访问同一个变量的同一份副本。然而,在某些情况下,需要为每个线程创建独立的变量副本,以避免并发访问问题。threadprivate指令允许程序员将......
  • ubuntu22.04编译创龙T113-i mini的SDK
    ubuntu版本22.04.11.解压安装包拷贝sdk并解压出来,注意安装包较大请预留好硬盘空间2.预安装编译应用先安装如下应用,在编译过程中需要使用到的依赖sudoaptinstallbuild-essentialcmakeflexbisonu-boot-toolsopenssllibssl-devtexinfo3.安装和更换python2编译使......
  • python3.7.4 RV1126 交叉编译
    首先,十分感谢大佬分享的交叉编译攻略,原文链接如下:https://www.cnblogs.com/Se7eN-HOU/p/16736164.html在此基础上,本人经过一周时间的踩坑,终于在RV1126开发板上实现了交叉编译。现记录本人实际编译版本与上述版本略有不同之处。主要是由于3.5.2版本的python和openssl1.0.2g在......