我有一台 2011 年初的四核 i7 Mac。由于超线程,很多程序都报告有 8 个“核心”。如果我要编写一个并行执行的程序,我可以启动该程序的 8 个实例还是只启动 4 个实例?
我知道我可以启动任意数量的线程,但我会看到 4 个或 8 个程序实例并行执行吗?
答案1
Intel Core i7 处理器有 4 个物理核心,但每个核心一次最多可以输入 2 个线程,以“可用逻辑 CPU”的形式向操作系统显示总共 8 个线程。
实际上,单个核心一次只能处理一个线程,但它具有特殊的排队/计时/调度机制,允许 2 个线程同时处于“管道”的不同阶段。这使 CPU 能够比一次只处理一个线程更快地完成 2 个线程。由于两个线程共享同一个管道,因此性能优势显然不会是 2 倍。大多数测试将优势定为 10% 到 50% 之间,具体取决于正在执行的指令类型。
回答你的问题,如果你启动了 4、8 或 16 个程序实例,它们都会“运行”,但每个实例的指令都会根据可用的线程数排队。一旦超出可用的物理核心数(例如 5 个或更多),性能就会降低,因为任何超出基本 4 个的线程都将共享一个物理 CPU 核心。
最后,一旦达到可用 CPU 线程能力的极限(超过 8 个线程),操作系统就会开始调度/排队指令,等待管道中的指令完成。理想情况下,您要避免超出可用线程,因为它会对性能产生负面影响并成为系统瓶颈。