【发布时间】:2018-05-16 11:44:33
【问题描述】:
我有一个使用套接字用 C 语言编写的简单客户端-服务器程序。服务器为每个请求打开一个新的 pthread。在每个新打开的线程上,我都会执行一个 CPU 密集型任务(矩阵乘法)。
我有一个带有 2 个物理内核和 4 个逻辑处理器的 CPU。
当我运行 4 个客户端时,服务器打开 4 个线程,每个线程都分配在一个逻辑处理器上,CPU 达到 100%(使用率)。
如果我以 5 秒的延迟一个接一个地运行客户端,我可以非常清楚地看到 CPU 是如何从 25%(一个客户端)到 50%(两个客户端)再到 75%(三个客户端)和最终达到 100%(4 个客户)。这是很正常的行为。
但是,如果我将整个服务器代码嵌入到一个 MPI 进程(只有一个 MPI 进程)中,那么无论我启动多少个客户端,CPU 的提升都不会超过 50%。
为什么会这样?
非常感谢
【问题讨论】:
-
可能是 MPI 启动器限制了已执行二进制文件的 CPU 集。请查看您的 MPI 手册
sched_getaffinity。如需更多帮助,请提供有关 MPI 实现、版本、如何启动 MPI 二进制文件和操作系统的信息... -
如果您的 MPI 实现是 Open MPI,请尝试将
--bind-to none传递给mpiexec/mpirun。 -
如果您不确定您的任务是如何固定的,您可以简单地
mpirun ... grep Cpus_allowed_list /proc/self/status -
Hristo Illiev:您的解决方案奏效了!谢谢!
标签: c multithreading pthreads mpi cpu-usage