标题说明了一切:是否有办法使设计为使用单个CPU内核的较旧程序使用多个CPU内核?
标题说明了一切:是否有办法使设计为使用单个CPU内核的较旧程序使用多个CPU内核?
Answers:
不幸的是,不能强迫为单个CPU编写的旧程序使用多个CPU内核。使用多个CPU内核需要多个线程,这些线程需要相互通信,同时确保不发生竞争状况和其他问题。除非经过重写才能使用旧的应用程序,否则不能使它使用超过CPU内核的功能,并且前提是应用程序的性质允许对其进行并行化。
您的目标是什么?性能提高了吗?可悲的是,仅使用1个内核的应用程序将不会使用更多的内核。这就是所谓的“多线程”应用程序的全部含义。
在设计为使用单个内核的程序中,至少有三种技术可以利用多个处理器。这些技术中最直接的方法是使用使用多个内核或可以与应用程序代码至少部分并行执行的库和系统代码。垃圾回收是可以并行化的功能的一个示例,并且可能与应用程序执行并行进行。即使没有自动内存管理,内存释放功能中也可能存在并行性,因为内存分配器可能要做的工作不仅仅是简单地将内存部分标记为可用。
第二种技术是二进制翻译。尽管这可能被认为是“重写应用程序”,但是它是由软件完成的,并且无法访问源代码。使用二进制转换(大多数情况下涉及在不同的ISA上运行遗留代码,利用ISA扩展或针对特定的微体系结构进行优化以及使用动态信息来提供更高的性能),产生线程级并行性似乎并不是大多数研究和开发的主要目标。质量配置文件引导的优化),但潜力是显而易见的。
第三种技术是推测性多线程。目前,(据我所知)没有处理器支持硬件管理的推测性多线程。然而,随着硬件事务性存储器的引入,具有运行时系统的实现方式在某种程度上变得更加实用,因为HTM可用于检测内存使用中的冲突。软件管理的推测性多线程通常会涉及一些二进制转换,但是其推测性证明考虑单独的技术是合理的。
这些技术的实用性受到与现有系统相关的成本(包括线程之间和生成线程之间的通信成本),它们可以利用的有限并行性以及有限的投资回报(可能有益的重要应用程序)的限制。并行化很可能会被重写,如果从这些技术中获取所有应用程序,则根本受益不多(尤其是功率/热限制,允许单个核以比多个核更高的频率运行),并且开发成本很高。然而这些技术确实存在,并且理论上可以在设计为使用单个内核的应用程序中使用多个内核。