OpenACC例子
timeinfo1.c代码
#include<stdio.h>
#define N 100
int main()
{
int A[N];
#pragma acc kernels
{
for(int i=; i<N; i++) A[i] = ;
}
printf("A[2]=%d\n",A[]);
return ;
}
编译信息:

编译器给出的信息表明, 编译器识别到了第6行的 OpenACC 导语,并生成了相应的数据传递代码; 第 9 行的 for 循环也被成功并行化。运行代码前,需要将 PGI 编译器特有的环境变量 export PGI_ACC_TIME 赋值为 1, 打开时间统计功能, 该功能默认是关闭的。
PGI$ export PGI_ACC_TIME=
运行编译好的可执行文件
PGI$ ./timeinfo1.exe
(如下解释定有疏忽,待改正)
6: region entered 1 time 意为在第 6 行进入加速区域,该区域被执行 1 次。
8: kernel launched 1 times 表明内核函数被启动了 1 次
grid: [1] block: [128]表明,内核使用的线程网络(grid)包含 1 个线程块(block),每个线程块里包含 128 个线程。
time(us):total=3max=3min=3avg=3这一行表明内核运行的总时间为 3微秒,最大、最小、平均时间都是 3微秒,这是因为只有一个内核函数。
timeinfo2.c代码
#include<stdio.h>
#define N 100
int main()
{
int A[N];
for(int i=; i<N; i++) A[i]=;
#pragma acc data copy(A)
{
for(int i=; i<N; i++)
{
#pragma acc kernels
{
for(int i=; i<N; i++) A[i] += ;
}
}
printf("A[1]=%d\n",A[]);
}
printf("A[2]=%d\n",A[]);
return ;
}
编译信息:

(如下解释定有疏忽,待改正)
7: region entered 1 time 含义为在第 7 行的 data 导语处进入加速器区域, 该区域被执行1 次。
11: region entered 100 times 含义为第 11 行的导语区域被执行了 100 次, time(us):total=8,000 含义为导语区域的执行总时间为 8000 微秒
13: kernel launched 100 times 含义为 13 行的循环生成的内核被启动了 100 次,
grid: [1] block: [128]含义为内核使用的线程网格(grid)包含 1 个线程块,每个线程块(block)包含 128 个线程。
time(us): total=8,000 max=1000 min=0 avg=80 含义为,在 100 个内核中, 单个内核花费的时间最长为 8000 微秒,最小为 0 微秒,平均为 80 微秒, 100 个内核执行的总时间为 409 微秒。
OpenACC例子的更多相关文章
- [NVIDIA编程教程]OpenACC: Directives for GPUs
NVIDIA已经在过去五年里大力发展CUDA技术,我们估计CUDA开发人员超过15万,很多重要的科学应用正在CUDA的帮助下完成.但是我们仍然有一个很长的路要走,以帮助每个人从GPU计算中享受到好处. ...
- 7.OpenACC
OpenACC: openacc 可以用于fortran, c 和 c++程序,可以运行在CPU或者GPU设备. openacc的代码就是在原有的C语言基础上进行修改,通过添加:compiler di ...
- OpenACC 异步计算
▶ 按照书上的例子,使用 async 导语实现主机与设备端的异步计算 ● 代码,非异步的代码只要将其中的 async 以及第 29 行删除即可 #include <stdio.h> #in ...
- OpenAcc社区版安装教程(Linux版)(更新版)
官方安装过程如下图所示 1.安装前 下载OpenAcc社区版 1,目前为止的最新版,平台是Linux,选择Linux x86-64. 我的服务器系统是CentOs 下载地址链接:https://www ...
- 编写第一个OpenACC程序
原文链接 在PGI的官方网站上获得示例代码: http://www.pgroup.com/lit/samples/pgi_accelerator_examples.tar 我们的第一个例子从一个简单的 ...
- 【ARM-Linux开发】OpenACC并行编程实战笔记
今年运气比较好,学了cuda之后,了解到了gpu的另两种使用语言opencl和openacc, opencl(Open Computing Language ,开放计算语言)是面向异构系统的并行编程 ...
- SQLServer地址搜索性能优化例子
这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- REGEX例子
作为REGEX的例子,代码9.3显示了一个给定的文件有多少行,具有给定的模式,通过命令行输入(注:有更有效率的方式来实现这个功能,如Unix下的grep命令,在这里只是给出了另一种方式).这个程序像下 ...
随机推荐
- 垃圾收集GC
一.引用计数法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不能再被使用的.引用计数法实现简单,判定效率也很高,但是它很 ...
- 2019.03.20 读书笔记 as is 以及重写隐式/显示
强转.as is 的用法 强制转换类型有两种:子类转基类,重写隐式(implicit )\显示(explicit) 转换操作符 class myclass { private int value; p ...
- RedHat7配置静态IP
1.验证网络管理器状态,Active: active (running)表示正在运行,一般RHEL7都默认安装了. [root@localhost ~]# systemctl status Netwo ...
- 摄像机模型 (Camera Model)
摄像机通过成像透镜将三维场景投影到摄像机二维像平面上,这个投影可用成像变换描述,即摄像机成像模型.摄像机成像模型有不同描述方式,本节首先介绍机器视觉中的常用坐标系,然后介绍摄像机的线性模型和非线性模型 ...
- Murano Weekly Meeting 2016.06.07
Meeting time: 2016.June.7 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: 1.A ...
- (转)Shell脚本之break,continue,和exit区别
Linux脚本中的break continue exit return break结束并退出循环 continue在循环中不执行continue下面的代码,转而进入下一轮循环 exit退出脚本,常带一 ...
- iscroll.js文档
iScroll是高性能的.小尺寸的.无依赖关系的.支持多平台的滑动JavaScript库. 当然,不只是scroll,还有滚动.缩放.平移.无限滚动.视差滚动等. 为了达到更好的新能,所以iScrol ...
- If you are tired...
如果你累了 1. 深呼吸 放松身体,深呼吸五分钟. 2. 听音乐 静静地听几首歌放松一下就好了,比如王豪学长推荐的追梦赤子心,骄傲的少年. 3. 冥想 放松身体,处于冥想状态. 4. 干洗脸.鸣天鼓. ...
- rails4 ckeditor 的部署以及 中文化
首先ckeditor 要基于paperclip 之后paperclip 需要你在linux 下安装 ImageMagick 具体安装可参考http://my.eoe.cn/guanmac/arc ...
- JavaScript 对象继承 OOP (三)
对象继承 A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. JavaScript 语言的继承不通过 class (es6 中的class 不过是 ...