超线程性能比较

时间:2014-02-19 08:19:01

标签: c++ multithreading performance openssl hyperthreading

我编写了一个项目,该项目使用openssl中的一些基本功能,例如RAND_bytesdes_ecb_encrypt

我的电脑有i7-2600(4核和8逻辑CPU)。当我用4个线程运行我的项目时,它将花费10秒。当我使用8个线程运行它时,它也需要10秒。

我的意思是超线程并没有给我任何性能提升。在Linux中,实验结果是一样的。

我发现here告诉我,在某些情况下,超线程并没有给我一些改进。另外,我发现here给了我一些直观的结果。

但是,我尝试编写一些简单的测试,并发现一些简单的例子,显示超线程不会给我带来明显的改进。可悲的是,我找不到它。

所以,我的问题是,是否有一些simple测试表明超线程不会给我任何性能提升。

4 个答案:

答案 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