4

在多核之间共享数据最有效的是什么。当然,您可以使用共享内存,但这也是有代价的。假设一个核心不断地写入一个变量,而另一个核心必须不断地从中读取。使用 MESI 缓存一致性协议,写入核心将不时导致读取核心使其缓存无效。那么在这种情况下,最有效的数据共享方式是什么。

4

3 回答 3

3

在典型的共享内存机器上,您描述的场景可能已经是可能的最有效的方法:

  • 核心 A 写入内存位置。使 Core B 的副本无效。
  • Core B 从内存或 Core A 的缓存中获取数据。

无论哪种方式,数据都必须从 Core A 发送到 Core B。现代处理器中的缓存一致性有时会支持直接的缓存到缓存传输,而无需一直传输到内存。


您想要避免(尽可能)是过度锁定共享资源。这将增加双向缓存一致性流量(和延迟)。

于 2012-04-08T19:37:51.260 回答
0

一种常见且通用的方法是尽可能使用每个核心的数据结构。

例如,在生产者-消费者场景中,每个消费者处理器都可以拥有队列的一部分并对其进行操作。他们只有在工作项用完时才能联系生产者处理器。

当然,这并不总是可能的,但是如果可以这样构建工作项,它可以减少内核之间的相互依赖,并让应用程序扩展到内核的数量。

该技术已在 Solaris OS 中广泛使用。有关详细信息,请参阅多核应用程序编程:适用于 Windows、Linux 和 Oracle Solaris

于 2012-04-08T20:47:58.063 回答
0

这取决于您可以容忍多少陈旧(请告诉我们)。

如果您需要尽可能快地传播更新,这已经是最有效的解决方案。如果您可以容忍几毫秒或几秒的过期数据,您可以为每个内核使用不同的内存位置并使用计时器进行同步。

于 2012-04-08T20:59:20.010 回答