《并行计算的编程模型》一2.3.4 锁与中断

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

2.3.4 锁与中断

在2.2.2节中,讲到GASNet可以在客户端并行执行AM处理程序,即使客户端是单线程的。而且多线程客户端在执行过程中需要避免并行调用GASNet的屏障函数。因此本节将重点介绍GASNet的控制并发机制。
GASNet提供了专门的接口处理线程安全性,由于存在多线程执行GASNet的可能,这种接口对于单线程客户端非常重要。其中主要的机制是一个简单的互斥锁,称作“处理程序安全锁”或“HSL”,数据类型为基于互斥锁类型的gasnet_hsl_t类型。目的是为了确保该互斥锁类型适合于给定的程序实现(其中包括GASNet客户端与其实现都为单线程时无操作的情况)。

除了GASNet规范中提及的细节描述外,上述函数与pthread_mutex_t中的常量、函数非常相似。同POSIX线程一样,这些操作能够防止对数据结构或代码进行并行访问。关于互斥锁的使用方法不在本章讨论的范围之内。需要注意的是,上述操作为节点本地的互斥锁,且GASNet没有提供跨节点互斥处理机制。但是2.6.5节的示例将会讲到如何使用AM实现一个著名的互斥共享内存算法。
除前文中介绍的用于执行客户端AM处理程序的内部线程方法之外,GASNet规范允许出现中断驱动实现情况。虽然写本书时尚未出现这样的应用实现,但是这里简要地介绍一下相关概念。

上述的两个函数通常成对使用,它们定义了线程上不能被AM处理程序执行过程中断的代码段。这与使用HSL方式避免多线程并行访问给定代码或数据有较大的不同。无中断部分主要用于保护可能由客户端处理程序和非处理程序访问的非重入客户端代码。无中断部分使用较少有两个主要原因:(1)使得HSL能够隐式访问无中断部分;(2)AM处理程序在隐式无中断部分执行。注意如果存在动态循环嵌套操作,那么上述函数不必嵌套,因此客户端主要负责无中断部分。
在使用GASNET_SEQ构建时,当且仅当GASNet实现既不使用线程也不使用内部中断执行客户端处理程序时,不需要编译互斥调用。

相关文章
|
5月前
|
存储 机器学习/深度学习 缓存
性能最高提升7倍?探究大语言模型推理之缓存优化
本文探讨了大语言模型(LLM)推理缓存优化技术,重点分析了KV Cache、PagedAttention、Prefix Caching及LMCache等关键技术的演进与优化方向。文章介绍了主流推理框架如vLLM和SGLang在提升首Token延迟(TTFT)、平均Token生成时间(TPOT)和吞吐量方面的实现机制,并展望了未来缓存技术的发展趋势。
性能最高提升7倍?探究大语言模型推理之缓存优化
|
10月前
|
机器学习/深度学习 监控 数据可视化
DeepSeek模型解释与可视化
深度学习模型常被视为“黑盒”,其决策过程难以理解,但在医疗、金融等高风险领域,理解模型决策至关重要。DeepSeek提供多种工具和方法,帮助解释和可视化模型的决策过程。本文介绍如何使用DeepSeek进行特征重要性分析、中间层可视化、局部解释(如LIME和SHAP)及训练过程监控,并通过代码示例详细讲解这些技巧,助力你掌握模型解释与可视化的方法。
|
9月前
|
机器学习/深度学习 存储 PyTorch
PyTorch内存优化的10种策略总结:在有限资源环境下高效训练模型
在大规模深度学习模型训练中,GPU内存容量常成为瓶颈,特别是在训练大型语言模型和视觉Transformer时。本文系统介绍了多种内存优化策略,包括混合精度训练、低精度训练(如BF16)、梯度检查点、梯度累积、张量分片与分布式训练、
408 14
PyTorch内存优化的10种策略总结:在有限资源环境下高效训练模型
|
12月前
|
自然语言处理 Kubernetes 异构计算
推理降本与提升资源效率的实践
本课程从业务角度探讨大模型推理部署及资源利用率提升。首先分析大模型与GPU发展趋势,包括模型开源、规模增长及多模态能力增强;其次介绍高效部署大模型推理业务的步骤,涵盖业务场景选择、架构优化及显存规划;接着讲解如何通过DeepCPU-LLM框架和DeepNCCL通讯库优化推理效率;最后探讨通过KuberGPU实现细粒度GPU资源管理,提升整体资源利用率,降低推理成本。
|
人工智能 并行计算 编译器
【AI系统】SIMD & SIMT 与 CUDA 关系
本文深入解析了AI芯片中SIMD和SIMT的计算本质,基于NVIDIA CUDA实现的对比,探讨了不同并行编程模型,包括串行(SISD)、数据并行(SIMD)和多线程(MIMD/SPMD)。文章详细介绍了各模型的特点及应用场景,特别强调了英伟达GPU中的SIMT机制如何通过SPMD编程模型实现高效并行计算,以及SIMD、SIMT、SPMD之间的关系和区别。
692 13
|
并行计算 PyTorch 算法框架/工具
【Pytorch】查看GPU是否可用
本文提供了使用PyTorch检查GPU是否可用的方法,包括查看PyTorch版本、编译时使用的CUDA版本以及当前CUDA是否可用于PyTorch。
1887 2
|
前端开发 JavaScript Java
基于servlet+jsp+mysql实现的java web校园车辆管理系统
基于servlet+jsp+mysql实现的java web校园车辆管理系统
321 0
|
监控 索引
通过日志服务调试分布式系统
分布式系统的调试是一个大难题,多个进程是如何协作的?如何查看延时消耗在哪里?本位为你揭秘阿里云的调试利器,基于日志服务的Tracer工具。
5297 1
|
Linux Unix Shell
带你读《面向Arduino用户的树莓派实用指南:物联网应用开发》之三:Linux基础
本书全面介绍了树莓派开发板的配置步骤、开发环境构建和实际应用技术,讲述了在树莓派上采用C++语言和库进行开发的方法,更为难得的是介绍了结合使用Arduino和树莓派的工具和流程。全书共分为13章,第1章为完成书中的项目提供了一份购物清单;第2章~第5章从硬件设置、操作系统安装和管理、树莓派上C++开发的流程和库等方面进行了介绍;第6章~第11章则采用实例的方式介绍了树莓派在多个方面的开发过程;第13章为总结和建议部分。本书适用于有意学习树莓派开发的读者,尤其适合具有Arduino经验的读者快速入门,也可作为STEAM教育的课程设计蓝本。
|
并行计算 算法 API
《并行计算的编程模型》一导读
对于正在编程的程序员,编程模型可被看作一台虚拟机,并可通过编程语言和函数库实现。如果某个编程模型成为计算机科学研究中的热点,需要具有以下特性:高效性(易于描述各种抽象算法)、移植性(兼容各种硬件计算平台)、高性能(高效均衡地利用硬件平台的计算能力)、通用性(广泛地描述各种算法)。
3707 0