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

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

3.6 第一个并行PIConGPU实现

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

screenshot

通过图3-8左上方的工具栏图标选择Vampir要显示的性能数据。有两组显示方式,时间轴显示和统计显示。“时间轴显示”展示沿着水平方向随着时间演化的活动,本例中的主时间轴显示了颜色编码的所有事件流活动(可以是进程、线程或CUDA流)。
默认情况下,颜色代码基于图3-8右下方的功能图例中所示的功能组。对一个事件流,进程时间轴显示调用上下文的时间。计数器时间轴显示与事件流相关联的性能计数器的值。例如,这个值可以是PAPI计数器,也可以是诸如内存分配之类的派生计数器,或者使用Vampir度量编译器创建的任何东西。性能监视器显示所有事件流的时间上下文计数器。
第二种组显示包含表示各种分析数据的统计显示。函数摘要实现函数或函数组之间的运行时间或调用次数的分布。信息摘要提供所有数据传输的统计(主机与设备或MPI进程间数据传输)。其他是进程摘要,例如信息度量、I/O摘要和调用关系。Vampir特性详细说明可以在手册里找到。
Vampir区别于其他标准分析工具的最重要特性,是可以在程序执行时间轴上以任意时间间隔放大。如图3-8右上方缩略视图所示的轨迹摘要(所选间隔由两条黑色条表示)。包含统计信息的所有显示一直会被更新到当前显示的时间间隔。因此,Vampir可以对应程序的任何阶段和极高时间分辨率进行应用程序分析。通过右键单击显示来配置Vampir如何显示信息。左键单击显示中的任何东西都会出现上下文视图,将会显示所选项目的详细信息(包含开始/结束时间、持续时间、函数名称、文件名、行号、消息大小等)。
图3-8所示的追踪文件记录了第一次尝试使用MPI并行化单GPU PIConGPU代码以增加模拟面积(弱扩展)运行的结果。追踪显示了首次并行尝试的常见问题:顺序任务执行。这种情况下,可以看到MPI活动和CUDA存储器拷贝占据主机执行时间,而GPU使用率相当低。
MPI活动占据很多时间的原因是用了很长时间传递相当小的消息(可以使用消息摘要来分析)。这也说明在GPU上PIConGPU计算时间很快,不能隐藏MPI传输时间。为了减少传输时间,唯一的方案就是传输延时。这种情况下,用Inifinband网络替换集群中的1GB以太网可提供了更快的MPI通信。
另一个问题是相当长的时间用于同步GPU与主机间的数据拷贝(在设备上启动一组内核之前主机进程右边的条)。对于这种情况,计算和数据传输更好地重叠交织将增加总吞吐量。GPU利用率低本身不是问题,而是主机影响不能为GPU提供足够的计算量,因此GPU大部分时间在等待数据。

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
12月前
|
存储 人工智能 算法
AR眼镜赋能职业技术教育,助力老师和学生传递知识​
本方案融合AR与AI技术,通过AR眼镜实现虚拟指导叠加现实场景,结合AI动作识别与物体检测,提供分步引导、实时纠错、自动考核等功能,提升职业培训效率与公平性,适用于机械、医护、电工等多领域,降低错误率,缩短培训周期。
|
数据采集 JavaScript 前端开发
“所见即所爬”:使用Pyppeteer无头浏览器抓取动态壁纸
“所见即所爬”:使用Pyppeteer无头浏览器抓取动态壁纸
|
缓存 前端开发 API
登录校验---Filter过滤器
Filter是JavaWeb三大组件之一,用于拦截请求并实现登录校验、编码处理等功能。通过`doFilter()`方法实现过滤逻辑,支持配置拦截路径与过滤器链。常用于JWT令牌验证、跨域处理等场景。
643 10
登录校验---Filter过滤器
|
SQL 运维 算法
链路诊断最佳实践:1 分钟定位错慢根因
本文聚焦于线上应用的风险管理,特别是针对“错”(程序运行不符合预期)和“慢”(性能低下或响应迟缓)两大类问题,提出了一个系统化的根因诊断方案。
1457 103
|
自然语言处理 安全 API
MCP:让大语言模型不只是聊天,更能"动手做事"的开放协议
MCP(Model Context Protocol,模型上下文协议)是一种开放协议,旨在标准化应用程序向大语言模型提供上下文的方式。通过 MCP,大模型不仅能聊天,还能执行如查数据库、写代码等任务。相比 Function Calling,MCP 解耦了工具调用,提升灵活性和复用性,实现“一次开发,多处调用”。其架构包括 MCP Hosts、Clients、Servers,以及本地数据源和远程服务,支持安全访问多种资源。相关资源可在 GitHub 和 mcp.so 获取。
2088 3
MCP:让大语言模型不只是聊天,更能"动手做事"的开放协议
|
Web App开发 编解码 算法
布谷一对一直播源码开发:阿里云视频语音通话社交交友App的必备功能
在当今移动社交领域,一对一视频和语音通话功能已成为用户期待的基础配置。从熟人社交到陌生人交友,从专业咨询到情感陪伴,实时音视频互动能力直接决定了社交App的用户留存和市场竞争力。山东布谷科技将深入探讨一对一直播源码开发高质量一对一视频和语音通话功能的关键要素和技术实现方案。
布谷一对一直播源码开发:阿里云视频语音通话社交交友App的必备功能
|
安全 图形学
Unity射线检测的“坑”
在 Unity 中,射线检测是常用功能,但也存在一些常见问题。首先是层(Layer)设置问题,如射线忽略某些层或误检测到不期望的层,需正确设置 LayerMask。其次是碰撞体相关问题,包括碰撞体未启用或类型不匹配,确保碰撞体启用并合理设置属性。再者是射线起始点和方向问题,错误的位置或方向计算会导致检测失败,需准确设置起始点和方向。此外,频繁进行射线检测或检测范围过大会影响性能,应减少检测次数并合理设置范围。最后,在多线程中进行射线检测可能导致错误,应避免在非主线程中直接调用射线检测。
003 Qt_信号和槽-上
本文介绍了Qt中的信号与槽机制,包括信号和槽的概念、本质及连接方法,并演示了如何自定义槽函数。信号是事件的体现,槽是对信号的响应函数。通过信号与槽,可以将独立的控件关联起来,实现复杂的交互逻辑。文中还详细展示了如何在Qt项目中定义和使用槽函数,通过实例代码和图形化界面操作,帮助读者更好地理解和应用这一机制。
003 Qt_信号和槽-上
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
1929 3