c++ - 如何只在一个 CPU 上运行 C++ 程序?

标签 c++ process cpu multitasking

我一直在阅读有关如何检查我的机器有多少个 CPU 或内核的信息(MacBook OS X、Sierra、v.10.12、2GHz Intel Core i7),但是有很多不同的答案,例如:

How to discover number of *logical* cores on Mac OS X?

我需要的是确保我的 C++ 程序只运行 1 个 CPU(并且,如果可能,只在一个内核上运行,即没有调度,即我的程序应该有一个专用内核运行 = > 我不确定我的 Mac OS X 架构实际上是如何组织的)。

我不确定这是否应该在实现、编译或执行级别完成。我看到有人在谈论 Ubuntu 的 taskset,但我不确定这是否适合我(也许它甚至不存在用于 Mac OS X)。

注意:如果您觉得这个问题应该在另一个 Stack Exchange 的网站上提出,请告诉我,我会把它移到那里。实际上我希望我的解决方案是跨平台的,所以也许这不是问这个问题的最佳场所。

最佳答案

流程是有计划的,非计划流程的想法是矛盾的。

也就是说,将自己限制在一个 CPU 上几乎是 C++ 中的默认设置。 main 从一个线程开始,除非您创建额外的线程,否则就是这样。

您提到您想要一个“专用”核心。有将线程固定到核心的想法,实现了这一点,但您可以弄清楚如果两个程序将自己固定到同一个核心会发生什么。当两个程序共享固定的核心时,另一个核心可能完全未使用。这更像是 super 计算机的一个功能,其中内核对内存的访问权限不统一,您应该匹配 CPU 内核和内存分配。

关于c++ - 如何只在一个 CPU 上运行 C++ 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192158/

相关文章:

c++ - 为什么 std::ostream 不能移动?

linux - 我如何更改 debian 中的优先级?

基于进程名称的 Android 应用程序信息

c - 如何设置特定 pthread 的 CPU 关联性?

c++ - 嵌套在函数中的函数声明的命名空间

c++ - 我的 strcpy_s 不能与我的 char *pointer 一起使用,为什么?

c++ - 如何控制 C++ DLL 调试符号加载?

c++ - boost 过程 : captured stdout is buffered until size X

java - JVM 执行 Java 应用程序时,OS 的作用是什么?为什么我们需要操作系统?

c++ - 无符号数学是否需要更多 CPU 指令?