平台: 所有平台 版本: 所有版本

问题描述

该解决方案描述了COMSOL如何利用多计算机。

解决方案

COMSOL支持并行操作的两种相互模式:共享记忆并行性和分布式记忆并行性(群集支持)。所有COMSOL许可类型都支持共享记忆并行性,而分布式存储并行性则需要浮动网络许可证。使用共享记忆并行性可以利用计算机上的所有CPU插座,但是对于具有多个插座的计算机,有时使用浮动网络许可证来利用计算机的全容量;有关更多信息,请参阅混合计算:共享和分布式内存的优势合并。该解决方案专用于共享记忆并行操作。对于分布式记忆并行操作,请参见解决方案1001

共享内存处理或多线程对于COMSOL计算的性能很重要。描述多线程时经常使用的一些术语是

  • 核心:身体的与多个处理器的计算节点在共享记忆并行性中使用的处理器核心。
  • 加速:工作速度快多少次n与1个核心相比,在特定的计算节点上。加速度既取决于问题类型,使用的硬件和使用的硬件驱动程序。

视窗

在Windows平台上,Comsol使用的默认处理器数量是可用物理内核的总数。例如,如果您有2 x双核心机器,则默认情况下,Comsol Multiphysics Process将并行使用4个内核。

如果您希望comsol遗漏一个或多个处理器内核处理器数量选项多核和群集计算部分喜好菜单。

或者,在桌面上创建一个新快捷方式,以执行COMSOL并将其修改以设置所需的线程数。

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

Mac OS X

在Mac OS X上,仅在从终端启动COMSOL时控制COMSOL使用的处理器数量。默认行为是将所有可用的物理处理器内核用于COMSOL多物理应用程序。您可以在系统profiler应用程序中找到多少个处理器核心,或使用命令sysctl hw.ncpu。您可以使用命令行开关覆盖默认行为。例如,从命令开始
/applications/comsol55/Multiphysics/bin/comsol -np 2

Linux

可以通过命令在某些系统上显示并行的comsol过程可用的核心数
更多 /proc /cpuinfo |GREP PROC

请注意,如果您激活了过度线程,则需要将报告的核心计数除以上述命令,而将相关的超线程因子(2)除以获取物理核心计数。comsol不会受益于超线程;如果comsol的线程比物理CPU内核更多,则性能将降低。

在Linux上,默认行为是将所有可用的物理内核用于COMSOL多物理应用程序。您可以使用命令行开关覆盖默认行为。例如,从命令开始comsol -np 2

超线程

Comsol目前没有受益于超线程。comsol将仅使用系统上有物理CPU内核的线程。结果是,如果超线程活动处于活动状态,Windows任务管理器最多将显示Comsol流程的50%CPU利用率。这是预期的,而不是CPU利用率太低的迹象。建议启用超线程,以便同时运行的其他应用程序可以利用它。

-mpmode选项

-mpmode的值“周转”和“吞吐量”与KMP的OpenMP运行时设置直接相关库环境变量。-mpmode选项覆盖系统设置(如果KMP未设置库)。有关周转和吞吐量模式的更多信息,请参阅ON上的“执行模式”部分https://software.intel.com/en-us/node/522689
所有选项默认使用KMP_BlockTime = 200。当完全没有设置-mpmode时,周转也是默认值。comsol不使用“串行”模式。comsol列出的-mpmode的第三个值是“所有者”。所有者选项类似于周转,不同之处在于所有者还指定了针对计算机上插座数进行优化的线程亲和力,因此所有者比周转更具侵略性。

Numa意识

Comsol知道NUMA(不一致的内存访问)系统。NUMA系统可以是具有多个CPU插座的系统,也可以是基于多个图块的CPU的系统。这些系统的特征是RAM内存模块,可以在不同的访问时间内到达。Comsol自动检测可用插座的数量。手动更改可以通过指定偏好 /多核和群集计算中的插座数来应用。从命令行,可以通过标志-Numasets设置NUMA集(插座)的数量(插座) 。NUMA集的较大数字意味着在模拟运行时,OS将线程从一个核心移动到另一个核心的概率较低。

故障排除

我的新服务器有48个内核,但是,在增加一定数字的线程数量时,加速度很差。是什么赋予了?

  1. 问题大小对于加速​​很重要。对于非常大型型号(例如数百万度的自由度)的加速速度更好。如果使用非常小的型号,使用许多内核时,加速度将受到限制。另外,最大可能的加速受算法的非平行分数的限制。这个限制由Amdahl的律法
  2. 如果您使用的是腮腺直接求解器,请切换到comsol中的pardiso直接求解器。它为大量内核提供了更好的共享内存加速度。
  3. 默认情况下,使用英特尔MKL库。对于使用Linux的AMD处理器,您也可以通过指定-Blas Blis尝试BLIS库。

也可以看看

也可以看看选择硬件(解决方案866)

也可以看看在簇上运行comsol(解决方案1001)