【发布时间】:2021-09-27 08:23:16
【问题描述】:
在谈论多线程时,通常似乎线程被视为平等 - 与主线程相同,但在其旁边运行。
但是,在某些新处理器上,例如 Apple "M" series 和即将推出的 Intel Alder Lake 系列,并非所有线程都具有同样的性能,因为这些芯片具有独立的高性能内核和高效率但速度较慢的内核。
并不是说还没有超线程之类的东西,但这似乎对性能有更大的影响。
有没有办法查询 std::thread 的属性并强制它们在 C++ 中运行哪些内核?
【问题讨论】:
-
线程未绑定到芯片。操作系统根据需要来回移动线程
-
@MooingDuck 对于 M1 和 macOS,很可能会询问操作系统它应该在高效核心上运行更可取的线程。而且您理论上可以锁定(取决于操作系统和cpu)将进程/线程锁定到单个cpu。这通常是为虚拟主机做一台服务器。
-
您将需要使用 OS API 将线程专用于特定内核。无法保证线程将在不同的内核上运行或仅在内核上执行。线程可以在单核(多核)系统上运行,就像其他任务一样。
-
一个可能存在类似问题的现有硬件开发是numa。 NUMA 感知代码必须处理分配给不同处理器的线程(以最好地利用不同的内存访问速度)的方式可能很有见地。
-
你知道,内核是为了处理多任务而发明的。如果你认为你可以比内核更好地处理任务,那你就错了。您可以使用一些操作系统级别的 API 来控制您的线程,在 linux 上它们是
pthreadAPI。
标签: c++ multithreading performance intel apple-m1