При использовании Hyper Threading потоки одного физического ядра обмениваются через какой уровень кэша L1 / L2 / L3?

Позволяет ли Hyper Threading использовать L1-кеш для обмена данными между двумя потоками, которые выполняются одновременно на одном физическом ядре, но в двух виртуальных ядрах?

При условии, что оба принадлежат одному процессу, то есть в одном адресном пространстве.

Страница 85 (2-55) - Справочное руководство по оптимизации архитектур Intel® 64 и IA-32: http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architecture-optimisation-manual.pdf

2.5.9 Поддержка технологии Hyper-Threading в микроархитектуре Intel®, кодовое имя Nehalem

...

Более глубокая буферизация и расширенные политики разделения ресурсов и разделов:

  • Реплицированный ресурс для операции HT: состояние регистра, переименованный буфер стека возврата, ITLB большой страницы.

  • Разделенные ресурсы для операции HT: буферы загрузки, буферы хранения, буферы изменения порядка, ITLB малых страниц статически распределяются между двумя логическими процессорами.

  • Ресурсы, совместно используемые в процессе HT: станция резервирования, иерархия кеша, буферы заполнения, как DTLB0, так и STLB.

  • Чередование во время операции HT: операция внешнего интерфейса обычно чередуется между двумя логическими процессорами для обеспечения справедливости.

  • Неизвестные ресурсы HT: исполнительные единицы.


person Alex    schedule 06.01.2015    source источник
comment
дубликат заголовка stackoverflow.com/questions/32979067/, у которого есть аналогичный ответ.   -  person Peter Cordes    schedule 07.10.2015


Ответы (1)


Руководство по оптимизации программного обеспечения архитектуры Intel содержит краткое описание того, как ресурсы процессора распределяются между потоками HT на ядре в главе 2.3.9. Документировано для архитектуры Nehalem, устаревает, но, скорее всего, все еще актуально для текущих, поскольку разбиение логически согласовано:

  • Дублируется для каждого потока HT: регистры, буфер стека возврата, ITLB большой страницы.

  • Статически выделяется для каждого потока HT: буферы загрузки, хранения и переупорядочения, ITLB для малых страниц.

  • Совместно используется между потоками HT: станция резервирования, кеши, буферы заполнения, DTLB0 и STLB.

Ваш вопрос соответствует третьему пункту. В очень конкретном случае, когда каждый поток HT выполняет код из одного и того же процесса, это небольшая авария, обычно вы можете ожидать, что L1 и L2 будут содержать данные, полученные одним потоком HT, которые могут быть полезны для другого. Имейте в виду, что единицей хранения в кэше является строка кэша размером 64 байта. На всякий случай: в противном случае это не является хорошей причиной для применения подхода к планированию потоков, который способствует выполнению двух потоков HT на одном ядре, если ваша ОС поддерживает это. Поток HT обычно работает немного медленнее, чем поток, который получает ядро ​​себе. 30% - это обычное число, о котором говорят, YMMV.

person Hans Passant    schedule 12.01.2015
comment
Большое спасибо! Т.е. Да, оно может? Несмотря на то, что он дает всего 30%, скорость синхронизации снижается в 30 раз: не нужен кеш L3 (10 x Speed ​​UP), QPI и протокол согласования кешей MESIF. - person Alex; 12.01.2015