1

我已经在这里阅读了很多关于这个主题的内容(例如,stackoverflow.com/questions/1713554/threads-processes-vs-multithreading-multi-core-multiprocessor-how-they-are 或multi-CPU, multi-core和超线程)和其他地方(例如,ixbtlabs.com/articles2/cpu/rmmt-l2-cache.html 或 software.intel.com/en-us/articles/multi-core-introduction/),但我仍然是不确定一些看起来非常简单的事情。所以我想我只是问问。

(1) 每个内核都有专用高速缓存的多核处理器是否与多处理器系统一样有效(当然要在处理器速度、高速缓存大小等方面进行平衡)?

(2) 假设我有一些图像要分析(即计算机视觉),并且我将这些图像加载到 RAM 中。我的应用程序为每个需要分析的图像生成一个线程。这个应用程序在共享缓存多核处理器上的运行速度是否会比在专用缓存多核处理器上运行得慢,并且后者的运行速度是否与在等效的单核多处理器机器上运行的速度相同?

感谢您的帮助!

4

1 回答 1

0

缓存的大小很重要。为此,我假设 x86 处理器并且仅使用 L2 缓存,它在双核处理器上共享。

如果您将 2 个单核处理器与 1 个双核处理器进行比较,并且单核处理器都具有相同数量的数据缓存(以相同的速度运行),那么您有更多的缓存,因此更多部分的图像可以放入缓存,并且很可能如果图像数据的处理必须重复加载和/或存储到该数据,那么在相同的时钟速度下这会更快。

如果您将 2 个单核处理器与 1 个双核处理器进行比较,其数据缓存是每个单核处理器数据缓存大小的两倍,那么大约一半的数据缓存将用于每个处理器的工作。除了每个独立线程必须使用的图像数据之外,很可能还有一些共享数据。如果此共享数据存储在共享数据缓存中,那么与 2xSingle 内核设置相比,它可以更容易地在两个内核之间共享。在每个共享数据块的 2xSingle 核心设置中,其中一个缓存会存储它,当另一个处理器需要使用该数据时会有一点开销。

双核机器还使线程更容易在同一处理器模块上从一个内核迁移到另一个内核,因为线程的新处理器的缓存不需要填充,而另一个处理器的数据不再需要占用空间。

我建议无论您最终得到什么结果,您都可以随时尝试将线程数限制为每核 3 到 10 个以供一般使用。线程都将相互竞争该缓存空间,因此太多会导致来自 1 个线程的所有数据在重新调度该线程之前被推出。此外,如果每个线程都可以遍历几个图像文件,那么您可以通过鼓励每个线程的堆栈空间保留在缓存中来获得一点好处,因为您有更少的堆栈。您还可以减少操作系统为跟上线程而必须使用的内存量。

您最大的胜利是当您可以将处理与慢速访问重叠时,例如磁盘、网络或人工交互,因此您需要足够的线程来保持 CPU 忙于处理。

于 2010-05-04T18:42:34.800 回答