#ассемблер #x86_64
hlt "останавливает" процессор до прихода прерывания, что снижает нагрузку. pause тоже "останавливает", но не могу найти конкретного описания. Коды у них разные.
Ответы
Ответ 1
Ух. Попробую ответить. Основная идея, как я понял, в том, что HLT (halt) - останавливает логический процессор, освобождая доступ к общим ресурсам в физическом пакете, которыми могут воспользоваться все активные логические процессоры в этом же пакете. А PAUSE используется для того чтобы повысить производительность в процессорах с технологией Hyper-Threading. Суть в том что код, который ожидает освобождения чего-либо путем обращения к семафору, находится в wait цикле. Если код выйдет из цикла и обнаружит, что порядок в памяти нарушен (memory order violation), процессор просто сбросит конвейер (pipeline flush). Это приведет к проседанию производительности в целом. PAUSE таким образом нужен для того, чтобы подсказать процессору что кодовая последовательность является wait циклом, и помогает избежать memory order violation и pipeline flush. Также эта инструкция дает какие-то бонусы в энергопотреблении, но я не вчитывался. Можете почитать еще тут: https://xem.github.io/minix86/manual/intel-x86-and-64-manual-vol3/o_fe12b1e2a880e0ce-302.html
Комментариев нет:
Отправить комментарий