如何强制编译器只使用一个内核?
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
【讨论】:
以上是关于如何强制编译器只使用一个内核?的主要内容,如果未能解决你的问题,请参考以下文章