如何强制编译器只使用一个内核?

Posted

技术标签:

【中文标题】如何强制编译器只使用一个内核?【英文标题】:How to force compiler to use one core only? 【发布时间】:2014-04-29 13:19:38 【问题描述】:

我注意到,MingW 和 GCC 编译器使用多个内核(如果可用)。

例如:

for (long i = 0; i < 100000; ++i)

    some_complicated_calculation();

如果我打开任务管理器/系统监视器,我可以看到使用了多个(对我来说:2)核心。

编译器如何决定哪些代码可以在多个内核上运行?

编辑

我的代码不包含任何多线程代码。 我很好奇为什么我的程序(而不是编译器)使用多个内核。

【问题讨论】:

可能是您的操作系统将进程分派到不同的内核。 gcc.gnu.org/wiki/AutoParInGCC 澄清一下 - 您是在谈论使用多核的编译器(即并行编译),还是使用多核的程序(即多线程运行)? 【参考方案1】:

只要 some_complicated_calculation() 内部没有什么特别的创建线程或使用异步 (C++11) 或类似内容,它就使用单个内核。

您在任务管理器上看到的活动不能与迭代的可执行文件相关。它可能与您正在从事的工作完全无关。

【讨论】:

【参考方案2】:

看起来 GNU 软件无线电中提供的 thread_bind_to_processor 是您正在寻找的: http://gnuradio.org/doc/doxygen/namespacegr_1_1thread.html#aab5195edcd94db5c71ecbfef9d578fb7

【讨论】:

以上是关于如何强制编译器只使用一个内核?的主要内容,如果未能解决你的问题,请参考以下文章

如何编译一个内核

如何在Linux上安装内核头文件

如何重新编译linux内核

我们如何强制编译器没有结构填充?请解释

在遇到用户创建的错误后,如何以编程方式强制编译器停止编译过程?

如何强制 OpenMPI 使用 GCC 而不是 ICC?是不是需要重新编译 OpenMPI?