《多核与GPU编程:工具、方法及实践》----3.3 设计考虑

简介: 这个问题可以归结为:如何使多线程程序的行为与串行程序行为一致? 这就需要不同作用的一致性模型。一致性模型是一套规则,它定义了系统特定的行为方式。已经提出了大量一致性模型,每个模型都在效率和严格性之间权衡。其中一个实例是顺序一致性模型(sequential consistency model)。

本节书摘来自华章出版社《多核与GPU编程:工具、方法及实践》一书中的第3章,第3.3节, 作 者 Multicore and GPU Programming: An Integrated Approach[阿联酋]杰拉西莫斯·巴拉斯(Gerassimos Barlas) 著,张云泉 贾海鹏 李士刚 袁良 等译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 设计考虑

这个问题可以归结为:如何使多线程程序的行为与串行程序行为一致?

这就需要不同作用的一致性模型。一致性模型是一套规则,它定义了系统特定的行为方式。已经提出了大量一致性模型,每个模型都在效率和严格性之间权衡。其中一个实例是顺序一致性模型(sequential consistency model)。

在顺序一致性模型中,在共享存储器对象进行操作的所有事件应该发生在不同的时间点。此外,这些事件的时间点顺序应该符合每个线程的内部顺序。不同线程中的事件可以重排,从而使对一个对象总的事件/方法调用执行序列的效果满足串行规范(亦即与单个线程执行时的行为一致)。图3-5展示了这种顺序重排的一个实例。

这种情况下顺序一致性模型的问题在于其非组合性:将两个保证顺序一致性的软件模块组合在一起并不能保证整体满足顺序一致性。图3-6展示了一个实例用以说明这种情况,其中图3-5中的序列被复制了一份,虽然两个独立序列是顺序一致性的,但是没有办法保证两个时间线的组合依然满足顺序一致性。


9d8034d671053b2b97ceb6f45a354334b480065a

更为严格的一致性模型是序列化(linearizability)[45]:事件满足同一时刻执行一个事件并且立即生效。后一要求是由于称为序列点的需要。序列点是一个方法调用期间生效的时间点。序列点的引入有两个意义。

1.可以根据方法的序列点来进行全排序。在一个方法的开始调用和结束返回这一时间窗口期间可以以任意点作为序列点。最后的排序结果必须与考虑序列化的并发执行的一个串行执行结果一致。

2.虽然并不强制加锁(并且实际上从性能角度考虑也应该避免加锁),但是在一个方法调用期间对一个对象加锁等价于使其效果立即生效并对所有其他线程可见。最简单的方法是使用加锁机制,因此接下来的几节讨论这些机制。

每个序列化执行都满足顺序一致性,但反之则不一定。图3-7展示了一个序列化执行示例。

接下来的几节将研究两种加锁机制,虽然其在功能上是等价的,但是在同步线程时导致不同的模式。


2848c5b25825947e4999b9f1cfd602c65fe2c248
相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
4月前
|
人工智能 弹性计算 PyTorch
【Hello AI】神行工具包(DeepGPU)-GPU计算服务增强工具集合
神行工具包(DeepGPU)是阿里云专门为GPU云服务器搭配的GPU计算服务增强工具集合,旨在帮助开发者在GPU云服务器上更快速地构建企业级服务能力
129539 3
|
Unix 异构计算 Windows
带你读《基于CUDA的GPU并行程序开发指南》之一:CPU并行编程概述
本书旨在帮助读者了解与基于CUDA的并行编程技术有关的基本概念,并掌握实用c语言进行GPU高性能编程的相关技巧。本书第一部分通过CPU多线程编程解释了并行计算,使得没有太多并行计算基础的读者也能毫无阻碍地进入CUDA天地;第二部分重点介绍了基于CUDA的GPU大规模并行程序的开发与实现,并通过大量的性能分析帮助读者理解如何开发一个好的GPU并行程序以及GPU架构对程序性能的影响;本书的第三部分介绍了一些常用的CUDA库。
|
3月前
|
并行计算 API 开发工具
【GPU】GPU 硬件与 CUDA 程序开发工具
【GPU】GPU 硬件与 CUDA 程序开发工具
44 0
|
3月前
|
机器学习/深度学习 并行计算 流计算
【GPU】GPU CUDA 编程的基本原理是什么?
【GPU】GPU CUDA 编程的基本原理是什么?
53 0
|
5月前
|
存储 人工智能 缓存
探索AIGC未来:CPU源码优化、多GPU编程与中国算力瓶颈与发展
近年来,AIGC的技术取得了长足的进步,其中最为重要的技术之一是基于源代码的CPU调优,可以有效地提高人工智能模型的训练速度和效率,从而加快了人工智能的应用进程。同时,多GPU编程技术也在不断发展,大大提高人工智能模型的计算能力,更好地满足实际应用的需求。 本文将分析AIGC的最新进展,深入探讨以上话题,以及中国算力产业的瓶颈和趋势。
|
缓存 openCL 算法
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
关于实现Halcon算法加速的基础知识(多核并行/GPU)
2613 0
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
|
11月前
|
机器学习/深度学习 程序员 异构计算
【深度学习工具】Python代码查看GPU资源使用情况
在训练神经网络模型时候,有时候我们想查看GPU资源的使用情况,如果使用Ctrl+Shift+Esc不太符合我们程序员的风格😅,如果可以使用代码查看GPU使用情况就比较Nice。话不多说,直接上代码。
580 0
|
Android开发 开发者 异构计算
【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )(二)
【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )(二)
227 0
【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )(二)
|
Android开发 开发者 异构计算
【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )(一)
【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )(一)
374 0
【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )(一)
|
算法 安全 程序员
关于实现Halcon算法加速的基础知识(1)(多核并行/GPU)
关于实现Halcon算法加速的基础知识(多核并行/GPU)
1084 0
关于实现Halcon算法加速的基础知识(1)(多核并行/GPU)