zl程序教程

您现在的位置是:首页 >  其他

当前栏目

深入理解并行编程-分割和同步设计(一)

同步编程 设计 深入 理解 分割 并行
2023-09-11 14:16:12 时间

在商用计算机中,多核系统已经越来越常见了,本章将描述如何设计能更好利用多核优势的软件。我们将介绍一些习语,或者叫“设计模式”,来帮助您权衡 性能、可扩展性和响应时间。在上一章我们说过,您在编写并行软件时最重要的考虑是如何进行分割。正确的分割问题能够让解决办法简单、可扩展并且高性能,而 不恰当的分割问题则会产生缓慢且复杂的解决方案。

1.1分割练习

本节用两个例子(哲学家就餐问题和双端队列问题)作为练习,来说明分割的价值。

1.1.1哲学家就餐问题

哲学家就餐问题

图1.1:哲学家就餐问题

图1.1是经典的哲学家就餐问题的示意图[Dij71]。问题中的五个哲学家一天无所事事,不是思考就是吃一种需要用两把叉子才能吃下的“滑溜溜的”意大利面。每个哲学家只能用和他左手和右手旁的叉子,一旦哲学家拿起了叉子,那么不吃到心满意足是不会放下的。

我们的目标是构建一种算法来——有点儿文学化——阻止饥饿。一种饥饿的场景是所有哲学家都同时拿起了左手边的叉子。因为他们在吃饱前不会放下叉子,并且他们还需要第二把叉子才能开始就餐,所以所有哲学家都会挨饿。

哲学家就餐问题,教科书解法

图1.2:哲学家就餐问题,教科书解法

Dijkstra的解决方法是使用一个全局信号量,假设通信延迟忽略不计的话,这种方法非常完 美,可是在随后的几十年里这种假设变得无效了。因此,最近的解决办法是像图5.2一样为叉子编号。每个哲学家都先拿他盘子周围编号最小的叉子,然后再拿编 号最高的叉子。这样坐在图中最上方的哲学家会先拿起左手边的叉子,然后是右边的叉子,而其他的哲学家则先拿起右手边的叉子。因为有两个哲学家试着去拿叉子 1,而只有一位会成功,所以只有4位哲学家抢5把叉子。至少这4位中的一位肯定能拿到两把叉子,这样就能开始就餐了。

这种为资源编号并按照编号顺序获取资源的通用技术在防止死锁上经常使用。但是很容易就能想象出一个事件序列来产生这种结果:虽然大家都在挨饿,但是一次只有一名哲学家就餐。

1. P2拿起叉子1,阻止P1拿起叉子。

2. P3拿起叉子2。

3. P4拿起叉子3。

4. P5拿起叉子4。

5. P5拿起叉子5,开始就餐。

6. P5放下叉子4和5。

7. P4拿起叉子4,开始就餐。

请在进一步阅读之前,思考哲学家就餐问题的分割方法。

哲学家就餐问题,分割解法

图1.3:哲学家就餐问题,分割解法

图1.3是一种方法,里面只有4位而不是5位哲学家,这样可以更好的说明分割技术。最上方和最 右边的哲学家合用一对叉子,而最下方和最左边的哲学家合用一对叉子。如果所有哲学家同时感觉饿了,至少有两位能同时就餐。另外如图中所示,现在叉子可以捆 绑成一对儿,这样可以同时拿起或者放下,这就简化了获取和释放算法。

小问题1.1: 哲学家就餐问题还有更好的解法吗?

这是“水平并行化”[Inm85]的一个例子,或者叫“数据并行化”,这么叫是因为哲学家之间没有依赖关系。在数据处理型的系统中,“数据并行化”是指一种类型的数据只会穿过一系列同类型软件组件其中的一个。

小问题1.2:那么“水平并行化”里的“水平”是什么意思呢?


文章转自 并发编程网-ifeve.com


同步计数器设计与建模 ⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
高效轻量级语义分割综述 语义分割是自动驾驶中视觉理解的重要组成部分。然而当前SOTA的模型都非常复杂和繁琐,因此不适合部署在计算资源受限且耗时要求较低的车载芯片平台上。本文深入研究了更紧凑、更高效的模型以解决上述问题,这些模型能够部署在低内存嵌入式系统上,同时满足实时推理的需求。本文讨论了该领域一些优秀的工作,根据它们的主要贡献进行归类,最后本文评估了在相同软硬件条件下模型的推理速度,这些条件代表了一个典型的高性能GPU和低内存嵌入式GPU的实际部署场景。本文的实验结果表明,许多工作能够在资源受限的硬件上实现性能和耗时的平衡。
注意两个词汇的区别:并行和并发 * 大家注意两个词汇的区别:并行和并发 * 并行:前者是逻辑上同时发生,指在某一个时间内同时运行多个程序。 * 并发:后者是物理上同时发生,指在某一个时间点同时运行多个程序。 在java就业班中会有如何解决高并发?我的GitHub地址:https://github.
《OpenACC并行程序设计:性能优化实践指南》一 3.6 第一个并行PIConGPU实现 本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.6节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
《OpenACC并行程序设计:性能优化实践指南》一 1.6 控制并行资源 本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第1章,第1.6节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
《OpenACC并行程序设计:性能优化实践指南》一 1.1 简单的数据并行循环 本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第1章,第1.1节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
《并行计算的编程模型》一3.6 排序和同步 本节书摘来华章计算机《并行计算的编程模型》一书中的第3章 ,第3.6节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
《并行计算的编程模型》一3.7.3 非全局同步屏障 本节书摘来华章计算机《并行计算的编程模型》一书中的第3章 ,第3.7.3节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
《并行计算的编程模型》一3.6.1 全局同步屏障 本节书摘来华章计算机《并行计算的编程模型》一书中的第3章 ,第3.6.1节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
《并行计算的编程模型》一3.7.2 同步数组和工作数组 本节书摘来华章计算机《并行计算的编程模型》一书中的第3章 ,第3.7.2节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。