Сравнение производительности Hyper-Threading

Я написал проект, который использует некоторые основные функции в openssl такие как RAND_bytes а также des_ecb_encrypt,

Мой компьютер имеет i7-2600 (4 ядра и 8 логических процессоров). Когда я запускаю свой проект с 4 потоками, это будет стоить 10 секунд. Когда я запускаю его с 8 потоками, это также стоит 10 секунд.

Я имею в виду, что гиперпоточность не дает мне улучшения производительности. В Linux результат эксперимента такой же.

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

Однако я попытался написать несколько простых тестов и нашел несколько простых примеров, которые покажут, что гиперпоточность не даст мне явного улучшения. К сожалению, я не нахожу это.

Итак, мои вопросы: есть ли какие-то simple тесты показывают, что гиперпоточность не даст мне улучшения производительности.

3

Решение

Вы можете обнаружить, что гиперпоточность помогает больше кода, который использует большие объемы памяти, так что процессор регулярно блокируется при извлечении из памяти.

По моему опыту, довольно сложно найти «простой код», который демонстрирует преимущества гиперпоточности. Это, как правило, более сложные примеры, которые показывают выгоду. Тем не менее, выгода, скорее всего, не будет в 2 раза больше, чем от «отсутствия гиперпоточности». Рассчитайте на улучшение на 20-30%.

4

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

Гиперпоточность использует тот факт, что процессор имеет много компонентов, и когда один из них используется, когда нет гиперпоточности, остальные просто простаивают. Вы можете попробовать написать два типа потоков, один из которых выполняет целочисленные вычисления (которые, будем надеяться, будут использовать ALU), а другой — арифметику с плавающей запятой (которая, будем надеяться, будет использовать FPU).

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

Чтобы показать обратное, вы можете использовать только один тип потоков (либо потоки, выполняющие только целочисленные операции, либо потоки, выполняющие только операции с плавающей запятой).

Также может быть, что ваш тест некорректен, но чтобы узнать, так ли это, нам понадобится дополнительная информация об этом тесте.

2

Я написал проект, который использует некоторые основные функции в openssl, такие как RAND_bytes и des_ecb_encrypt … Мой компьютер имеет i7-2600 (4 ядра и 8 логических процессоров). Когда я запускаю свой проект с 4 потоками, это будет стоить 10 секунд. Когда я запускаю его с 8 потоками, это также стоит 10 секунд.

Когда используешь RDRAND (который RAND_bytes будет делать в этом случае) автобус ограничивающий фактор. Вы должны достигнуть пика на уровне около 800 МБ / с. Неважно, сколько у вас потоков — шина не может передавать данные достаточно быстро. Увидеть Инструкция Intel rdrand вновь.

Если вы использовали AES, то вы можете увидеть лучшее ускорение по сравнению с наблюдениями DES / 3DES. Ваш Ivy Bridge имеет AES-NI и он может достигать почти 1,3 цикла / байт, и это должно быть около двойного или тройного AES программного обеспечения. Чтобы убедиться, что вы используете AES-NI инструкции, вы должны использовать EVP_* интерфейсы.


Я обнаружил, что здесь говорится, что гиперпоточность не дает мне улучшения в некоторых ситуациях. Кроме того, я нашел здесь дать мне некоторые интуитивные результаты.

Я думаю, что @selalerer и @Mats Petersson ответили на ваш вопрос. Проблема не масштабируется линейно, и вы столкнетесь с максимальным ускорением. Intel утверждает, что около 30%.

Новейшая архитектура Intel отдает предпочтение выполнению Out-Of-Order, а не Hyper-Threading, поскольку оно должно быть более эффективным. Читайте о процессорных ядрах Silvermont.

Но если вы хотите получить формальное глубокое погружение, посмотрите книгу по компьютерной инженерии. Вот книга, которую мы использовали, когда я изучал ее в колледже: Компьютерная организация и дизайн (вероятно, немного устарела).


Однако я попытался написать несколько простых тестов и нашел несколько простых примеров, которые покажут, что гиперпоточность не даст мне явного улучшения.

OpenSSL также имеет приложение для тестирования. Смотрите исходный код в <openssl source>/apps/speed.c,

