Met*_*est 8 c linux multithreading multicore
在我的应用程序中,线程需要暂停一段时间(100个时钟周期).暂停的一种方法是调用nanosleep,但我想它需要对内核进行系统调用.现在我想暂停而不去内核.
请注意,我有足够的内核来运行我的线程,并且我将每个线程绑定到一个单独的内核,因此即使是可以暂停内核一段时间的指令也会很好.我正在使用x86.我只是希望线程在暂停时暂停.我不希望繁忙的循环或系统调用内核.是否有可能做到这一点?我可以暂停一个帖子的最短时间是多少?
_mm_pause 在忙碌等待循环中是要走的路.
不幸的是,它提供的延迟可能随每个处理器系列而变化
http://siyobik.info/main/reference/instruction/PAUSE
Linux上GCC的示例用法:
#include <xmmintrin.h>
int main (void) {
_mm_pause();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在启用MMX的情况下编译:
gcc -o moo moo.c -march=native
Run Code Online (Sandbox Code Playgroud)
您也可以随时使用内联汇编程序:
__asm volatile ("pause" ::: "memory");
Run Code Online (Sandbox Code Playgroud)
对于某些英特尔工程师,您可能会发现这对确定暂停成本非常有用:
NOP指令可以在0.4-0.5时钟之间,PAUSE指令可以消耗38-40个时钟.
http://software.intel.com/en-us/forums/showthread.php?t=48371