《并行计算的编程模型》一2.6.3 AM Ping-Pong示例

简介: 本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.6.3节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.6.3 AM Ping-Pong示例

虽然“Hello,World!”示例已经演示了每个GASNet应用程序开始结束所需的基础内容,但是除了屏障中隐含的内容外,该示例没有执行任何通信。因此,接下来我们展示了一个简单的使用GASNet的AM在节点对间执行“Ping-Pong”通信的例子。
screenshot

screenshot

该示例的第一部分如代码清单2-2所示,表示的是必需的AM处理程序。该代码在“Hello,World!”示例的框架中替换了第19行。此例中包括两个AM处理程序,其中每个AM处理程序都需要一个带单个参数的Short AM。“Ping”处理程序在响应AM请求时运行且只执行以下两个操作:打印带参的消息和发出AM Reply以调用参数相同的“Pong”处理程序。“Pong”处理程序主要负责打印不同的消息并递增计数器值。其中计数器通过使用GASNet工具的原子增量实现,以确保线程安全(计数器也是从main()中读取)。或者也可以使用pong_counter++,但需要HSL的保护。
本例的第二部分是main()函数逻辑,如代码清单2-3所示。在“Hello,World!”示例的框架中,该代码可以替换第32~34行。其中第3行的代码默认为2次迭代,但如果提供其他数字,它将从命令行中获取备选值。第6~7行的代码主要用于节点配对(0和1、2和3等),若节点数为奇数,那么将在最后一个节点上自身配对。示例的核心代码从第10行开始。每个节点对中编号较小的节点进行循环计数(count)迭代,并向另一个节点发送AM Request,然后阻塞直到对方的AM Reply增加了pong_count原子变量值。与此同时,节点对中编号较大的节点不在main()中执行相关工作,且在第20~21行调用屏障函数。节点对中的双方都必须运行AM才能保证示例正确执行。因此,偶数节点通过使用GASNET_BLOCKUNTIL等待“Pong”非常重要。如果代码改为如下的方式,则没有异步进程线程的GASNet实现将会产生死锁。
screenshot

如果在没有附加命令行参数的3个节点上运行上述示例,输出结果如下所示。三个节点的输出结果按照时间顺序交织在一起打印到屏幕上。
screenshot

相关文章
|
C语言 Perl 存储
优化求解器之MPS文件的格式简介
在使用MindOpt优化求解器解决实际问题时,其中重要的一环在于如何建立优化模型,以及存储优化模型以便于作为求解器的输入文件。存储优化模型的文件,其关键在于定义一种清晰的格式,用来说明优化模型的数学结构和相关的数据。接下来我们将发布一系列文章,对常见的MPS/LP等格式的模型文件和命名规范进行简要的介绍。
优化求解器之MPS文件的格式简介
|
存储 Rust 自然语言处理
C代码演示WebAssembly工作流程
【2月更文挑战第3天】 工作流程: * C 代码使用 Emssripten 工具编译为 wasm 后缀的二进制文件,同时可以生成访问wasm的js胶水代码和html代码 * wasm后缀的二进制格式文件的文本表示方式为后缀为wat格式的文本文件,方便在编辑器和浏览器开发者工具中查看 * 可以使用wabt工具将wat格式的文本文件直接打包成wasm的二进制文件 * 使用WebAssemblyJavascriptAPI发起对wasm的调用 * 编写胶水代码 * 使用fetch/xhr获取wasm * 借助胶水代码访问wasm中的函数
698 0
|
机器学习/深度学习 人工智能 数据可视化
生成AI的两大范式:扩散模型与Flow Matching的理论基础与技术比较
本文系统对比了扩散模型与Flow Matching两种生成模型技术。扩散模型通过逐步添加噪声再逆转过程生成数据,类比为沙堡的侵蚀与重建;Flow Matching构建分布间连续路径的速度场,如同矢量导航系统。两者在数学原理、训练动态及应用上各有优劣:扩散模型适合复杂数据,Flow Matching采样效率更高。文章结合实例解析两者的差异与联系,并探讨其在图像、音频等领域的实际应用,为生成建模提供了全面视角。
3483 1
生成AI的两大范式:扩散模型与Flow Matching的理论基础与技术比较
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
1264 1
安卓项目:app注册/登录界面设计
|
机器学习/深度学习 自然语言处理 测试技术
Qwen3技术报告首次全公开!“混合推理模型”是这样炼成的
近日,通义千问Qwen3系列模型已开源,其技术报告也正式发布。Qwen3系列包含密集模型和混合专家(MoE)模型,参数规模从0.6B到235B不等。该模型引入了“思考模式”与“非思考模式”的动态切换机制,并采用思考预算机制优化推理性能。Qwen3支持119种语言及方言,较前代显著提升多语言能力,在多个基准测试中表现领先。此外,通过强到弱蒸馏技术,轻量级模型性能优异,且计算资源需求更低。所有Qwen3模型均采用Apache 2.0协议开源,便于社区开发与应用。
7956 30
快捷键设置样式
【10月更文挑战第19天】快捷键设置样式
694 6
|
开发工具 开发者 git
「Mac畅玩鸿蒙与硬件4」鸿蒙开发环境配置篇4 - DevEco Studio高效使用技巧
本篇将进一步介绍如何在 DevEco Studio 中高效使用各种功能,通过掌握快捷键、代码补全、调试工具等,帮助开发者在鸿蒙应用开发中大幅提升工作效率。
872 1
「Mac畅玩鸿蒙与硬件4」鸿蒙开发环境配置篇4 - DevEco Studio高效使用技巧
|
机器学习/深度学习 数据可视化 算法
YOLOv9改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
YOLOv9改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
1135 5
YOLOv9改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
|
网络协议 算法 Java
Netty基础—3.基础网络协议
本文详细梳理了计算机网络的基础知识,涵盖从物理层到应用层的各层协议及其功能。内容包括七层模型与四层模型对比、IP地址与子网划分、TCP三次握手及四次挥手过程、Socket编程原理、HTTP/HTTPS协议的工作机制等。同时深入探讨了Linux IO模型(阻塞、非阻塞、IO多路复用)及其应用场景,并分析了select、poll、epoll的区别。此外,还涉及Java IO读写的底层流程及同步异步、阻塞非阻塞的概念。这些知识点为理解网络通信和高性能服务器开发提供了全面的理论支持。
|
缓存 数据处理 UED
【Uniapp 专栏】Uniapp 开发中的疑难问题解决与进阶策略
【5月更文挑战第17天】在 Uniapp 开发中,解决页面间数据传递、网络请求异常、屏幕适配及性能优化等问题至关重要。利用路由参数传递复杂数据,如`uni.navigateTo`和`JSON.stringify`;处理网络请求异常时,添加错误处理机制增强健壮性;使用响应式设计和缓存策略优化布局和性能。针对组件问题,需排查依赖和配置,而平台差异则需定制化处理。通过不断学习和实践,提升开发技能,确保项目成功实施。
477 2
【Uniapp 专栏】Uniapp 开发中的疑难问题解决与进阶策略