??xml version="1.0" encoding="utf-8" standalone="yes"?> http://www.caps-entreprise.com.cn/many-core/webinar-openacc-1.html 什么是Z指o的移植方式呢Q首先我q里说的UL可以理解为把原先在CPU上跑的程序放到像GPU一L协处理器上跑的这个过E。在英文里可以叫Porting。移植有两种方式Q一U是使用CUDA或者OpenCL来重新设计代码,然后使用g厂商提供的编译器来编译;一U是使用OpenACC或者OpenHMPP提供的指令集dC想用GPU计算的源代码中的某个位置Q让~译器来~译出GPU上执行的代码。后一U方式就是基于指令的UL方式?nbsp; 例如Q下面一个简单的循环Q?/p>
如果你想把这个@环放到GPU上,让每个线E计一ơi的话Q可以这样做Q?/p>
#pragma acc kernels |格化(gridificationQ: 内核QkernelQ?/p>
在OpenACC里可以这L解内核:内核是在协处理器(例如GPUQ上被多个线E同时执行的一D代码。如果每个线E都做一个活Q岂不是没意思了么?当然不是q样的,他们执行的代码是一LQ但是每个线E可以根据自qIDh针对不同的数据做同样的工作,q也是数据q行的含义?/p>
codelet 使用CAPS的HMPP Workbench~译加了OpenACC指导语句的源代码Ӟ~译器会告诉你codelet产生了。实际上产生了一个CUDA或者OpenCL的源文gQ这个源文g中包含了Ҏ你的指导语句生成的CUDA或者OpenCL的源代码。那什么是codelet呢?可以认ؓcodelet是数据理+内核。一个codelet要干的事情包括两部分Q申请和理CPU和协处理器之间的存储Q还有就是启动在协处理上执行的代码?/p>
work-sharing q个词可以理解ؓ名词“׃n工作”。如果在协处理器上的U程们执行的工作时work-sharing的,那么每个U程可以Ҏ自己的ID在不同的数据上干了相似的工作。这个词是在使用OpenACC或者OpenHMPPUL代码的时候遇到的Q它描述的是CPU的串行代码中的状态,例如Q?/p>
在这D代码中Qa[i]的计与a[i]之外的a的元素没有依赖性,所以,每次循环的i可以使独立的完成的,像这L状态就是work-sharing的。还有例如规U, 虽然s的计与i相关Q但是细想一下,加法在数学上市满交换律的,s的每ơ加a[i]实际上不相关的,你不以什么顺序加和a[i]到sQ解l果L一L。所以规U也可以理解为是worksharing 的。就说这么多吧。如果大家有什么问题,Ƣ迎l我留言奥?br /> 下面是官方的中文|站?/p>http://www.caps-entreprise.com.cn/many-core/product-hmpp-v3-1.html
]]>
]]>
引言Q?/p>
for (i=0; i<n;i++)
{
dosomething(i);
}
for (i=0; i<n;i++)
{
dosomething(i);
}
q样Q编译器拿到加了OpenACC指o的那D代码后Q就会把你的循环攑ֈGPU或者其他硬件加速器Q例如MICQ上。编译器分析?pragma acc kernels下面的那个@环,׃Ҏ循环的次数来分配U程数量Q这个过E就叫网格化。ؓ什么说是网格化呢?可以q样理解Q因为GPU可以启动很多U程Q这些线E就像一张渔|一P可以认ؓ一个网g表一个线E,所以我干脆叫q个q程?#8220;|格?#8221;了?
for (i=0; i<n; i++)
{
a[i] = i;
}
s = 0;
for (i=0; i<n; i++)
{
s+=a[i];
}
]]>

