- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5小时加速5倍利用PGI加速器模型移植SEISMIC_.docx
5小时加速5倍 利用PGI加速器模型移植 SEISMIC_CPMLFebruary 2012
®
C99、C++、F2003编译器
优化
向量化
并行化
图形界面并行工具
PGDBG®调试器
PGPROF®分析器
英特尔(Intel)、超威(AMD)、英伟达(NVIDIA)
PGI Unified Binary™
Linux、MacOS、Windows
Visual Studio集成
GPGPU的功能
CUDA Fortran/C/C++
PGI Accelerator™
CUDA-x86
PGI 编译器
具备 CUDA Fortran 的扩展内容的完整版Fortran 2003
具备所有的PGI功能和优化特点的GNU兼容的 C++
针对64位多核处理器的完整版 CUDA C/C++ 编译器
适用于 Intel 和 AMD CPU的AVX SIMD向量化
IPA 优化可实现改进型自a动并行化
用于F2003和C99的完整版 v1.3 PGI 加速器编程模型
用于F2003和C99的OpenACC 1.0 (12.3 测试版,12.6 版产品)
异步数据传输和内核启动
PGI 工具
在本地机器上用 PGDBG GUI 进行远程集群调试
在Linux下PGI C/C++ 编译器的Eclipse 集成
PGI Unified Binary
支持在 Intel 和 AMD 的 CPU 以及 NVIDIA 的GPU上运行
简化了向新型 AVX 驱动式 CPU 的过渡
PGI 2012 发布版的新功能与更新内容
main() {
…
serial code
…
#pragma acc region
{
compute intensive code
}
…
CPU
GPU
典型的并行代码
指令语
PGI加速器指令语
实现Fortran 和 C 大规模并行应用程序在NVIDIA GPU上运行的捷径
优势?
容易上手、循序渐进
单一源代码树和适用于 CPU和GPU的二进制
编译器处理所有簿记细节
小投入 大影响
大石油公司
Jorge Pita 博士
7天加速3倍
在全球最大的油气藏解决了数以亿计的石油勘探方程迭代
休斯顿大学
Kayali 教授
2天加速20倍
在多个领域(如存储、记忆和生物感测)分析静磁感应以实现创新
乌法国立航空技术大学
Arthur Yuldashev 教授
4天加速7倍
以钻孔数据随机生成油田储层的地质模型
墨尔本大学
Black 教授
2天加速60倍
借助于研究菲利普港湾鲷鱼的生命周期,更加深入地认识各种复杂因素
GAMESS-UK
Karl Wilkinson 教授
加速10倍
可在各个领域中应用,如研究生物燃料生产和分子传感器。
用PGI加速器指令语的典型移植过程
64位多核处理器 + NVIDIA GPU构架
下面我们来看一个简单的例子……
for (iter = 1; iter = niters; ++iter){
#pragma acc region
{
for (i = 1; i n-1; ++i){
for (j = 1; j m-1; ++j){
a[i][j]=w0*b[i][j]+
w1*(b[i-1][j]+b[i+1][j]+ b[i][j-1]+b[i][j+1])+
w2*(b[i-1][j-1]+b[i-1][j+1]+ b[i+1][j-1]+b[i+1][j+1]);
} }
for( i = 1; i n-1; ++i )
for( j = 1; j m-1; ++j )
b[i][j] = a[i][j];
}
}
S2(B)
S2(B)
S1(B)
S1(B)
S2(B)
S1(B)
S2(B)
A
A
B
B
S1(B)
S1(B)
PGI加速器计算区域
主存储器
GPU 存储器
#pragma acc data region \
copy(b[0:n-1][0:m-1]) \ local(a[0:n-1][0:m-1])
{
for (iter = 1; iter = p; ++iter){
#pragma acc region
{
for (i = 1; i n-1; ++i){
for (j = 1; j m-1; ++j){
a[i][j]=w0*b[i][j]+
w1*(
文档评论(0)