Я написал проект, который использует некоторые основные функции в openssl
такие как RAND_bytes
а также des_ecb_encrypt
,
Мой компьютер имеет i7-2600 (4 ядра и 8 логических процессоров). Когда я запускаю свой проект с 4 потоками, это будет стоить 10 секунд. Когда я запускаю его с 8 потоками, это также стоит 10 секунд.
Я имею в виду, что гиперпоточность не дает мне улучшения производительности. В Linux результат эксперимента такой же.
я нашел Вот говорит мне, что гиперпоточность не дает мне улучшения в некоторых ситуациях. Кроме того, я нашел Вот дай мне несколько интуитивных результатов.
Однако я попытался написать несколько простых тестов и нашел несколько простых примеров, которые покажут, что гиперпоточность не даст мне явного улучшения. К сожалению, я не нахожу это.
Итак, мои вопросы: есть ли какие-то simple
тесты показывают, что гиперпоточность не даст мне улучшения производительности.
Вы можете обнаружить, что гиперпоточность помогает больше кода, который использует большие объемы памяти, так что процессор регулярно блокируется при извлечении из памяти.
По моему опыту, довольно сложно найти «простой код», который демонстрирует преимущества гиперпоточности. Это, как правило, более сложные примеры, которые показывают выгоду. Тем не менее, выгода, скорее всего, не будет в 2 раза больше, чем от «отсутствия гиперпоточности». Рассчитайте на улучшение на 20-30%.
Гиперпоточность использует тот факт, что процессор имеет много компонентов, и когда один из них используется, когда нет гиперпоточности, остальные просто простаивают. Вы можете попробовать написать два типа потоков, один из которых выполняет целочисленные вычисления (которые, будем надеяться, будут использовать ALU), а другой — арифметику с плавающей запятой (которая, будем надеяться, будет использовать FPU).
Я не пробовал это сам, но кажется, что в таком случае гиперпоточность должна улучшить производительность.
Чтобы показать обратное, вы можете использовать только один тип потоков (либо потоки, выполняющие только целочисленные операции, либо потоки, выполняющие только операции с плавающей запятой).
Также может быть, что ваш тест некорректен, но чтобы узнать, так ли это, нам понадобится дополнительная информация об этом тесте.
Я написал проект, который использует некоторые основные функции в 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
,
Кроме того, приложения для бенчмаркинга имеют свои особенности. Стресс-тест шифрования может выявить различия не так часто, как вы надеетесь их увидеть. Смотрите, например, Инструменты бенчмаркинга.
Ниже приведены подробности и результаты моих тестов 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