NVIDIA OpenACC 在线课程 (一) 学习笔记

1. pragma acc kernels[]
{
}
表示可能存在并行性,由编译器分析并行性,并根据分析结果决定是否生成GPU kernels


2. #pragma acc parallel loop 
开发者已经知道该循环可以并行化,不用编译器再来分析并行性;只并行化当前修饰的循环且该循环可以是嵌套的;


Independent clause
开发者知道循环迭代间不存在别名关系,例如 
pragma acc kernels[]
#pragma acc loop independent


3. pragma acc data  
{ }
表示所有的数据都会被保留在GPU平台上,直到到达区域外。{}里面可以是parallel loop或者多个kernels
copyin(a[0:N]) :0是起始位置,N表示元素个数
copyout(a[0:N]) copy(a[0:N]), create() 只分配内存,不拷贝数据;
present(list)已经在GPU上分配了内存,不需要分配
deviceptr:与cuda互操作,表示该指针就是在gpu上的指针


pgi社区版本 免费支持学术界使用,由NVIDIA提供支持,比gcc的支持更好;


PGI编译器指南
pgcc  -acc -Minfo=accel  -Mcuda=cc60 main.c
-ta=tesla 指定体系结构
-Mcuda=cc60 GPU的计算能力, k40的计算能力是cc35, p100计算能力是cc60
-Mcuda=keepgpu  生成kernel文件,但是可读性差;也可以保留到ptx代码
会打印编译信息
PGI_ACC_TIME=1 ./a.out




OpenACC默认是同步执行的;CUDA默认是异步执行的;


pragma acc loop gang, vector(128)  gang是指block,vector是指block内的线程数目
没有支持python的计划;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值