【发布时间】:2016-12-12 07:18:34
【问题描述】:
我有一个 Intel Xeon E5-2620,它有 24 on 2 CPU。我编写了一个应用程序,它创建了 24 个线程来使用 openssl 解密 AES。当我在 100 万个数据解密上将线程数从 1 增加到 24 时,我得到如下图所示的结果。
问题是当我增加线程数时,我确定的所有内核都变为 100%,并且由于系统的 32GB ram 总是至少有一半的 ram 是空闲的,这表明问题不是内核使用或 ram 限制。 我想知道我应该设置一个特殊参数来提高操作系统级别的性能还是进程限制不能达到最大性能超过 4 个线程。 不得不提的是,当我执行“openssl evp ...”来测试 aes 加密解密时,由于进程分叉,它的性能比一个核心性能提高了大约 20 倍。 有人知道吗?
【问题讨论】:
-
一个问题是一半的“核心”不是实际核心,而是一种虚拟核心,通过一些流水线技巧进行模拟。这就是为什么当你超过 12 个线程时会有一个(小)颠簸。
-
openssl evp是单线程的吗? -
有很多可能的解释,但我们只能猜测如果你不向我们展示基准cosde ...(提示)。
-
首先,根据 Intel ARK,处理器有 6 个内核(具有超线程)。其次,我的猜测是您的代码并行化可能被破坏了,但是您设法阻止处理器能够使用 Intel Boost Turbo。因此,正在高效工作的(唯一?)核心的 CPU 频率最多降低了 20%。
标签: c++ multithreading ubuntu multiprocessing multicore