《并行计算的编程模型》一2.3.5 活动消息

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

2.3.5 活动消息

AM接口作为GASNet核心API的主要内容,其原理是初始化节点上的调用向目标节点发送少量参数及可选负载,所有的这些都将传递给目标节点上的函数。将要运行的函数,如AM处理程序,通常由gasnet_handler_t类型的索引进行命名。其中这些索引与实际函数间的映射关系通过处理程序表传递给调用的gasnet_attach函数(有可能被其修改)的方式进行创建。
AM处理程序参数为32位的整型。参数的数目受限于具体实现,具体数字可以在运行时通过以下函数查询:

32位平台上函数返回的值至少等于8,而在64位平台上至少为16。目的是确保客户端可以每次向处理程序至少传递8个指针大小的值。
除了上述参数外,还有可选的负载项。我们把AM根据负载的处理方式分为三类:

  • Short AM没有负载。Short AM处理程序的签名如下:
  • Medium AM包含了在目标端实现并提供临时缓冲区的负载。对AM处理程序赋予此缓冲区地址及长度值,当处理程序完成时,将会清空其值并循环执行上述操作。此外,还可以在需要时修改负载项内容。Medium AM处理程序的签名如下:
  • Long AM上包含由初始化节点提供并放置在目标节点地址上的负载。且其地址必须位于GASNet程序的段上。Long AM处理程序的签名如下:

在上述介绍的三个处理程序签名中,“…”表示最多有gasnet_AMMaxArgs()个附加参数变量。由于Medium和Long AM处理程序的签名相同,因此可以对它们使用同一处理程序。
负载大小受到程序实现相关限制的制约,可以通过以下函数进行查询:

GASNet规范中要求所有程序实现都必须支持至少512字节的负载,而在具有RMA支持的硬件平台中,该值会更大。重要的是要注意Long AM的Request与Reply间的区别。
可以使用以下函数中的任意一个发出AM请求,在目标节点上调用AM处理程序。

在上述函数中,“[N]”可以用从0到gasnet_AMMaxArgs()间的值替代。与之前的函数一样,“…”表示传给处理程序的32位参数值。对于Medium和Long请求而言,一旦负载内存可以安全地重用(也称为“本地完成”),函数就立即返回值。因为该实现不必对负载进行拷贝,因此可以暂时阻塞该函数调用,直至网络能够发送负载。当发生阻塞时,执行其他节点发送给调用节点的AM。LongAsync请求与无需等待本地完成的其他Long示例(那些等待分配资源依然处于阻塞状态)不同。在相关AM回复处理程序开始执行前,客户端不能够对负载进行修改,这也是判断本地完成的重要指示。虽然相关语义难以正确应用,但非常强大。
在AM处理程序执行时,相关代码在受限的、称为“处理程序背景”的环境中执行。我们将在后续的内容中讨论相关限制,本章重点关注GASNet中那些由伯克利AM定义的特征。这里的“至多回复一个”规则包含以下两点:(1)就AM的Request操作而言,处理程序中唯一允许的通信是对发起Request操作节点的可选回复;(2)对于AM的Reply操作,不允许在处理程序中发生通信。发送AM Reply操作的函数如下所示:

这里又一次出现了“…”,它表示32位处理程序的参数,且“[N]”表示在从0到gasnet_AMMaxArgs()参数的实例中的上述三种函数原型都是模板。
除了名称,发送AM Reply的调用函数与Request间的根本区别在于第一个参数的数据类型:gasnet_token_t。在上述的三种AM处理程序的函数原型中,该类型首次提及且并未给出详细解释。它是个不透明的类型,主要包括(至少)AM的源节点。由于难以构造这种类型的对象,因此调用AMReply函数的唯一方法是利用接受的标记符号做为Request处理程序的参数。如果必须知道AM的源节点(Request或Reply),这种情况可以使用如下函数查询:

上述函数只能从处理程序的上下文中进行,且标记符号参数的唯一有效值作为处理函数参数的接收值。

相关文章
|
5月前
|
机器学习/深度学习 并行计算 TensorFlow
揭示 GPU 上的批处理策略
【6月更文挑战第9天】批处理策略是优化GPU效率的关键技术,通过组合处理多个数据样本,减少数据传输、充分利用并行计算,提升GPU计算效率。在TensorFlow示例中,批处理用于神经网络训练,但选择合适的批处理大小需考虑GPU内存、模型复杂度和数据特性,以达到最佳性能。批处理策略将持续发展,支持深度学习的进步。
51 7
|
3月前
|
存储 消息中间件 监控
构建高效的数据流处理系统:从理论到实践
【8月更文挑战第27天】本文旨在通过深入浅出的方式,带领读者探索构建一个高效、可扩展的数据流处理系统的全过程。我们将从基本概念出发,逐步深入到架构设计、技术选型、实现细节,并最终展示如何将理论应用于实际项目中。文章不仅提供代码示例,还着重讨论了在设计和开发过程中遇到的挑战及解决策略,为希望深入了解或构建数据流处理系统的技术人员提供了一份实用指南。
|
6月前
|
机器学习/深度学习 测试技术
如何选择合适的多任务学习模型?
【5月更文挑战第25天】如何选择合适的多任务学习模型?
54 5
|
6月前
|
监控 Serverless API
阿里云函数计算的工作原理与事件驱动模型密切相关
【4月更文挑战第17天】阿里云函数计算的工作原理与事件驱动模型密切相关
142 4
|
机器学习/深度学习 数据采集 算法
机器学习基础:令你事半功倍的pipeline处理机制
机器学习基础:令你事半功倍的pipeline处理机制
机器学习基础:令你事半功倍的pipeline处理机制
|
消息中间件 存储 编解码
基于事件驱动应用的福音-函数计算异步调用目标
事件驱动(Event driven)是函数计算的最重要的特质之一,正是由于函数计算和事件源的深度集成,使得函数计算服务成为处理云服务事件最便捷的一种方式,让用户无需自行搭建各类中间件,方便的构建使用云上各种能力的应用。 函数计算近期发布了异步调用目标功能,让函数计算不仅可以作为事件的消费者,也成为了事件的生产者。该功能还增强了异步执行函数的可观测性,让用户更方便的构建基于事件驱动的应用。
|
并行计算 算法 NoSQL
GPU编程(四): 并行规约优化
目录 前言 cuda-gdb 未优化并行规约 优化后并行规约 结果分析 最后 前言 之前第三篇也看到了, 并行方面GPU真的是无往不利, 现在再看下第二个例子, 并行规约. 通过这次的例子会发现, 需要了解GPU架构, 然后写出与之对应的算法的, 两者结合才能得到令人惊叹的结果.
1631 0
|
并行计算 程序员
《并行计算的编程模型》一3.7.4 广播
本节书摘来华章计算机《并行计算的编程模型》一书中的第3章 ,第3.7.4节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2397 0
|
并行计算
《并行计算的编程模型》一2.3.6 活动消息进程
本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.3.6节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
827 0
|
并行计算
《并行计算的编程模型》一2.4.4 批量与单个
本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.4.4节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
850 0
下一篇
无影云桌面