【发布时间】:2011-11-25 03:49:14
【问题描述】:
我有一个并行化的 C++ 程序,可以进行强力优化。出于某种原因,我每核心的收益递减最多约 6 个核心,此时我遇到了一个墙,更多的核心增加了〜没有速度。这在 8 核或 16 核机器上运行时是一致的。
当我运行 strace -f ./progname 时,我会得到一大堆以下内容,这些都是在程序的多线程部分专门发生的:[pid 2646] mprotect(0x7ffe7c030000, 4096, PROT_READ|PROT_WRITE) = 0
其中一些接连出现:[pid 2645] mprotect(0x7ffe78030000, 4096, PROT_READ|PROT_WRITE <unfinished ...> -- [pid 2646] <... mprotect resumed> ) = 0
但他们并不总是来自同一个pid。
当我减少核心数量时,我收到的上述消息较少,而在 2 或 3 个核心时,我没有收到任何消息。
我唯一能猜到的是,这可能与每个线程中完成的大量向量分配和访问有关。如果相关,我不会使用任何其他内存管理库。
【问题讨论】:
标签: c++ linux multithreading strace