gpt4 book ai didi

c++ - 如何识别阻碍我的程序在 32 核 CPU 上良好扩展的瓶颈?

转载 作者:行者123 更新时间:2023-11-28 01:19:55 26 4
gpt4 key购买 nike

<分区>

我编写了一个运行良好的程序。我现在想在我们的 32 核机器(AMD Threadripper 2990wx、128GB DDR4 RAM、Ubuntu 18.04)上并行运行它的 32 个独立实例。但是,在同一台机器上同时运行大约 12 个进程后,性能提升几乎为零。我现在需要优化它。这是平均加速比的图表:

Poor concurrent scaling on a 32 core AND Threadripper CPU

我想找出这个扩展瓶颈的根源。

我想知道可用的技术,以查看在我的代码中是否有任何“热门”部分阻止 32 个进程与 12 个进程相比产生显着 yield

我猜它与内存访问和 NUMA 架构有关。我尝试使用 numactl 进行试验并为每个进程分配一个核心,但没有明显的改进。应用程序的每个实例最多使用大约 1GB 的内存。它是用 C++ 编写的,没有“并行代码”(没有线程,没有互斥锁,没有原子操作),每个实例都是完全独立的,没有进程间通信(我只是用 nohup 启动它们,通过 bash 脚本) .这个应用程序的核心是一个基于代理的模拟:很多对象是渐进式创建的,彼此交互并定期更新,这可能对缓存不是很友好。

我已经尝试使用 linux perf 但我不确定我应该寻找什么;另外,perf 的内存模块在 AMD CPU 上不起作用。我也尝试过使用 AMD uProf 但我还是不确定这个系统范围的瓶颈会出现在哪里。

如有任何帮助,我们将不胜感激。

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