гиперпоточность — какой поток запускается, когда оба потока готовы

Идея гиперпоточности Intel (насколько я понимаю) заключается в том, что одно ядро ​​​​используется для двух потоков с временным мультиплексированием.

HW поддерживает это за счет удвоения ресурсов, связанных с состоянием, и разделения времени с другими ресурсами. Если работающий поток останавливается (например, из-за того, что он должен получить новые данные из ОЗУ), другой поток получает доступ к общим ресурсам. Результатом является более эффективное использование общих ресурсов.

Поэтому, если один поток не готов, другому потоку разрешено работать. Другими словами, переключение потока может произойти, когда исполняемый поток останавливается.

Я пытался выяснить, что произойдет, если оба потока будут готовы в течение длительного времени, но я не смог найти информацию.

Что произойдет, если работающий поток не остановится?

Будет ли работающий поток продолжаться до тех пор, пока он готов?

Переключится ли ядро ​​на другой поток через некоторое время? Если да, то каковы критерии переключения? Он управляется HW или SW?


person 4386427    schedule 09.05.2015    source источник


Ответы (1)


Hyperthreading — это одновременная многопоточность (SMT). Таким образом, он не просто переключается туда и обратно в каком-то относительно грубом масштабе (например, приостановки), в случае Sandy Bridge и новее сборщик и декодер чередуются между потоками. Единицы выполнения распределяются на конкурентной основе, поэтому, даже если ни один из потоков не останавливается, они все же могут вместе добиться лучшего использования, чем если бы они работали поодиночке (но это нетипично). Таким образом, проблемы, которые вы определили, не применимы, потому что, во-первых, это так не работает.

person harold    schedule 09.05.2015
comment
Спасибо за ответ. Итак, вы говорите, что я неправильно понял концепцию. Я немного удивлен, поскольку я читал это на нескольких интернет-сайтах. Пример: en.wikipedia.org/wiki/Hyper-threading, в котором указаны эти общие ресурсы. позволяют двум логическим процессорам более эффективно работать друг с другом и позволяют одному заимствовать ресурсы у другого, когда один застопорился... (продолжение в следующем комментарии) - person 4386427; 09.05.2015
comment
(продолжение комментария) ... и, особенно, когда процессор завис, процессор, оснащенный гиперпоточностью, может использовать эти ресурсы выполнения для выполнения другой запланированной задачи. (Процессор может зависнуть из-за промаха кеша, неверного предсказания ветвления или зависимости данных.). Другой пример: stackoverflow.com/questions/23078766 / В любом случае, если я все понял неправильно, мне нравится читать об этом - можете ли вы дать несколько хороших ссылок? Спасибо. - person 4386427; 09.05.2015
comment
Что ж, по-прежнему верно, что если поток остановился, другой поток может заполнить пробел. Но он не переключается на этот поток, он уже выполнял его все время, теперь ему просто доступно больше ресурсов. - person harold; 09.05.2015
comment
в вашем ответе указано, что единицы исполнения распределяются на конкурентной основе. Можете ли вы уточнить это немного. Как решается, какой поток получит исполнительный модуль, необходимый обоим потокам? - person 4386427; 09.05.2015
comment
Как и обычно, будет выбрана самая старая µop, которая готова (т. е. не ожидает, пока ее операнды станут доступными), независимо от того, из какого потока она поступила. - person harold; 09.05.2015