2016-05-06 6 views
0

Я 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 выше, я понятия не имею, как же это случилось?!

+0

'-o задать расширенное '(сс | AVX) [0-9] */Proc/CPUInfo | sort -u'.(sort -u, потому что для каждого ядра есть строка, и вы этого не хотите. grep -o печатает только соответствующий текст, а не всю строку, которая соответствует). –

ответ

3

Чтобы проверить, если ваша платформа поддерживает SSE2

gcc -march=native -dM -E - </dev/null | grep SSE 

_mm_pause не выпустит процессор для планировщика, как вы упомянули он предназначен для других целей, например, подсказка для компонентов микроархитектуры.

nanosleep, если используется правильно, должен дать вам более тонкий контроль, чем * 60us (вам может потребоваться изменить планировщик на RT). Я предлагаю вам проверить свой код, чтобы увидеть, если аргументы заданы правильно и т.д.

--Edit--

Точность функции nanosleep зависит от ядра. И его поведение для короткого сна - это просто цикл занятости (см. Ссылку) в glibc. Также невозможно уступить планировщику за интервал (скажем, несколько nano секунд), который меньше, чем отметки планировщика (определяется CONFIG_HZ, который обычно составляет 250, 1000 и т. Д.), Поскольку переключатель контекста только для планировщика при запуске таймера.

Кроме того, просто на холостом ходу процессор на несколько наносекунд не будет экономить энергию. Мощность ЦП сохраняется либо C-state, либо P-State. P-State использует частотное масштабирование, а C-State отключает компонент процессора. Хотя есть инструкция по остановке, которая может сделать такой переход состояния, но для этого требуется время (латентность в нашем диапазоне), что делает его дорогостоящим.

Ссылка:

http://tldp.org/HOWTO/IO-Port-Programming-4.html

http://ena-hpc.org/2014/pdf/paper_06.pdf

+0

ОП сказал 60us, а не 60 мс. –

+0

извините, я прочитал это неправильно ... спасибо, что вызвал его ... Я сделаю редактирование. –

+0

Спасибо, я пытаюсь насадить менее 1 микросекунды, но наномет спать 60 микросекунд, см. Мое редактирование ..... какой сюрприз. – barfatchen

Смежные вопросы