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

简介: 本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第2章,第2.6节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.6 小结

OpenACC是一种描述型并行编程模型。在本章中,通过一个测试函数的应用,使用了OpenACC的多种特性来描述并行度和数据操控,并针对特定平台对代码进行了优化。尽管使用的是PGI编译器和PGProf性能调试器,但类似的优化流程也是适用于任何支持OpenACC工具包的应用的。
1.获得应用程序的性能分析结果,辨识和挖掘代码中的可并行之处。
2.逐步向编译器描述代码中可挖掘出的并行性。如果主机端和设备端使用各自的存储器,这一步骤后获得的代码很可能会减速。
3.描述应用程序的数据移动。编译器通常关注于数据移动等细节并确保正确性,但开发者具有更广的视野并真正了解哪些数据是在多个包含OpenACC区域的子函数中共享的。数据和数据移动的描述完毕后,在分离式存储架构的加速器上会获得极大的性能提升。
4.最后,利用读者对应用程序和目标加速器架构的深入了解对循环进行优化。积少成多的不断优化和不懈努力可能会使得编译器对循环达到更为深入的解析,获取更大的性能提升。
图2-32展示了最终的并行程序性能,这是针对每一步优化产生的结果,与原始串行程序相比,注意到最终代码获得了4倍的加速效果,多核版本获得了接近2.5倍的加速效果。尽管在优化过程中,代码可能会减速,从中可以明显看到为什么某些优化反而导致了性能衰减,以及经过进一步改进后获得的性能提升。最终成果是一套代码,可用于各种类型的设备,还对一个特定架构的设备进行了针对性优化,且不会对其架构的代码产生不良影响。一言以蔽之,这便是OpenACC编程,即向编译器提供充足信息,以使代码能够有效地运行于任意现代处理机上。

screenshot

相关文章
|
Java
java servlet 文件上传 req.getPart null 返回空值
java servlet 文件上传 req.getPart null 返回空值
284 0
|
机器学习/深度学习 人工智能 运维
智能化运维:AI在故障预测与自愈系统中的应用
【6月更文挑战第13天】本文探讨了人工智能技术在现代IT运维领域的应用,着重分析了AI如何通过数据分析和机器学习算法实现故障预测和自动化修复。文章将揭示智能运维系统的工作机制,以及它如何帮助企业减少停机时间,提高服务稳定性,并最终推动业务连续性和增长。
|
人工智能 数据安全/隐私保护
如何实现AI检测与反检测原理
AI检测器用于识别AI生成的文本,如ChatGPT,通过困惑度和爆发性指标评估文本。低困惑度和低爆发性可能指示AI创作。OpenAI正研发AI文本水印系统,但尚处早期阶段。现有检测器对长文本较准确,但非100%可靠,最高准确率约84%。工具如AIUNDETECT和AI Humanizer提供AI检测解决方案,适用于学生、研究人员和内容创作者。
|
缓存 网络协议 安全
tcp、http、rpc和grpc得一些个人总结
tcp、http、rpc和grpc得一些个人总结
722 0
|
JavaScript jenkins Java
Jenkinsfile 脚本放置源码仓库
Jenkinsfile 脚本放置源码仓库
274 0
|
机器学习/深度学习 消息中间件 数据安全/隐私保护
|
Kubernetes Unix API
k8s搭建 遇到的问题
k8s搭建 遇到的问题
1054 0
|
开发框架 安全 Linux
龙蜥社区联合浪潮信息发布《eBPF技术实践白皮书》(附下载链接)
该白皮书主要介绍了 eBPF 技术原理、常见开发框架,并分享 eBPF 技术在系统诊断、网络性能优化、主机安全等场景的应用实践和成果。
|
人工智能 监控 安全
阿里云数字化安全生产平台 DPS V1.0 正式发布!
数字化安全生产平台则帮助客户促进业务与 IT 的全面协同,从业务集中监控、业务流程管理、应急指挥响应等多维度来帮助客户建立完善专业的业务连续性保障体系。
阿里云数字化安全生产平台 DPS V1.0 正式发布!
|
存储 缓存 小程序
如何实现游戏中的在线计时器和离线计时器
本文包含了游戏中两种计时器的实现原理和实现方法,皆在帮助你彻底的搞懂游戏开发中的计时器。 如果你没有任何的游戏开发经验,欢迎观看我的“人人都能做游戏”系列视频教程,它会手把手的教你做出自己的第一个小游戏。 在游戏中经常会有需要倒计时的需求,例如倒计时 10 分钟可以获得 1 点体力,倒计时 1 小时后可以开启一个宝箱,或者是根据游戏的计时获得奖励等等。
570 0