在西雅图计算大会QSC11Q上发布了新的基于指令的加速器q行~程标准Q既OpenACC?u>q个开发标准的目的是让更多的编Eh员可以用到GPU计算Q同时计结果可以跨加速器使用Q甚臌用在多核CPU?/strong>?/font>
Z显而易见的原因QNVIDIA在大力推q和支持OpenACC。但事实上PGI和Cray才是最早推动这Ҏ术商业化的公司。PGI已经推出了一l非常类似的加速器指oQ目前也成ؓ了OpenACC标准的基部分之一。Cray公司正在开发自qOpenACC~译器,q且他的XK6客户如橡树岭国家实验室和瑞士国家计算Z心,预计成技术的W一批超U计机用户?/font>
而言之,OpenACC指o与OpenMP指o工作方式很类|但前者特别适用于高度数据ƈ行代码。它们可插入标准的CQC + +和FortranE序直接指导~译器进行某些代码段的ƈ行。编译器会特别注意数据在CPU和GPUQ或其他Q之间来回{Uȝ逻辑关系Qƈ计映到适当的处理器上?/font>
q样Q开发h员就可以在现存的或者新的代码上做相对小的改动以标示出加速ƈ行区域。由于指令设计适用于一个通用q行处理器,q样相同的代码可以运行在多核CPU、GPU或Q何编译器支持的其他类型的q行g上。这U硬件的独立性对于HPC的用h说特别重要,因ؓ他们不愿意接受U受供应商限制的Q非便携式编E环境?/font>
站在NVIDIA的角度,目标是GPU计算带入后CUDA时代?/strong>今天QCUDA C和CUDA Fortranq泛用于GPU~程。但是这个底层技术属于NVIDIAQ对于GPU计算提供了一个相对低阶的软g模型Q因此想较于对一般编Eh员或者研Ih员,CUDA的用对于计科学类型而言受限制程度越来越明显?
受NVIDIA、AMD{支持的OpenCL同样也提供了GPU和其他加速器的ƈ行编E框架。与CUDA不一L是,OpenCL是个真正开攄标准?但与CUDA怼的是QOpenCL相对底层Q需要对目标处理器的内部l构有一定了解?u>因此与CUDA一P使用OpenCL对于计算机科学家来说有很大的局限性?/strong>
NVIDIA公司估计q个星球上有过10万的CUDAE序员和比较多的的OpenCL开发h员,但他们也意识到如果能够GPU~程更加开放且开发界面更加友好,׃有一个更大的潜在观众。从本质上讲Q他们认为OpenACC能够被C百万计的U学家和研究人员使用Q这些h不需要关心和涉处理器架构,也不需要关心芯片与芯片之间通信?/font>
NVIDIA的Tesla业务部门的首席技术官Steve Scottȝ了OpenACC目标Q?#8220;我们实惛_q一点上做到大幅提高适用性和Z利用GPU的广度和深度?#8221;
Scott表示作ؓ高层OpenACC不会影响执行性能。这来自于他以前在Cray公司做首席技术官的经验,他遇CZ加速器的指令代码只比手工CUDA~码的性能?Q到10Q而已。据他介l,q是相当典型的。Scott_有些应用E序甚至做的比他们用CUDA~程要好Q这受益于编译器在对某些代码q行优化的能力超了凡h。在M情况下,OpenACC的目的是要利用CUDAq行互操作,因此如果需要的话,可以手工调整内核Qƈ与指令代码做无缝q接?/font>
除了PGI和Cray公司Q法国的多核软g工具的开发者CAPS公司Q也{v了协议支持新的指令。这三家厂商预计?012q上半年推出支持OpenACC的编译器。值得注意的是OpenACC支持者列表中~少了英特尔和AMDQ不q这也不会阻止PGI、CAPS或者Cray建立支持q和AMDg的OpenACC~译器?/font>
PGI和NVIDIA目前向开发h员推Z30天免费试用PGI的加速指令编译器。活动宣传说可以在四周之内将应用性能d。上百位研究人员已经注册了申误用,
不过对于OpenACC的支持者来说真正终l这场游戏的是将指oU_到OpenMP标准。因为OpenACC的一部分工作来源于OpenMPQ所以就意味着qg事情发生的可能性很高,不过目前没有旉表,但最有可能结合的旉是在2012q某时OpenMP 4.0发布的时候?
]]>