社区
英特尔边缘计算技术
帖子详情
多核时代,怎么做到极度精确的互斥
zj53hao
2008-04-28 11:54:31
单核或单个CPU中,对某个变量的访问,在及其微小的瞬间,只能有一个线程访问,所以还好维护对其的读写保护。
但是真正的多核或多个CPU中。每个CPU的瞬间。都是独立的。
会不会存在同一微妙时刻。两个不同核或者不同CPU中的两个线程同时。访问了这个变量。这种情况应该很少出现。有没有这个可能。
如果有这个可能的话。有没有对此的解决或避免的办法?
...全文
291
10
打赏
收藏
多核时代,怎么做到极度精确的互斥
单核或单个CPU中,对某个变量的访问,在及其微小的瞬间,只能有一个线程访问,所以还好维护对其的读写保护。 但是真正的多核或多个CPU中。每个CPU的瞬间。都是独立的。 会不会存在同一微妙时刻。两个不同核或者不同CPU中的两个线程同时。访问了这个变量。这种情况应该很少出现。有没有这个可能。 如果有这个可能的话。有没有对此的解决或避免的办法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zj53hao
2008-04-30
打赏
举报
回复
如果把自己分解成电子,随着总线听命着CPU指令,到处游荡。 那可能比 张艺谋的 万千壮士还壮观了。
呵呵。
多谢 Intel_WWW的分析。总有一天也深入到CPU内部探下秘。
intel_www
2008-04-30
打赏
举报
回复
[Quote=引用 8 楼 zj53hao 的回复:]
明白,也就是物理上不可能
同一瞬间,两个CPU能同时访问同一块内存区域
。
这就引出多核下CPU还得排队等内存。似乎效率就低了点。
先结贴吧。
[/Quote]
且不说怎么实现,这种操作的语义怎么定义呢?
多核下的CPU并不一定非要排队等待内存,在特定的cache策略下不同的核可以同时访问不同的内存地址空间而无序排队。而且多核上的程序在设计时就要尽量优化,避免不好的内存访问方式。
zj53hao
2008-04-29
打赏
举报
回复
明白,也就是物理上不可能同一瞬间,两个CPU能同时访问同一块内存区域。
这就引出多核下CPU还得排队等内存。似乎效率就低了点。
先结贴吧。
intel_www
2008-04-29
打赏
举报
回复
lz真正的问题实际上是如何实现同步对象,6楼的回答是正确的答案。
overcomeunicom990702
2008-04-29
打赏
举报
回复
[Quote=引用 3 楼 zj53hao 的回复:]
上面说的解决方案,是针对单核多线程的吧。,
我这里所说的是多核(或多CPU)下的极端情况。有没有这种可能性。
信号量和锁,也都是一个存储对象。 在单核下,无论怎么样。最后也只能是一个线程在一瞬间到达这里。所以可以用他们来解决,线程同步的问题。
我这里假设的是,多核下的某一瞬间恰好两个CPU核中两个不同的线程刚好,同时锁住了一个信号量。 这里的同时。就是真正的同时。 这种情况应该算极端了。 用来同步的信…
[/Quote]
在mp环境中,就是使用各种同步原语来保证对共享数据的互斥访问,比如mutex/semaphore/file lock等等
深入其底层,多是使用了lock prefix,lock prefix是锁住总线,并在下一条汇编指令执行完后失效,锁住总线的作用--使得该 CPU对内存具有惟一的访问权限,其它CPU不能访问内存,这时候我们独占法对计数器的值进行修改,从而达到互斥的作用,可以从tag中搜索一把lock prefix
liangyi571
2008-04-29
打赏
举报
回复
“多核下的某一瞬间恰好两个CPU核中两个不同的线程刚好,同时锁住了一个信号量。”
这个情况不可能发生吧,会有总线仲裁机制来避免的,队员可以有22个,主裁判只有一个。至于变量冲突会经常发生,要看程序怎么写了。
intel_www
2008-04-28
打赏
举报
回复
这就是多线程编程中常见的数据竞争。解决的办法就是使用各种同步对象,比如锁,信号量等实现对共享数据的互斥访问。
zj53hao
2008-04-28
打赏
举报
回复
其实这个问题,现实中应该基本不会出现这种变态情况,估计只有做这种极端实验的科学家才会碰上。
所以解决与否。不是很重要。 我们只要处理常态下的多线程同步和互斥。
感谢两位专家的提醒。暂不结贴,看看有没有其他的高论。
zj53hao
2008-04-28
打赏
举报
回复
上面说的解决方案,是针对单核多线程的吧。,
我这里所说的是多核(或多CPU)下的极端情况。有没有这种可能性。
信号量和锁,也都是一个存储对象。 在单核下,无论怎么样。最后也只能是一个线程在一瞬间到达这里。所以可以用他们来解决,线程同步的问题。
我这里假设的是,多核下的某一瞬间恰好两个CPU核中两个不同的线程刚好,同时锁住了一个信号量。 这里的同时。就是真正的同时。 这种情况应该算极端了。 用来同步的信号量本身,被两个不同的线程同一瞬间控制了。
intel_jeff
2008-04-28
打赏
举报
回复
补充一点,Intel Thread Checker是个很好的工具,帮助你发现类似的多线程编程方面的问题,比如数据竞争、死锁等。
TMS320C6678
多核
DSP系统设计与实现
如果说 C66x 内核是强大的“计算单元”,那么KeyStone 架构(特指 KeyStone I)就是将多个 C66x 内核、海量存储器和高速 I/O 接口高效粘合在一起的“高速公路”和“指挥中心”。在
多核
SoC 设计中,最大的挑战往往不是计算单元本身,而是如何高效地为所有内核供给数据,以及如何管理它们之间的通信。KeyStone 架构的设计核心正是为了消除数据流瓶颈。其关键组件包括 TeraNet 交换矩阵、Multicore Navigator
多核
导航器以及专用硬件加速器。
JUC并发集合-Java Fork/Join
在
多核
处理器
时代
,充分利用计算资源已成为提升应用性能的关键因素。然而,编写高效的并行程序一直是软件开发中的难题。开发者不仅需要考虑如何合理拆分任务,还要处理线程同步、负载均衡等复杂问题。Java作为企业级应用的主流语言,在并发编程领域不断演进,而Fork/Join框架的引入则是这一演进过程中的重要里程碑。Fork/Join框架是Java 7(2011年发布)中引入的一个并行执行框架,它是对Java并发工具集的重要扩展。在此之前,Java开发者主要依赖Thread类和Executor框架来实现并发,这些工具虽
Memory Ordering at Compile Time
JUN 25, 2012 原文在这:http://preshing.com/20120625/memory-ordering-at-compile-time/ 前言:这是译自preshing博客的第二篇文章,本文讨论的是编译优化导致的重排序问题。从你写C/C++源代码到它在CPU里执行,这段代码的内存交互可能会根据特定的规则被重新排序了。编译器(编译期)和processor(运行期)都有可能导致
1 Studying《Computer Architecture A Quantitative Approach》5-7
不幸的是,缓存共享数据引入了一个新问题。由于两个不同处理器对内存的视图是通过各自的缓存实现的,这些处理器可能会看到同一内存位置的不同值,如图5.3所示。这种困难通常被称为缓存一致性问题。注意,一致性问题的存在是因为我们同时拥有一个主要由主内存定义的全局状态和一个由每个处理器核心私有的各自缓存定义的局部状态。因此,在某个级别的缓存可能是共享的
多核
系统中(例如,L3),尽管某些级别是私有的(例如,L1和L2),一致性问题仍然存在并且必须解决。
JavaScript 运行机制(EventLoop)详解:一篇文章全部搞懂事件循环
我们在页面中通常会发大量的请求,获取后端的数据去渲染页面。因为浏览器是单线程的,试想一下,当我们发出异步请求的时候,阻塞了,后面的代码都不执行了,那页面可能出现长时间白屏,
极度
影响用户体验。所以JS采取了"异步任务回调通知"的模式,而实现这个“通知”的,正是事件循环,当遇到异步任务时,就将这个任务交给对应的线程,当这个异步任务满足回调条件时,对应的线程又通过事件触发线程将这个事件放入任务队列,然后主线程从任务队列取出事件继续执行。说了这么多,终于轮到我们的主角了,下面有请任务队列和事件循环登场。...
英特尔边缘计算技术
568
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章