代码之家  ›  专栏  ›  技术社区  ›  Cosmin Ioniță

MPI:处理器在单个MPI进程上不能达到100%

  •  0
  • Cosmin Ioniță  · 技术社区  · 6 年前

    我有一个使用套接字用C编写的简单客户机-服务器程序。服务器为每个请求打开一个新的pthread。在每个新打开的线程上,我执行CPU密集型任务(矩阵乘法)。

    我有一个CPU,有2个物理内核和4个逻辑处理器。

    当我运行4个客户端时,服务器打开4个线程,每个线程分配在一个逻辑处理器上,CPU达到100%(使用率)。

    如果我以5秒的延迟逐个运行客户机,我可以非常清楚地看到CPU是如何从25%(一个客户机)变为50%(两个客户机),到75%(三个客户机),最后变为100%(4个客户机)。这是一种很正常的行为。

    但是,如果我嵌入 整个服务器代码 在一个MPI进程(只有一个MPI进程)中,无论启动多少个客户端,CPU的提升都不会超过50%。

    为什么会这样?

    恭敬地谢谢你

    1 回复  |  直到 6 年前
        1
  •  0
  •   Cosmin Ioniță    6 年前

    这个问题的官方答案如下:

    正如赫里斯托·伊利耶夫在对我的问题的评论中所说的那样 --绑定到无 到mpirun命令解决了这个问题。

    此选项实际上将MPI进程绑定到特定对象(请参见 the manual 了解更多详细信息)。

    默认情况下,每个MPI进程都绑定到一个物理核心。我的机器上有两个内核,所以我能得到的CPU的最大使用率将在50%左右。

    将绑定设置为“无”将删除该约束,现在每个MPI进程将绑定到一个逻辑核心,这允许我的CPU达到100%。