《OpenACC并行编程实战》—— 2.2 OpenACC 2.5规范

    xiaoxiao2024-02-20  150

    本节书摘来自华章出版社《OpenACC并行编程实战》一 书中的第2章,第2.2节,作者何沧平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

    2.2 OpenACC 2.5规范

    本节列出OpenACC的主要构件、导语,读完本书后可以在此处快速查阅语法,不必到正文中寻找零星的介绍。初次阅读请跳过。

    1.导语一般格式

    C/C++: #pragma acc 导语名字 [子语列表] 换行 Fortran !$acc 导语名字 [子语列表]

    2. parallel构件

    C/C++: #pragma acc parallel [子语列表] 换行 结构块 Fortran: !$acc parallel [子语列表] 结构块 !$acc end parallel parallel构件的子语: async[( 整数表达式 )] wait[(整数表达式列表 )] num_gangs(整数表达式) num_workers(整数表达式 ) vector_length(整数表达式 ) device_type(设备类型列表) if(条件) reduction(操作符:变量列表) copy(变量列表) copyin(变量列表) copyout(变量列表) create(变量列表) present(变量列表) deviceptr(变量列表) private(变量列表) firstprivate(变量列表) default(none|present)

    3. kernels构件

    C/C++: #pragma acc kernels [子语列表] 换行 结构块 Fortran: !$acc kernels [子语列表] 结构块 !$acc end kernels kernels构件的子语: async[(整数表达式)] wait[(整数表达式列表)] num_gangs(整数表达式) num_workers(整数表达式) vector_length(整数表达式) device_type(设备类型列表) if(条件) copy(变量列表) copyin(变量列表) copyout(变量列表) create(变量列表) present(变量列表) deviceptr(变量列表) default(none|present)

    4. data构件

    C/C++: #pragma acc data [子语列表] 换行 结构块 Fortran: !$acc data [子语列表] 结构块 !$acc end data data构件的子语: if(条件) copy(变量列表) copyin(变量列表) copyout(变量列表) create(变量列表) present(变量列表) deviceptr(变量列表)

    5. enter data导语

    C/C++: #pragma acc enter data 子语列表 换行 Fortran: !$acc enter data 子语列表 enter data的子语: if(条件) async[(整数表达式)] wait[(整数表达式列表)] copyin(变量列表) create(变量列表)

    6. exit data导语

    C/C++: #pragma acc exit data 子语列表 换行 Fortran: !$acc exit data 子语列表 exit data的子语: if(条件) async[(整数表达式)] wait[(整数表达式列表)] copyout(变量列表) delete(变量列表) finalize

    7. host_data导语

    C/C++: #pragma acc host_data 子语列表 换行 结构化块 Fortran: !$acc host_data 子语列表 结构化块 !$acc end host_data host_data的子语: use_device(变量列表)

    8. loop导语

    C/C++: #pragma acc loop [子语表表] 换行 for循环 Fortran: !$acc loop [子语列表] do循环 loop的子语: collapse(n) gang[(gang参数列表)] worker[([num:]整数表达式)] vector[([length:]整数表达式)] seq auto tile(尺寸表达式列表) device_type(设备类型列表) independent private(列表) reduction(操作符:列表)

    9.组合导语

    C/ C++: #pragma acc parallel loop [子语列表] 换行 for 循环 #pragma acc kernels loop [子语列表] 换行 for 循环 Fortran: !$acc parallel loop [子语列表] do 循环 [!$acc end parallel loop] !$acc kernels loop [子语列表] do 循环 [!$acc end kernels loop]

    10. declare导语

    C/C++: #pragma acc declare 子语列表 换行 Fortran: !$acc declare 子语列表 declare的子语: copy(变量列表) copyin(变量列表) copyout(变量列表) create(变量列表) present(变量列表) deviceptr(变量列表) device_resident(变量列表) link(变量列表)

    11. init导语

    C/C++: #pragma acc init [子语列表] 换行 Fortran: !$acc init [子语列表] init的子语: device_type( 设备类型列表 ) device_num( 整数表达式 )

    12. shutdown导语

    C/C++: #pragma acc shutdown [子语列表] 换行 Fortran: !$acc shutdown [子语列表] shutdown的子语: device_type( 设备类型列表 ) device_num( 整数表达式 )

    13. set导语

    C/C++: #pragma acc set [子语列表] 换行 Fortran: !$acc set [子语列表] set的子语: default_async( 整数表达式 ) device_num( 整数表达式 ) device_type( 设备类型列表 )

    14. update导语

    C/C++: #pragma acc update 子语列表 换行 Fortran: !$acc update 子语列表 update的子语: async[(整数表达式)] wait[(整数表达式列表)] device_type(设备类型列表) if(条件) if_present self(变量列表) host(变量列表) device(变量列表)

    15. routine导语

    C/C++: #pragma acc routine 子语列表 换行 #pragma acc routine(名字) 子语列表 换行 Fortran: !$acc routine 子语列表 !$acc routine(名字) 子语列表 set的子语: gang worker vector seq bind(名字) bind(字符串) device_type(设备类型列表) nohost

    16. wait导语

    C/C++: #pragma acc wait [(整数表达式列表)] 子语列表 换行 Fortran: !$acc wait [(整数表达式列表)] 子语列表 wait的子语: async [( 整数表达式)] 相关资源:OpenACC并行编程实战.pdf
    最新回复(0)