可以让单线程程序使用多个核心吗?

可以让单线程程序使用多个核心吗?

标题说明了一切:有没有办法让设计为使用单个 CPU 核心的旧程序使用多个 CPU 核心?

答案1

不幸的是,为单个 CPU 编写的旧程序无法强制使用多个 CPU 核心。使用多个 CPU 核心需要多个线程,这些线程需要相互通信,同时确保不会发生竞争条件和其他问题。除非重写旧应用程序,否则无法使用多个 CPU 核心,并且只有应用程序的性质允许其并行化时才可以。

答案2

你的目标是什么?提高性能?遗憾的是,设计为仅使用 1 个核心的应用程序不会使用更多核心。这就是“多线程”应用程序的讨论内容。

答案3

在为使用单核而设计的程序中,至少有三种技术可以利用多处理器。这些技术中最直接的就是使用使用多核或至少可以部分与应用程序代码并行执行的库和系统代码。垃圾收集是可以并行化的功能的一个示例,可能可以与应用程序执行并行执行。即使没有自动内存管理,内存释放函数中也存在一定的并行性,因为内存分配器可能还有一些工作要做,而不仅仅是将内存部分标记为可用。

第二种技术是二进制翻译。虽然这可能被认为是“重写应用程序”,但它是由软件完成的,无需访问源代码。产生线程级并行性似乎不是使用二进制翻译的大多数研究和开发的主要目标(这通常涉及在不同的 ISA 上运行遗留代码、利用 ISA 扩展或针对特定微架构进行优化,以及使用动态信息提供更高质量的配置文件引导优化),但潜力是显而易见的。

第三种技术是推测性多线程。目前没有处理器(据我所知)支持硬件管理的推测性多线程。但是,随着硬件事务内存的引入,让运行时系统实现这种技术变得更加实用,因为 HTM 可用于检测内存使用中的冲突。软件管理的推测性多线程通常涉及一些二进制转换,但其推测性质证明有必要考虑一种单独的技术。

这些技术的实用性受到现有系统相关成本(包括线程间通信成本和生成线程成本)的限制,它们可以利用的并行性有限,投资回报有限(可以并行化的重要应用程序可能会被重写,许多应用程序从这些技术中获益甚微(尤其是由于功率/热量限制,允许单核以比多核更高的频率运行),而且开发成本很高)。然而,这些技术存在,并且理论上可以在设计为使用单核的应用程序中使用多核。

答案4

不,不可能。程序明确地被编写为使用多个核心。在多个核心中完成这项工作并非易事。它需要同步所有线程。比如一个线程扔球,另一个线程接球,一个线程擦球,一个线程清洁,一个线程检查球中是否有足够的空气。现在想象一下每个角色都在一个线程中独立运行。当球没有被扔出时,有人试图接球。或者当球正在被玩时,有人试图擦球。或者两个角色试图同时接球和扔球。有很多方法可以崩溃。因此,程序员需要仔细重新设计单核应用程序,以便它能够利用多个核心。

相关内容