Я refered на этой странице: https://software.intel.com/en-us/articles/benefitting-power-and-performance-sleep-loops, следующий я не могу понять:_mm_pause в GCC на Intel
«команда паузы дает подсказку процессору, что вызывающий поток находится в» спин- wait ". Кроме того, команда pause является no-op при использовании на архитектурах x86, которые не поддерживают Intel SSE2, что означает, что она будет выполняться без каких-либо действий или сбоев. Хотя это означает, что старые архитектуры x86, поддержка Intel SSE2 не увидит преимуществ паузы, это также означает, что вы можете сохранить один простой кодовый путь, который работает по всем направлениям ».
Мне нравится знать, lscpu в linux покажет информацию о процессоре, но я понятия не имею, есть ли у процессора поддержка SSE2 или нет, как я могу проверить его сам?!
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 24
On-line CPU(s) list: 0-23
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 63
Model name: Intel(R) Xeon(R) CPU E5-2643 v3 @ 3.40GHz
Stepping: 2
CPU MHz: 3599.882
BogoMIPS: 6804.22
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 20480K
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23
Кроме того, в настоящее время я использую _mm_pause или __asm летучий ("пауза" ::: "память"); процессор простаивает будет исчерпано до нуля в этом ядре, но следующий код, используя nanosleep слишком медленно для меня:
while(1){
nanosleep();
dosomething..... ;
}
Я наблюдаю nanosleep будет задержаны 60 микросекунд в моей коробке, Есть ли решение быстрее, чем nanosleep также не исчерпывать ядро процессора, как _mm_pause() или __asm volatile ("pause" ::: "memory")?!
Edit:
struct timespec req={0};
req.tv_sec=0;
req.tv_nsec=100 ;
nanosleep(&req,NULL) ;
Это nanosleep стоить 60 микросекунд в коробке у меня есть какие CPU выше, я понятия не имею, как же это случилось?!
'-o задать расширенное '(сс | AVX) [0-9] */Proc/CPUInfo | sort -u'.(sort -u, потому что для каждого ядра есть строка, и вы этого не хотите. grep -o печатает только соответствующий текст, а не всю строку, которая соответствует). –