3

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

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

4

6 回答 6

3

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

话虽如此,假设隐式缓存一致性的编程并不总是一个好主意。如果您有目的地尝试隔离数据,则可以轻松避免虚假共享的许多问题。正确处理这个问题可以在当前一代 CPU 上带来巨大的性能提升(而不是巨大的性能损失)。诚然,它在设计中需要做更多的工作,但通常是必需的。

于 2010-01-28T01:47:06.940 回答
3

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

X86 没有使用很多这些技术,但它确实使用了一些。只要内存比 CPU 慢得多,就可以期待看到更多这些技术和其他尚未设计使用的技术。即使是失败的安腾也使用了许多这些想法,所以期待英特尔随着时间的推移将它们迁移到 x86 中。

至于避免使用锁等:总是很难在 Internet 上衡量人们的专业水平,所以要么你被你认为可能有用的东西误导了,要么你处于无锁编程的前沿。很难说。

你了解 MESI 协议、内存屏障和可见性吗?你读过保罗·麦肯尼等的东西吗?

于 2010-01-28T03:17:14.497 回答
1

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

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

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

于 2010-01-28T02:51:46.620 回答
1

这是计算机体系结构领域著名作者的一篇论文,该论文认为缓存一致性将继续存在

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

“为什么片上缓存一致性会一直存在”——Martin、Hill 和 Sorin

于 2013-04-20T04:17:58.387 回答
0

你提出了一个奇怪的要求。您正在询问我们(SO 社区)对未来 CPU 架构的假设——这是一个非常危险的提议。你愿意把钱放在我们嘴边吗?因为如果我们错了,您的申请将失败,那将是您没有赚到任何钱..

无论如何,我怀疑事情不会有太大变化,因为所有遗留代码都是为单线程执行而编写的,但这只是我的看法。

于 2010-01-28T01:49:22.830 回答
0

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

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

如果您希望将当前应用程序移植到其他一些平台,如果平台内存模型会有所不同,您将不得不进行调整,但在这种情况下,您是进行移植的人,并且您可以完全控制您的移植方式做。然而,即使对于当前平台也是如此,例如,PowerPC 内存模型允许发生比 x86 更多的重新排序。

于 2011-02-01T13:22:32.857 回答