COMSOL 和多线程处理

解决方法编号: 1096
标题: COMSOL 和多线程处理
平台: 所有平台
版本: 所有版本
类别: 求解器
关键字:

问题描述

此页面描述 COMSOL 如何利用多核计算机的计算资源。

解决方法

COMSOL 支持两种相互的并行操作模式:共享内存并行和分布式内存并行(集群支持)。COMSOL 的所有许可证类型均支持共享内存并行,但分布式内存并行需要网络浮动许可证。使用共享内存并行时,您可以利用计算机上的所有 CPU 插槽,但对于具有多个插槽的计算机来说,有时使用网络浮动许可证可以更好地利用计算机的全部容量;有关进一步信息,请参见混合计算:组合使用共享内存和分布式内存的优势。 此解决方法适用于共享内存并行操作。对于分布式内存并行操作,请参见解决方法 1001

共享内存处理(也称多线程处理)对 COMSOL 的计算性能而言非常重要。用于描述多线程处理的一些常用术语如下

  • 内核:是指物理 处理器内核,由具有多个处理器的计算节点用于共享内存并行计算。
  • 加速比:是指在特定的计算节点上,在 N 个内核上运行作业比在单核上快多少倍。加速比取决于问题类型、使用的硬件及硬件驱动程序。

Windows

在 Windows 平台上,COMSOL 使用的默认处理器内核数是可用物理内核的总数。例如,如果您使用的是由两个双核组成的机器,则默认情况下,COMSOL Multiphysics 进程会并行使用 4 个内核。

如果您希望 COMSOL 留出一个或多个处理器内核,可以手动设置作业使用的内核数,具体可通过以下操作更改默认行为:启动 COMSOL Desktop,在首选项 菜单的多核与集群计算 部分中设置内核数 选项。

此外,您也可以在桌面上新建 COMSOL 可执行文件的快捷方式,并修改它以设置所需的线程数。

  1. 在桌面上创建新的快捷方式。
  2. 右键单击该快捷方式并选择“属性”。
  3. 如果您希望 COMSOL 仅使用两个内核,可将“目标”字段改为
    "C:\Program Files\COMSOL\COMSOL50\Multiphysics\bin\win64\comsol.exe" -np 2

Mac OS X

在 Mac OS X 上,仅当从终端启动 COMSOL 时,才能控制 COMSOL 使用的处理器内核数。系统的默认行为是将所有可用的物理处理器内核都用于 COMSOL Multiphysics 应用程序。您可以在系统概览 (System Profiler) 应用程序中获取处理器内核数,也可以使用命令 sysctl hw.ncpu 获取。您可以使用命令行开关替代默认行为。例如,使用以下命令启动
/Applications/COMSOL50/Multiphysics/bin/comsol -np 2

Linux

您可以使用以下命令在某些系统上显示并行的 COMSOL 进程可用的内核数
more /proc/cpuinfo | grep proc

请注意,如果激活了超线程,则需要将上述命令报告的内核数除以相关的超线程因子 (2),才能得到物理内核数。COMSOL 不会受益于超线程技术;如果 COMSOL 启动时的线程数超过物理 CPU 内核数,则性能会下降。

在 Linux 上,系统的默认行为是将所有可用的物理内核都用于 COMSOL Multiphysics 应用程序。您可以使用命令行开关替代默认行为。例如,使用以下命令启动:comsol -np 2

超线程

就目前而言,COMSOL 不会受益于超线程技术。这意味着,在默认情况下,COMSOL 使用的线程数为系统中的物理 CPU 内核数。其结果是,如果超线程处于活动状态,则当 COMSOL 运行时,Windows 任务管理器将显示最多 50% 的 CPU 利用率(对于 COMSOL 进程)。当超线程被激活时,这在意料之中。关闭超线程不会提高 COMSOL 的性能;我们建议您在超线程可用的情况下使用超线程,以便在 COMSOL 运行时使其他应用程序具有合理的性能。

-mpmode 选项

-mpmode 的值 "turnaround" 和 "throughput" 与 KMP_LIBRARY 环境变量的 OpenMP 运行时设置直接相关。-mpmode 选项会覆盖系统设置(如果 KMP_LIBRARY 未设置)。有关 turnaround 和 throughput 模式的更多信息,请参见 https://software.intel.com/en-us/node/522689 中有关 "Execution modes" 的部分。 默认情况下,所有选项均使用 KMP_BLOCKTIME = 200。未设置 -mpmode 时,turnaround 也是默认值。COMSOL 不使用 "serial" 模式。COMSOL 为 -mpmode 列出的第三个值是 "owner"。owner 选项与 turnaround 类似,区别在于 owner 还指定了针对计算机上的套接字数量进行优化的线程关联,因此 owner 比 turnaround 更具优势。

故障排除

我的新服务器有 48 个内核,但是当增加的线程数超过一定数量时,加速很慢。这是什么原因?

  1. 问题的规模会影响加速效果。对于非常大型的模型(如几百万个自由度),加速效果会更好。如果您使用非常小的模型,则在使用多个内核时,加速会受到限制。此外,可能达到的最大加速效果还受到算法非并行部分的限制。Amdahl's law 对此限制进行了描述。
  2. 如果您在 COMSOL 中使用 MUMPS 直接求解器,请切换为 PARDISO 直接求解器。与 MUMPS 相比,后者可以为大量内核提供更好的共享内存加速。
  3. 如果您在 AMD 机器上使用多个内核,则启动时使用 MKL 库,它可能比默认的 ACML 库具有更优的性能:
    "C:\Program Files\COMSOL\COMSOL50\Multiphysics\bin\win64\comsol.exe" -blas mkl

另请参见

另请参见选择硬件(解决方法 866)

另请参见在集群上运行 COMSOL(解决方法 1001)


免责声明

COMSOL 尽一切合理的努力验证您在此页面上查看的信息。本页面提供的资源和文档仅供参考,COMSOL 对其有效性不作任何明示或暗示的声明。COMSOL 对所披露数据的准确性不承担任何法律责任。本文档中引用的任何商标均为其各自所有者的财产。有关完整的商标详细信息,请参阅产品手册。