gpt4 book ai didi

C++ Linux 多线程瓶颈。跟踪-f : `[pid 2646] mprotect(0x7ffe7c030000, 4096, PROT_READ|PROT_WRITE) = 0`

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:53 28 4
gpt4 key购买 nike

我有一个执行强力优化的并行 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 个内核时,我不会收到任何消息。

我唯一能猜到的是,这可能与每个线程中完成的大量 vector 分配和访问有关。如果相关的话,我不会使用任何其他内存管理库。

最佳答案

I have a parrallelized C++ program that does brute force optimization. For some reason I get diminishing returns per core up to ~6 cores, at which point I hit a wall where further cores add ~no speed. This is consistent when run on an 8 or 16 core machine.

你能描述一下算法吗?许多计算算法都受内存限制。

尝试使用 oprofileperf 对您的应用程序进行分析,如果这些都不可能,则使用 gprof

The only thing I can guess is that maybe it has to do with the massive quantity of vector allocations and accessing that gets done in each thread. I'm not using any other memory management libraries if that's relevant.

减轻 TLB 压力的一个 super 简单的方法是使用大页面(假设您的硬件支持它)。在 Linux 上,您可以使用 libhugetlbfs 及其 morecore Hook 。

HUGETLB_MORECORE=yes LD_PRELOAD=libhugetlbfs.so  ./brute_force_optimization

关于C++ Linux 多线程瓶颈。跟踪-f : `[pid 2646] mprotect(0x7ffe7c030000, 4096, PROT_READ|PROT_WRITE) = 0` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8264662/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com