《OpenACC并行程序设计:性能优化实践指南》一 2.5 在多核系统中并行运行

2.5 在多核系统中并行运行

尽管本章使用了NVIDIA GPU,但OpenACC不是一个GPU编程模型,而是一种普遍适用的并行编程模型。尽管在2.4节中使用的循环优化技术仅适用于GPU,关于并行度和数据移动的技术手段适用于任意并行架构设备。本章使用的PGI编译器支持多种目标加速器,包括NVIDIA和AMD公司的GPU,以及多核x86 CPU。如果在多核CPU上开发和运行代码,将会发生什么呢?为多核目标平台重新编译代码,而不是将目标设定为tesla(见图2-29和图2-30)。

如果运行可执行程序,它将在测试机的多核CPU上并行化各循环,而不是在GPU上运行了。通过设定ACC_NUM_CORES环境变量可以用来调整参与并行计算的CPU的核心数目。图2-31展示了调整核心数目后的加速比情况,该机器具有的最大核心数目是12。性能在使用超过4个CPU核之后保持稳定,这是因为测试程序的性能主要受制于CPU带宽。

时间: 2024-09-16 21:52:53

《OpenACC并行程序设计:性能优化实践指南》一 2.5 在多核系统中并行运行的相关文章

《OpenACC并行程序设计:性能优化实践指南》一 3.6 第一个并行PIConGPU实现

3.6 第一个并行PIConGPU实现 下一步,用Vampir打开追踪文件trace.otf2,如图3-8所示.追踪缩略图(右上角)显示只选择了整个程序执行的0.2s,并且重复模式显示了模拟的大概2.5个迭代步骤.中间用颜色编码的活动是主时间轴,它显示了MPI.主机进程(进程1-4)和相应的CUDA上下文(线程1/1-4).右下角的图例显示了颜色的含义.进程之间的黑线代表MPI消息.进程和线程之间的黑线代表CUDA内存拷贝.可以看出,MPI活动占据了大部分的程序执行时间,而CUDA活动所占时间很

《OpenACC并行程序设计:性能优化实践指南》一 导读

前言 欢迎阅读本书,这是一本由浅入深的书籍,从初学者到高级开发人员,都可以通过本书了解OpenACC的相关知识.本书由世界各地的24位作者共同编著而成,他们在高度并行编程的教学和实践方面分享了自己的专业知识.书中的例子既有时效性又不会过时.每个章节都是自包含的,可用于自学,也可以作为课堂教学的一部分. 这是一本关于并行编程的书,不仅仅介绍OpenACC语法或从文档中收集的信息,更介绍了如何编写实际的.高性能的以及可移植的程序,这些程序可以运行在从CPU到GPU的大量设备上.具体而言,书中演示了使

《OpenACC并行程序设计:性能优化实践指南》一 1.1 简单的数据并行循环

1.1 简单的数据并行循环 在顺序处理器程序设计中,需要编写计算某个最终结果所需要的任务和数据操作的程序.通过创建OpenACC,编程人员可以插入编译指令给编译器提供信息,而这些编译指令是关于并行机会和数据在加速器与主机间来回传输的信息.结合编译器,程序员使用注记来创建.调试和优化并行代码,使得程序达到高性能. OpenACC帮助程序员编写高效的数据和任务并行软件. 数据并行关注跨多个并发执行线程的分布式数据操作.在计算机科学中,线程是串行执行一段代码的线程的缩写.通过使用多个线程,应用程序可以

《OpenACC并行程序设计:性能优化实践指南》一 1.3 Amdahl定律及其扩展

1.3 Amdahl定律及其扩展 绘制任务运行时间,可以看到并行增加应用程序的扩展行为.并行计算的理论性能:运行在有N个处理单元的并行计算机上,理论上可以获得N倍加速.换一句话说,一个程序运行在10核处理器上可能获得10倍加速(对于固定大小的问题),在支持1000个并发执行线程的GPU上获得1000倍加速.开发人员依据Amdahl定律来讨论并行与串行间的加速比. 用计算机架构师Gene Amdahl来命名Amdahl定律.它不是实际上的定律,但是修改串行程序使其并行执行时,它相当接近模型理论加速

《OpenACC并行程序设计:性能优化实践指南》一 1.4 并行执行和竞争条件

1.4 并行执行和竞争条件 OpenACC并行化for循环(Fortran中是do循环),因此循环内的代码使用并发硬件执行线程并行执行. 循环内的变量i似乎是顺序递增的,但实际上在这个for循环中使用多个i变量的线程可能同时并行执行,这可能有点令人困惑.OpenACC不保证线程执行的顺序,注意这点非常重要.实际上,甚至不可能假设单调性.例如,很有可能第nCount―1次迭代实际上先于第0次迭代执行完. OpenACC不保证线程执行的顺序,注意这点非常重要. 总之,OpenACC编程人员不能也不应

《OpenACC并行程序设计:性能优化实践指南》一 2.6 小结

2.6 小结 OpenACC是一种描述型并行编程模型.在本章中,通过一个测试函数的应用,使用了OpenACC的多种特性来描述并行度和数据操控,并针对特定平台对代码进行了优化.尽管使用的是PGI编译器和PGProf性能调试器,但类似的优化流程也是适用于任何支持OpenACC工具包的应用的. 1.获得应用程序的性能分析结果,辨识和挖掘代码中的可并行之处. 2.逐步向编译器描述代码中可挖掘出的并行性.如果主机端和设备端使用各自的存储器,这一步骤后获得的代码很可能会减速. 3.描述应用程序的数据移动.编

《OpenACC并行程序设计:性能优化实践指南》一 2.4 优化循环

2.4 优化循环 此刻,测试代码可以比原始代码加速2倍了.但这是能够获得的性能最好的代码吗?目前添加的导语可以在任何加速器上实现代码的提速,但为了在特定的测试机器上取得最佳性能,需要使用特定目标设备优化技术.万幸的是,OpenACC提供了一种指定devcie_type的优化手段,因此特定的子句仅在编译为指定设备的代码时才会生效.首先从分析目前代码的编译器反馈信息着手,针对matvec子程序,因为它是最为耗时的代码段(见图2-22). 编译器提供了它如何并行化两个矩阵循环(第30和24行)的信息.

《OpenACC并行程序设计:性能优化实践指南》一 1.6 控制并行资源

1.6 控制并行资源 accParaCounter.cpp中的嵌套循环结构可以用来控制循环并行性,因此可以控制并行资源消耗. 大多数并行编程人员遵循在系统中利用最大并行性来实现最高性能的方法. 大量线程背后的思路是给予并行调度器尽可能多的线程以供调度,从而最大化地利用所有计算资源.GPU编程人员喜欢用占有率(occupancy)作为线程并行度的度量.高占有率意味着调度器有更多的激活线程以供调用,因此有机会实现更高性能. 高占有率并不一定转为最快的应用性能.指令级并行(Instruction le

《OpenACC并行程序设计:性能优化实践指南》一 2.1 测试代码:共轭梯度法

2.1 测试代码:共轭梯度法 本章中使用共轭梯度法作为标准测试代码.共轭梯度法是一种迭代算法,常用来逼近一组线性方程组成的大型稀疏系统.由于这种系统通常规模庞大,因此难于使用直接法进行求解.阅读本章不需要理解共轭梯度法的数学含义.提供了共轭梯度法的C和Fortran编码实现供读者参考.简洁起见,本章仅展示了C代码.不过不必担心,C代码的应用方式可以扩展到Fortran代码,两者区别不大.本章使用的代码遵循Apache许可,版本2.0.详情请阅读许可文件. 示例代码包含两种数据结构.第一个是向量结