Кроме того, приложения для бенчмаркинга имеют свои особенности. Стресс-тест шифрования может выявить различия не так часто, как вы надеетесь их увидеть. Смотрите, например, Инструменты бенчмаркинга.

2

Ниже приведены подробности и результаты моих тестов MP для Linux и Windows, которые могут вести себя по-разному. Немного HT, но тесты Linux включают Atom (1 ядро ​​2 потока), а Windows показывает результаты Core i7 (4 + 4).

http://www.roylongbottom.org.uk/linux%20multithreading%20benchmarks.htm

http://www.roylongbottom.org.uk/quad%20core%208%20thread.htm

Выберите, в зависимости от того, что вы хотите доказать, обеспечивает ли HT лучшую или худшую производительность. Ниже приведены результаты RandMem для i7 (Linux, похоже, лучше использует этот тест). Для таких как i7, вы также должны рассмотреть Turbo Boost, который может быть ниже с несколькими потоками.

             CPUs          MBytes Per Second Using Threads        Gain At Threads
/HTs         1       2       4       6       8     2     4     6     8
Serial RD
Core i7     4/8 L1   11458   22661   37039   43717   46374   2.0   3.2   3.8   4.0
930             L2   10380   20832   32853   41711   42839   2.0   3.2   4.0   4.1
#### MHz        L3    8828   17743   29610   38414   40330   2.0   3.4   4.4   4.6
Win 764        RAM    4266    8712   17347   24946   25589   2.0   4.1   5.8   6.0

Serial RW
Core i7     4/8 L1   15282   13724   16240   16209   18379   0.9   1.1   1.1   1.2
930             L2   12223   18216   25326   28104   27047   1.5   2.1   2.3   2.2
#### MHz        L3   10234   19266   21931   24450   26351   1.9   2.1   2.4   2.6
Win 764        RAM    4533    7656   13876   14543   13390   1.7   3.1   3.2   3.0

Random RD
Core i7     4/8 L1   11266   22548   38174   45592   47141   2.0   3.4   4.0   4.2
930             L2    6233   12463   20059   24986   25667   2.0   3.2   4.0   4.1
#### MHz        L3    3499    6915    9211   10002    9531   2.0   2.6   2.9   2.7
Win 764        RAM     459     909    1241    1398    1364   2.0   2.7   3.0   3.0

Random RW
Core i7     4/8 L1   14375    3027    2780    2901    3297   0.2   0.2   0.2   0.2
930             L2    5887    4555    6117    6693    7281   0.8   1.0   1.1   1.2
#### MHz        L3    3104    4604    4721    5047    4933   1.5   1.5   1.6   1.6
Win 764        RAM     428     860     899     948    1026   2.0   2.1   2.2   2.4

#### 2.8 GHz running at up to 3.06 GHz via Turbo Boost, dual channel 1066 MHz DDR3 RAM

Затем бенчмарк MP Whetstone, который показывает реальный выигрыш

                      MWIPS  MFLOP  MFLOP  MFLOP   COS    EXP   FIXPT   IF    EQUAL
CPU              MHz            1      2      3    MOPS   MOPS   MOPS   MOPS   MOPS

Core i7 1 Thrd  ####   3115   1065    886    738   79.3   39.7   2447   2936   1154

Core i7 Win7    ####  21690   8676   7621   5844    531    291  16643  12027   5034
Quad Core Thread 1            1091   1027    728   66.4   36.5   2050   1501    629
Plus HT   Thread 2            1089   1037    742   66.0   36.5   2090   1507    630
Thread 3            1090    946    742   66.8   36.5   2069   1534    631
Thread 4            1092   1037    727   66.6   36.6   2031   1501    630
Thread 5            1042    959    736   66.4   36.5   1912   1483    630
Thread 6            1091    874    723   66.6   36.1   2049   1507    629
Thread 7            1090    867    725   65.6   36.3   2094   1516    631
Thread 8            1091    874    722   66.3   36.3   2350   1476    624

Gain %                  696    815    860    792    670    733    680    410    436
2
По вопросам рекламы [email protected]