我已经在这里读了很多有关此主题的文章(例如,stackoverflow.com/questions/1713554/threads-processes-vs-multithreading-multi-core-multi-core-multiprocessor---- 多核,多核和超线程)和其他地方(例如,ixbtlabs.com/articles2/cpu/rmmt-l2-cache.html或software.intel.com/en-us/articles/multi-core-introdaction/),但我仍然不确定关于一个几件事似乎很简单。所以我以为我只是问。

(1)是一个多核处理器,其中每个核心具有与多处理器系统有效相同(当然是处理器速度,高速缓存大小等)的高速缓存?

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

感谢您的帮助!

有帮助吗?

解决方案

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

如果您将2个单核处理器与1个双核处理器进行比较,并且单个核心处理器都具有相同数量的数据缓存(以相同速度运行),则您有更多的缓存,因此更多的图像可以适合于缓存中,而且如果图像数据的处理必须重复加载和/或存储到此数据,则很可能会以相同的时钟速度更快地进行。

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

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

我建议您最终都会尝试将线程数量限制为每核3到10个,以供一般使用。这些线程都将互相竞争为该高速缓存空间,因此太多的螺纹将使之做得太多,以便在重新安排该线程之前将来自1个线程的所有数据推出。另外,如果每个线程可以通过鼓励每个线程的堆栈空间留在缓存中,则可以在几个图像文件上循环,因为您的堆栈较少。您还可以减少OS必须使用的内存量来跟上线程。

您最大的胜利是,当您可以与磁盘,网络或人类交互之类的缓慢访问重叠处理时,因此只有足够的线程来保持CPU忙碌处理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top