首页 > 其他分享 >OpenMP - default子句

OpenMP - default子句

时间:2024-03-15 17:00:43浏览次数:22  
标签:变量 default 指定 int pragma 子句 OpenMP

OpenMP是基于共享内存编程模型的,这意味着除非明确指定,否则所有的变量在并行区域中都是共享的。

使用default子句,程序员可以更改这种默认行为。default(none)指定在并行区域内,除非明确指定为sharedprivate,否则所有变量都是未定义的。这要求程序员显式地指定每个变量的作用域;default(shared),显式地指定了除非明确指定为private,否则所有变量在并行区域内都是共享的,实际上恢复了OpenMP的默认行为。firstprivate

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

int main(int argc, char* argv[]){
    int a = 2;
    #pragma omp parallel default(a)
    {
        int id = omp_get_thread_num();
        if (id == 3){
            a = 5;
            cout << "thread " << id << " set value of a to 5" << endl;
        }
        #pragma omp barrier
        if (id == 6){
            cout << "thread " << id << " read value of a to " << a << endl;
        }
    }
    return 0;
}
thread 3 set value of a to 5
thread 6 read value of a to 5
设置none,但不指明相关变量的共享类型
 test/openmp/pragma.cpp:11:13: error: variable 'a' must have explicitly specified data sharing attributes
            a = 5;
            ^
test/openmp/pragma.cpp:7:34: note: explicit data sharing attribute requested here
    #pragma omp parallel default(none)
                                 ^
test/openmp/pragma.cpp:12:13: error: variable 'cout' must have explicitly specified data sharing attributes
            cout << "thread " << id << " set value of a to 5" << endl;
            ^~~~
test/openmp/pragma.cpp:7:34: note: explicit data sharing attribute requested here
    #pragma omp parallel default(none)
                                 ^
2 errors generated.

。。。

标签:变量,default,指定,int,pragma,子句,OpenMP
From: https://www.cnblogs.com/tao-gak567/p/18075816

相关文章

  • OpenMP - 嵌套循环"collapse"
    collapse子句用于将多个嵌套的循环折叠成一个单独的循环。这个特性通常用于在嵌套循环上并行化以提高性能。参数n指定了折叠的层数。#include<iostream>#include<omp.h>usingnamespacestd;intmain(intargc,char*argv[]){inta[6][6];#pragmaompparallel......
  • OpenMP - 同步机制“锁”
    OpenMP中的锁(lock)是一种同步机制,用于保护共享资源,以防止多个线程同时访问或修改它,从而避免竞态条件。锁允许线程在访问临界区之前获取锁,并在退出临界区时释放锁。这样可以确保在任何给定时间只有一个线程能够访问临界区,从而保证了数据的一致性。简单锁最基本的锁,只能被一个线程......
  • MogDB-openGauss default privileges 使用方法
    MogDB/openGaussdefaultprivileges使用方法权限是用户访问数据库对象的首要条件,每个新增用户默认属于PUBLIC角色组成员,也就是具有PUBLIC角色组的权限,但在日常业务使用中,仅仅具有PUBLIC权限是远远不够的,还需要具有额外的权限,在MogDB/openGauss数据库支持的业务中经常需......
  • OpenMP 编程模型
    OpenMP内存模型共享内存模型:OpenMP专为多处理器/核心、共享内存机器设计,底层架构可以是共享内存UMA或NUMOpenMP执行模型基于线程的并行:OpenMP程序基于多线程来实现并行,线程是操作系统可以调度的最小执行单元。线程存在于单个进程的资源中,没有进程,线程就不存在。......
  • [GPT] export default {} 和 export {} 的区别
    在JavaScriptES6模块系统中,exportdefault{}和export{}有明显的区别: 1.exportdefault{}:这个语法用于导出一个默认的模块成员,它可以是一个对象、函数、类等。当导入时,可以使用任何名称来引用这个默认导出的成员,或者不指定名称直接导入。每个模块只能有一个exportdef......
  • [GPT] export, export default, import, module.exports, require
     ES6规范:export和import配对 import的{}大括号里面指定要从其他模块导入的变量名, 如果export命令没有写default,那么import{}大括号里面的变量名,必须与export导出的名称相同。  exportdefault为模块指定默认输出,这样在引入时就不必关心模块输出的名字。 本质......
  • 02-defaultdic类工作原理及应用实例(全网最全?含常值函数的创建)
    经常看到说“优雅地书写代码”,总是没啥感觉,直到这两天认真查阅了defaultdic这个类的一些资料。原来,灵活的应用,真的可以这么优雅、简单。1 简要描述defaultdic是collections包中的一个扩展类,是内置dict类的子类。这个类比较简单,除了重写了dict类的__miss__方法,增加了一个......
  • OpenMP - nowait、reduction子句
    nowaitnowait是OpenMP中用于指示编译器在并行执行完指定代码块后不需要隐式等待的指令。通常情况下,当并行区域的代码执行完毕后,OpenMP会隐式地等待所有线程都执行完毕,然后再继续执行下面的代码。但是,如果在并行区域的结尾使用了nowait指令,则编译器会立即执行下面的代码,而不等待......
  • OpenMP - 编译制导(三)
    ordered制导#include<iostream>#include<omp.h>usingnamespacestd;intmain(intargc,char*argv[]){intd[6];#pragmaompparallelfororderedfor(inti=0;i<6;++i){#pragmaompordered{co......
  • OpenMP - 编译制导(二)
    section制导OpenMP中的section子句是用于在sections子句内部将代码划分成几个不同的段。当与#pragmaompparallelsections结合使用时,这些代码段会并行处理。每个section由其中的一个线程执行一次,不同的section可以由不同的线程执行。当然,如果一个线程运行得足够快,它可能会执行......