我编写了一个项目,该项目使用openssl
中的一些基本功能,例如RAND_bytes
和des_ecb_encrypt
。
我的电脑有i7-2600(4核和8逻辑CPU)。当我用4个线程运行我的项目时,它将花费10秒。当我使用8个线程运行它时,它也需要10秒。
我的意思是超线程并没有给我任何性能提升。在Linux中,实验结果是一样的。
我发现here告诉我,在某些情况下,超线程并没有给我一些改进。另外,我发现here给了我一些直观的结果。
但是,我尝试编写一些简单的测试,并发现一些简单的例子,显示超线程不会给我带来明显的改进。可悲的是,我找不到它。
所以,我的问题是,是否有一些simple
测试表明超线程不会给我任何性能提升。
答案 0 :(得分:4)
您可能会发现超线程有助于更多地使用大量内存的代码,因此处理器在从内存中获取时会被定期阻止。
根据我的经验,很难找到显示超线程优势的“简单代码”。它往往是更复杂的例子,显示了好处。尽管如此,这种好处很可能不会是“没有超线程”的2倍。依靠获得20-30%的改善。
答案 1 :(得分:2)
超线程利用了CPU具有许多组件的事实,当使用一个组件时,当没有超线程时,其他组件只是闲置在那里。您可以尝试编写两种类型的线程,一种执行整数计算(希望使用ALU),另一种执行浮点运算(希望使用FPU)。
我自己没有尝试过,但似乎在这种情况下,超线程应该会提高性能。
为了显示相反的情况,您只能使用一种类型的线程(线程只执行整数运算或线程只执行浮点运算)。
也可能是您的测试存在缺陷,但为了了解情况,我们需要有关该测试的更多信息。
答案 2 :(得分:2)
我编写了一个项目,它使用openssl中的一些基本功能,如RAND_bytes和des_ecb_encrypt ...我的计算机有i7-2600(4核和8逻辑CPU)。当我用4个线程运行我的项目时,它将花费10秒。当我使用8个线程运行它时,它也需要10秒。
当使用RDRAND
(在这种情况下RAND_bytes
将执行此操作)时,总线是限制因素。你的峰值应该在800MB /秒左右。无论你有多少线程 - 总线都不能足够快地传输数据。请参阅Intel rdrand instruction revisited。
如果您使用AES,那么您可能会看到比DES / 3DES观测更好的加速。您的Ivy Bridge有AES-NI
,它可以达到近1.3个周期/字节,这应该是大约两倍或三倍的AES是软件。为确保您使用AES-NI
说明,您必须使用EVP_*
接口。
我在这里发现,超线程在某些情况下并没有给我一些改进。另外,我在这里给我一些直观的结果。
我认为@selalerer和@Mats Petersson回答了你的问题。问题不会线性扩展,并且您将遇到最大加速。英特尔约占30%。
英特尔最新架构优于超线程执行的无序执行,因为它应该更高效。了解Silvermont处理器内核。
但如果你想要正式深入研究,那么请看一本关于计算机工程的书。这是我在大学学习时使用的那本书:Computer Organization and Design(现在可能有点过时了)。
但是,我尝试编写一些简单的测试,并发现一些简单的例子,显示超线程不会给我带来明显的改进。
OpenSSL还有一个基准测试应用程序。请参阅<openssl source>/apps/speed.c
中的源代码。
此外,基准测试应用程序有自己的个性。加密压力测试可能无法显示差异,因为您希望看到差异。例如,请参阅Benchmarking Tools。
答案 3 :(得分:2)
以下是我的Linux和Windows MP基准测试的详细信息和结果,其行为可能有所不同。没有多少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是否提供更好或更差的性能,你可以选择。以下是i7上的RandMem结果(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