Hyper-threading — с помощью какого теста я могу проверить, включен он или нет?

Есть ли какой-нибудь простой тест производительности, чтобы определить, включен ли HT или нет?
Например, мне это нужно, когда максимальный номер процессора ограничен ядром Linux (NR_CPUS) и нет доступа к BIOS.

Можете ли вы посоветовать какой-либо код для обнаружения, если HT включен?

Я посмотрела Вот или же Вот но это не ответы.
Thanx.

0

Решение

Есть и другой способ — файловая система / sys /, она должна быть более упорядоченной, чем / proc.
/ proc / cpuinfo варьируется в зависимости от версии ядра;

cat / sys / devices / system / cpu / cpu0 / topology / thread_siblings

дает вам список аппаратных потоков, которые работают вместе с ядром cpu0.

https://www.kernel.org/doc/Documentation/cputopology.txt

4) /sys/devices/system/cpu/cpuX/topology/thread_siblings:

internal kernel map of cpuX's hardware threads within the same
core as cpuX
2

Другие решения

По линуксу думаю почитать можно /proc/cpuinfo, но после этого вам нужно немного подумать, чтобы увидеть, есть ли у нас многоядерный процессор или процессор с поддержкой HT и т. д.

Первый, flags предоставит вам поддерживаемые функции и ХТ там будет указывать на поддержку гиперпоточности.

Затем вы должны проверить, количество братьев и сестер Матчи количество ядер на каждом процессоре, так что ищите идентификатор процессора и вычтите оттуда. (Так что, если число братьев и сестер соответствует числу ядер -> нет HT)
Более подробную информацию можно найти здесь: http://richweb.com/cpu_info

1

Проверка флагов даст вам четкий ответ, тогда как тест производительности (особенно если программно проверяет результат) будет иметь некоторую неопределенность. Для какой характеристики производительности мы будем проверять сигнатуру Hyper-Threading (HT)? HT обеспечивает лучшую производительность, когда потоки выполняют различную работу, где разные определяются на основе микроархитектуры. Напротив, отдельные ядра имеют небольшую корреляцию производительности из-за кода, выполняемого на каждом ядре (некоторые факторы все еще существуют, например, пропускная способность памяти или общие кэши).

Существует множество комбинаций, которые вы можете проверить; Я нарисую здесь одно возможное решение. Предполагая, что в системе есть по крайней мере два ядра, которые также могут включать HT. Это представляет 4 логических процессора (LP), на которых могут быть запланированы потоки. Создайте однопоточную программу, которая может использовать ресурсы одного ядра. Теперь дублируйте эту работу, чтобы у нас было два потока, которые могут работать независимо друг от друга. Чтобы затем проверить производительность, установите привязку планирования потоков к разным парам LP в системе. Затем измерьте производительность для бега на разных парах. Пара HT даст другую производительность, чем пара отдельных ядер.

При написании теста производительности у вас есть обычные проблемы с измерением производительности. Обладает ли механизм измерения необходимой детализацией? Изменяется ли переменная, которую вы тестируете (HT по сравнению с ядром), но нет других переменных? Например, находится ли кэш в одном и том же состоянии перед каждым тестом? Или, некоторые ядра совместно используют кэши, поэтому их объединение в тесте даст производительность, отличную от других пар? Теперь, если вы делаете все это, вы должны наблюдать различные результаты производительности в зависимости от того, какую пару LP вы запланировали для своей работы.

0
По вопросам рекламы [email protected]