您是否期望未来的CPU代不是缓存一致的?

时间:2010-01-28 01:40:45

标签: multithreading caching multicore atomic cpu-architecture

我正在设计一个程序,我发现假设隐式缓存一致性使设计更容易。例如,我的单个编写器(总是相同的线程)多个读取器(总是其他线程)场景不使用任何互斥锁。

对于当前的Intel CPU而言,这不是问题。但我希望这个程序至少在未来十年(软件的短时间内)产生收入,所以我想知道你是否认为这可能是未来cpu架构的问题。

6 个答案:

答案 0 :(得分:3)

我怀疑未来的CPU代仍将为您处理缓存一致性。没有这个,大多数主流编程方法都会失败。我怀疑将在未来十年内广泛使用的任何CPU架构都会使当前的编程模型失效 - 它可能会扩展它,但是很难放弃这么广泛的假设。

话虽这么说,假设隐式缓存一致性的编程并不总是一个好主意。如果您有意尝试隔离数据,那么false sharing存在许多问题,可以轻松避免。正确处理这一问题可能会对当前的CPU产生巨大的性能提升(相反,缺乏巨大的性能损失)。当然,它在设计中的工作量更大,但通常需要它。

答案 1 :(得分:3)

我们已经在那里了。计算机声称缓存一致性,但同时它们有一个临时存储缓冲区用于写入,读取可以通过此缓冲区而不是缓存完成(即存储缓冲区刚刚变为不连贯缓存)并且无效请求也排队,允许处理器临时使用它知道过时的缓存行。

X86不使用许多这些技术,但它确实使用了一些技术。只要内存保持比CPU慢得多,就可以期待看到更多这些技术,而其他技术则被设计出来使用。即使是itanium,它也失败了,使用了很多这些想法,所以希望intel随着时间的推移将它们迁移到x86中。

至于避免锁定等:通过互联网来控制人们的专业水平总是很难,所以要么你被误认为可能有用,要么你处于无锁编程的最前沿。很难说。

您了解MESI协议,内存障碍和可见性吗?你有没看过Paul McKenney等人的东西?

答案 2 :(得分:1)

我本身并不知道。但我希望看到非缓存相干模式的趋势。

概念思维转换很重要(不能只是在方法调用中传递数据,必须通过队列传递给异步方法),但是随着我们越来越多地进入多核世界,这是必需的。我们越接近每个内存库一个处理器越好。因为那时我们正在一个网络消息路由的世界里工作,在这个世界中,数据不可用,而不是拥有可以静默地踩踏数据的线程。

然而,正如Reed Copsey指出的那样,整个x86计算世界建立在缓存一致性的假设之上(这甚至比微软的市场份额更大!)。所以它不会很快消失!

答案 3 :(得分:1)

以下是来自计算机架构领域知名作者的论文,该论文认为缓存一致性仍然存在

http://acg.cis.upenn.edu/papers/cacm12_why_coherence.pdf

“为什么要保持片上高速缓存一致性”-By Martin,Hill和Sorin

答案 4 :(得分:0)

你提出了一个奇怪的请求。您要求我们的(SO社区)假设关于未来的CPU架构 - 这是一个非常危险的主张。你愿意把钱放在我们的嘴里吗?因为如果我们错了,你的申请会失败,那么你就不会赚钱......

无论如何,我怀疑由于为单线程执行而编写的所有遗留代码,事情不会发生显着变化,但这只是我的看法。

答案 5 :(得分:0)

这个问题对我来说似乎有误导性。 CPU架构并不重要,重要的是您正在为之工作的平台的内存模型。

您正在开发应用程序是一些环境,具有一些已定义的内存模型。例如。如果您当前的目标是x86,那么您可以非常肯定将来任何平台在运行x86代码时都会实现相同的内存模型。 Java或.NET VM和其他执行平台也是如此。

如果您希望将当前应用程序移植到其他某些平台上,如果平台内存模型不同,则必须对其进行调整,但在这种情况下,您是执行端口的人并且您拥有完全控制权你如何做到这一点。然而,即使对于当前平台,例如, PowerPC内存模型允许比x86更多的重新排序。