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

对于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。

原文发布于微信公众号 - 吉浦迅科技(gpusolution)

原文发表时间:2018-02-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

【UE4+Vive】学习笔记1

16.9.10 为了做房产项目,这两天开始学习Unreal Engine 4。之前一直用unity,但是视觉效果一直不满意,听说虚幻4的效果更好,就来试一试水。...

38190
来自专栏码字搬砖

JVM内存模型

先磨磨肩擦擦掌,小二很早就听说jvm的内存很是奇特,今日一看果然不同凡响。下面且听小二一一道来。

27650
来自专栏PPV课数据科学社区

使用cProfile等工具来提高python的执行速度

摘要: 众所周知,python相较于其它语言速度较慢,但是我们可以通过优化的方法来提升效率。 本文假定你已经十分熟悉Python。 众所周知,Python是一种...

32370
来自专栏生信技能树

用GenePred注释文件进行数据分析

编者注:前几天在生信技能树我们发现了一个神奇的帖子(http://www.biotrainee.com/thread-928-1-1.html ), 作者用一种...

646140
来自专栏Crossin的编程教室

【每周一坑】数路径

加入教室的新同学看这里 ☞ 给新同学:编程教室资源索引 另外一些书籍推荐 ☞ 几个以前发过、回复过很多次、比较有用的学习资源 代码方面的问题,欢迎大家在论坛上发...

33780
来自专栏祝威廉

Spark Sort Based Shuffle内存分析

目前Sort Based Shuffle 是作为默认Shuffle类型的。Shuffle 是一个很复杂的过程,任何一个环节都足够写一篇文章。所以这里,我尝试换个...

20130
来自专栏牛客网

C++后台腾讯WXG实习面经(已拿offer)

22250
来自专栏FreeBuf

逆向华为路由器第三部分

引文 在前面两个部分(1,2)已经介绍了UART,BusyBox等部分的逆向调试,而这篇将会开始在流量分析方面下手,来逆向出更多的信息。 正文 请看下图,数据存...

21280
来自专栏WeTest质量开放平台团队的专栏

[分享干货晒技术]Unity 手游内存优化分享

Mono下的foreach使用需谨慎。频繁调用容易触及堆上限,导致GC过早触发,出现卡顿现象。

46820
来自专栏LET

CPU Cache简介

真空中光速为299,792,458米/秒,目前,Intel的i7频率可以达到4GHz,简单换算一下,可以得出结论:光(电流)在一个Cycle内移动的距离约为0....

24720

扫码关注云+社区

领取腾讯云代金券