2014-02-19 3 views
3

Я написал проект, который использует некоторые основные функции в openssl, такие как RAND_bytes и des_ecb_encrypt.Сравнение производительности Hyper-threading

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

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

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

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

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

+1

ПРЕДСТАВЛЕНИЕ использования нескольких потоков очень сильно зависит от того, как вы используете нити, и как синхронизировать данные между потоками. Как производительность, когда у вас есть два потока? Или просто наличие программы однопоточной? –

+0

@JoachimPileborg У него нет 'lock' и' synchronize'. Другими словами, каждый поток вычисляет независимо. –

+0

Несмотря на это, тестирование с меньшим количеством потоков (особенно без дополнительных потоков) всегда является хорошей идеей. Если ничего другого, вы узнаете, в какой момент это не поможет добавить больше потоков * и *, если вашему алгоритму действительно помогает многопоточность. –

ответ

2

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

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

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

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

+3

Гиперпоточность более применима, когда поток команд полностью застопорился, например, из-за доступа к памяти, неверного предсказания ветвления или операции деления. Как одно целое, так и FPU-операции, вероятно, поддерживают диспетчер инструкций настолько, что гиперпотока никогда не произойдет. – Potatoswatter

+0

@selalerer Мой проект очень прост.Чтобы вычислить 1000 точек, каждый поток должен вычислить 250 пунктов, когда есть 4 потока. С 8 потоками каждый должен вычислить 125 пунктов. (Что можно назвать SIMD?) –

4

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

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

2

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

При использовании RDRAND (который RAND_bytes будет делать в этом случае), автобус нас ограничивающим фактором. Вы должны пик около 800 МБ/с. Неважно, сколько потоков у вас есть - шина не может передавать данные достаточно быстро. См. Intel rdrand instruction revisited.

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


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

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

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

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


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

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

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

2

Ниже приведены детали и результаты моих тестов MP для Linux и Windows, которые могут вести себя по-разному. Не так много тестов HT, но Linux включают Atom (1 core 2 threads), а 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 точильный тест, который показывает реальные выгоды

     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 
Смежные вопросы