《嵌入式软件的时间分析》书友问答接龙 第七集:多核及多ECU环境下的软件时间
<p><strong><img file="" height="52" initialized="true" inpost="1" lazyloaded="true" onclick="zoom(this, this.getAttribute('zoomfile'), 0, 0, '0')" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/pleased.gif" width="48" zoomfile="" />这章节内容,应该算是开启了汽车电子了~</strong></p><p>章节目录:</p>
<p>7.1 多核基础知识 154<br />
7.1.1 Amdahl vs.Gustafson——谁是对的? 155<br />
7.1.2 CPU 核心——同构(Homogeneous)、异构(Heterogeneous)还是锁步(Lock-step)? 155<br />
7.1.3 锁步多核 156<br />
7.1.4 英飞凌 AURIX——同类、异类和锁步 157<br />
7.2 并发执行的多种类型 158<br />
7.2.1 应用程序的并行执行 158<br />
7.2.2 函数的并行执行 159<br />
7.2.3 指令的并行执行 164<br />
7.3 数据一致性,Spinlocks 165<br />
7.3.1 确保数据一致性的理想解决方案 168<br />
7.3.2 确保数据一致性的成本 169<br />
7.4 存储地址克隆 170<br />
7.5 总结 172</p>
<p> </p>
<p><strong>《嵌入式软件的时间分析》的书友们(<a href="home.php?mod=space&uid=1401067" target="_blank">@luyism </a> 、<a href="home.php?mod=space&uid=108278" target="_blank">@常见泽1 </a> 、<a href="home.php?mod=space&uid=427606" target="_blank">@数码小叶 </a> 、<a href="home.php?mod=space&uid=782751" target="_blank">@hehung </a> 、<a href="home.php?mod=space&uid=323615" target="_blank">@qinyunti </a> ):</strong></p>
<p>需在<span style="color:#2ecc71;">本周内阅读完书籍的第七章节多核及多ECU环境下的软件时间</span>,跟帖参与问答接龙互动:</p>
<p>(1)第一位跟帖发起本章问题,第二位解答第一位发起的问题,第三、四位继续问答接龙;</p>
<p>(2)最后一位是章节总结角色,以文字或者思维导图的形式,对本章进行总结。至此章节互动结束。</p>
<p> </p>
<p>注意:发起的问题,对解题者理解、学习本章内容有切实意义;发起的问题不可重复。</p>
<p> </p>
<p> </p>
<p> </p>
<div style="overflow-wrap: break-word; color: rgb(51, 51, 51);Microsoft yahei" letter-spacing: normal; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; background-color: rgb(255, 255, 255)">
<p style="overflow-wrap: break-word"><strong style="overflow-wrap: break-word">活动交流群</strong></p>
<p style="overflow-wrap: break-word">论坛有开设汽车电子交流群,欢迎感兴趣的小伙伴,微信添加“helloeeworld”为好友,对话:加入汽车电子交流群,入群交流。</p>
<p style="overflow-wrap: break-word"><img _height="416" file="" initialized="true" inpost="1" lazyloaded="true" onclick="zoom(this, this.getAttribute('zoomfile'), 0, 0, '0')" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" src="https://6.eewimg.cn/news/statics/qrcode/helloeeworld.png" style="overflow-wrap: break-word; border: 0px solid; max-width: 600px; width: 150px;" zoomfile="" /></p>
<p style="overflow-wrap: break-word">扫码,对话:加入汽车电子交流群。</p>
</div>
<p>多核下,如何确保数据一致性,有哪些方法</p>
hehung 发表于 2024-8-5 13:55
多核下,如何确保数据一致性,有哪些方法
<p>多核下,为确保数据一致性其中一个方法是可以使用spinlock,使用spinlock后,当一个CPU占用了某个资源后,在其占用期内,其他CPU都不能使用该资源。还有一种替代的实现方法,每个中断仅使用自己的计数器,并且每当需要执行次数的总和时,都会查询计算总和。这种方法既适用于中断内数据不一致,也适用于多核处理器的两个CPU竞争的情况。</p>
<p>并发执行的三种不同类型的并行执行介绍</p>
常见泽1 发表于 2024-8-6 14:34
并发执行的三种不同类型的并行执行介绍
<p>先区分一下概念:并发执行是指多个任务或指令同时执行的能力,而并行执行则是指利用多核处理器的多个核心来同时处理不同的任务或指令。</p>
<p>书中介绍的并发执行的三种不同类型的并行执行有以下三种:</p>
<h3 data-spm-anchor-id="5176.28103460.0.i45.297c3da2q2jmWm">1. 应用程序的并行执行</h3>
<p>应用程序的并行执行是指将一个应用程序分割成多个子任务,这些子任务可以在不同的处理器核心上同时执行。这种并行化通常涉及到将应用程序的设计和实现分解成多个独立的模块或组件,每个模块可以独立运行。</p>
<p>例如开发一个自动驾驶汽车的控制软件,该软件需要处理来自多个传感器的数据。我们可以将软件分为几个模块,例如图像处理模块、雷达数据处理模块和决策制定模块。每个模块都可以在不同的核心上运行,从而加快整体处理速度。</p>
<h3 data-spm-anchor-id="5176.28103460.0.i38.297c3da2q2jmWm">2. 函数的并行执行</h3>
<p data-spm-anchor-id="5176.28103460.0.i46.297c3da2q2jmWm">函数的并行执行是指将一个应用程序中的函数或子程序分解成多个部分,这些部分可以在不同的核心上同时执行。这种并行化通常涉及到将一个大的函数拆分成多个较小的函数,每个函数可以独立运行。</p>
<p>书中以冒泡排序算法为例,展示了在单核和多核处理器上执行时的区别。</p>
<h4>单核处理器上的排序</h4>
<p>在单核处理器上,冒泡排序算法可以被简单地实现,只需要一个函数调用就可以启动排序过程。这个过程是串行的,即每次只能处理一个元素,直到整个列表被排序完毕。</p>
<h4>多核处理器上的排序</h4>
<p>在多核处理器上,为了实现函数的并行执行,可以尝试将原始数组分割成若干子数组,并将每个子数组分配给不同的处理器核心进行排序。一旦所有子数组被排序,就需要将它们合并成一个有序的完整数组。</p>
<ul>
<li><strong>子数组排序</strong>:每个子数组可以独立地被排序,这通常比单核排序快,但仍然受限于冒泡排序的时间复杂度。</li>
<li data-spm-anchor-id="5176.28103460.0.i51.297c3da2q2jmWm"><strong>子数组合并</strong>:排序后的子数组需要被合并成一个有序数组。这可以通过多次合并操作完成,其中每次合并都需要比较和重新组织数据。</li>
</ul>
<p>同时书中7.2.2.2 小节还提到了双重并行与流水线并行也有些意思,展示一下内容:</p>
<ul>
<li><strong>双重并行</strong>:在这种方法中,将整个任务(如 A 和 B 两个阶段)在两个核心上轮流执行。这种方法减少了核心间的通信,使得调度更为简单且易于预测。</li>
<li data-spm-anchor-id="5176.28103460.0.i52.297c3da2q2jmWm"><strong>流水线并行</strong>:这种方法将任务的不同阶段分配给不同的核心,形成流水线。这种方法可以在理论上达到更高的吞吐量,但可能需要更多的协调和通信。</li>
</ul>
<div style="text-align: center;"></div>
<h3 data-spm-anchor-id="5176.28103460.0.i48.297c3da2q2jmWm">3. 指令的并行执行</h3>
<p>指令的并行执行是指在单个处理器核心内部,通过指令级并行(ILP, Instruction-Level Parallelism)来同时执行多个指令。这通常是通过现代处理器的流水线技术和超线程技术实现的。</p>
<p>在单个核心上,处理器可以同时执行多个指令,例如加载数据、执行计算和写回结果。通过使用流水线技术,处理器可以在同一时间内处理多个指令的不同阶段,从而提高处理效率。</p>
<p> </p>
<p>做个小的总结,</p>
<p>这章首先提到了同构,异构,锁步这三种多核架构,其中锁步架构比较有意思,感觉是在宇航级芯片上可能用的多,实际是一种冗余设计,这种冗余要考虑两种实现要不一样,避免同类错误导致"全军覆没",比如镜像放置,时钟偏置,独立时钟等等细节都是处于此考虑。</p>
<p>然后介绍了不同类型的并行执行:应用程序并行执行,函数的并行执行,指令的并行执行。</p>
<p>然后提到了数据一致性的问题,一般低端MCU都没有cache所以遇到比较少,而高端cache会有多级cache,多核,这个问题变得很突出,需要时刻关注数据一致性问题。</p>
页:
[1]