首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PGI OpenACC 2018版:原来你是这样的编译器

PGI OpenACC 2018版:原来你是这样的编译器

作者头像
GPUS Lady
发布2018-04-02 15:42:24
3.2K0
发布2018-04-02 15:42:24
举报
文章被收录于专栏:GPUS开发者GPUS开发者

对于CUDA Fortran用户来说,PGI编译器是必然要用到的。

其实PGI编译器不仅仅可以支持Fortran,还可以支持C/C++。而对于集群用户来说,要将上万行的代码加速移植到GPU集群上,PGI编译器绝对是把利器!

PGI编译器已经全面支持OpenACC(NVIDIA发布全新OpenACC工具套件)。实际上Lady姐认为到目前为止,PGI由于有了NVIDIA加持(NVIDIA多年前就收购了PGI),也是目前支持OpenACC最好的编译器。

什么是OpenACC?这里有一个NVIDIA视频,可以让你比较全面地了解OpenACC编程模型:

视频内容

PGI 2018年版本编译器的功能已经发布,Lady我觉得很强大哇!


利用Tesla V100来加速您的高性能应用

PGI OpenACC和CUDA Fortran现在支持在Tesla Volta GPU卡上运行CUDA9.1。Tesla V100提供了更多的内存贷款和更多的流媒体多处理器,还有一下呆NVLINk和新的微架构特性。这些特性可以提供更高的性能和可编程性。对于OpenACC和CUDA Fortran程序员来说,Tesla V100提供了革命性的硬件支持和性能,比如在X86-64和OpenPower 处理器平台上支持CUDA同一内存特性。有了PGI2018编译器,你可以获得上佳计算性能——更好的CPU性能加上更全面的GPU支持。

支持最新的cpu

多核CPU性能仍然是PGI编译器的主要优势之一,它现在支持包括Intel Skylake、IBM POWER9和AMD Zen在内的最新一代HPC CPU。PGI Fortran 2003, C11和c++ 14编译器提供了最先进的SIMD矢量化,并受益于Linux x86、Linux OpenPOWER和macOS上的新优化的单和双精度数值内部函数。有关PGI 2018性能的基准部分,请参阅各种HPC行业标准基准测试结果。

全面支持OpenACC2.6

现在所有的PGI编译器现在都支持Tesla gpu和多核cpu上的最新OpenACC特性。新的OpenACC 2.6特性包括手动的深度复制指令、串行计算构造、在host_data构造中的if_present子句、no_create数据子句、attach/detach子句、acc_get_property API例程,以及对Fortran可选参数的改进支持。添加或增强的其他OpenACC特性包括缓存指令改进和Fortran模块中命名常量数组的支持。

支持CUDA统一内存的OpenACC

PGI编译器利用Pascal和Volta GPU硬件特性、NVLink和CUDA统一内存来简化在GPU加速平台x86-64和基于OpenPOWER处理器的服务器上的OpenACC编程。当在CUDA统一内存中放置OpenACC allocatable数据时,不需要显式数据移动或数据指令。这简化了广泛使用allocatable数据的应用程序的GPU加速,让你专注在算法的并行化和可伸缩性。

支持avx – 512

与上一代AVX2 SIMD指令相比,最新一代Skylake CPU上可用的Intel AVX-512 CPU指令能使浮点运算次数增加一倍。在512位宽的情况下,AVX-512可以同时增加寄存器的宽度和寄存器的总数,并且可以帮助提高HPC应用程序的性能。

新的c++ 17特性

在发布的2018版本里,PGI c++编译器在编译c++17或- std=c++17时,引入了对c++17标准的部分支持。支持的c++ 17核心语言特性可以在所有支持的macOS版本和支持GCC 5及以上版本的Linux系统上使用。新的c++语言特性包括编译时条件语句(if)、结构化绑定、带有初始化器的选择语句、折叠表达式、内联变量、constexpr lambdas等。

PGI针对Tesla和多核处理器的Unified Binary功能

使用OpenACC构建应用程序可以在GPU上加速,也可以在一个多核服务器上让所有的内核并行处理,即当您在有GPU的系统上运行应用程序时,OpenACC区域将卸载并在GPU上执行。当同一个应用程序在没有gpu的系统上运行时,OpenACC区域将在系统的所有CPU内核中并行执行。如果您开发商业或生产应用程序,现在您可以使用OpenACC加速您的代码,并在任何系统上部署单个二进制文件,无论是否使用gpu。

在OpenACC区域中使用C++14 Lambdas with Capture

c++ lambda表达式提供了一种方便的方法,可以在调用或传递参数的位置定义匿名函数对象。自动类型说明符可以应用于lambda参数,以创建一个多态的lambda表达式。使用PGI编译器,您可以在您的c++程序中的OpenACC计算区域使用lambdas。使用OpenACC的lambdas有多种原因。一个例子是将代码生成定制到不同的编程模型或平台。c++ 14为越来越多的lambda用例打开了大门,特别是对于多态的lambdas,所有这些功能现在都可以在OpenACC程序中使用了。

LLVM / x86 - 64代码生成器

2018年发行版包括一个用于x86-64的LLVM代码生成器,完全集成了PGI Fortran、C和c++编译器,包括对OpenACC和CUDA Fortran的支持。这个初始版本引入了对OpenMP 4.5特性的支持,目标是多核x86-64 cpu,并在许多c++应用程序上提供性能改进。作为PGI Linux安装包的一部分,LLVM组件与默认的PGI编译器一起安装,并使用一个简单的命令行选项进行调用。

增强分析的特性

新的CPU Detail View可以显示CPU上每个线程所花费的一个断点时间。 Three call tree选项允许您基于caller、callee或者每文件和行号来分析。可以查看所有线程在一起或单独的时间,查看快速排序事件的最小或最大时间等等。其它新特性包括用一个选项来调整程序计数器采样频率,以及可以显示NVLink拓扑的NVlink版本等。


目前PGI有提供免费的社区版本(Windows Visual用户需要购买专业版本),单机用户可以下载社区版本(点击阅读原文可以访问下载链接),集群用户需要购买专业版本(可以联系我们)。

注意:目前社区版本的只提供PGI 17.10。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档