3

我写了一个项目,它使用了一些基本功能,openssl例如RAND_bytesdes_ecb_encrypt

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

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

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

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

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

4

4 回答 4

4

您可能会发现超线程对使用大量内存的代码更有帮助,因此处理器在从内存中获取时经常被阻塞。

根据我的经验,很难找到显示超线程优势的“简单代码”。它往往是更复杂的例子来显示好处。尽管如此,收益很可能不会是“无超线程”的 2 倍。指望获得 20-30% 的改进。

于 2014-02-19T08:42:07.663 回答
2

我写了一个项目,它使用了openssl中的一些基本功能,例如RAND_bytes和des_ecb_encrypt...我的电脑有i7-2600(4核和8个逻辑CPU)。当我用 4 个线程运行我的项目时,它将花费 10 秒。当我用 8 个线程运行它时,它也需要 10 秒。

使用时RDRANDRAND_bytes在这种情况下会这样做),总线是我们的限制因素。您应该以大约 800MB/秒的速度达到峰值。不管你有多少线程——总线传输数据的速度不够快。请参阅重新访问 Intel rdrand 指令

如果您使用 AES,那么您可能会看到比 DES/3DES 观察更好的加速。您的 Ivy Bridge 拥有AES-NI并且可以实现几乎 1.3 个周期/字节,这应该是软件的两倍或三倍。为确保您使用AES-NI说明,您必须使用EVP_*界面。


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

我认为@selalerer 和@Mats Petersson 回答了你的问题。该问题不会线性扩展,并且您将遇到最大的加速。英特尔称其约占 30%。

英特尔的最新架构支持乱序执行而不是超线程执行,因为它应该更高效。阅读有关 Silvermont 处理器内核的信息。

但是,如果您想进行正式的深入研究,请参阅有关计算机工程的书。这是我在大学学习时使用的书:计算机组织与设计(现在可能有点过时了)。


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

OpenSSL 还有一个基准测试应用程序。请参阅 中的源代码<openssl source>/apps/speed.c

此外,基准测试应用程序有自己的个性。加密压力测试可能不会像您希望看到的那样主要揭示差异。例如,参见基准测试工具

于 2014-02-19T16:24:49.753 回答
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
于 2014-02-20T11:22:43.203 回答
2

超线程利用了 CPU 有许多组件这一事实,当使用一个时,当没有超线程时,其他的只是闲置。您可以尝试编写两种类型的线程,一种进行整数计算(希望使用 ALU),另一种进行浮点运算(希望使用 FPU)。

我自己没有尝试过,但似乎在这种情况下,超线程应该可以提高性能。

为了显示相反的情况,您只能使用一种类型的线程(线程仅执行整数运算或线程仅执行浮点运算)。

也可能是您的测试存在缺陷,但为了知道是否是这种情况,我们需要有关该测试的更多信息。

于 2014-02-19T08:25:17.150 回答