Pär Persson Mattsson – COMSOL 博客 - //www.denkrieger.com/blogs 发布博客 Mon, 08 Apr 2024 09:31:56 +0000 en-US hourly 1 https://wordpress.org/?v=5.7 如何使用 COMSOL Multiphysics® 中的集群扫描节点 //www.denkrieger.com/blogs/how-to-use-the-cluster-sweep-node-in-comsol-multiphysics //www.denkrieger.com/blogs/how-to-use-the-cluster-sweep-node-in-comsol-multiphysics#respond Tue, 12 Jun 2018 08:09:20 +0000 http://cn.staging.comsol.com/blogs?p=193471 在之前的一篇博客文章中,我们解释了如何在 COMSOL Multiphysics® 软件中直接从 COMSOL Desktop® 环境实现在集群上运行作业,而无需与 Linux® 操作系统终端进行任何交互。由于这种终端有时需要使用者具有足够的操作技能,因此能够直接从图形用户界面启动集群作业便是 COMSOL® 软件最有用的功能之一。欢迎了解更多强大功能……。我们首先来看看集群扫描 节点。

什么是集群扫描节点?

将参数集计算并行化的一种方法是将参数化扫描与集群计算 节点结合使用。在执行此操作时,你将创建一个跨越多个节点的大型集群作业。添加的节点越多,并行计算的参数值就越多(当然,前提是参数的数量多于节点数)。

显示典型集群中的四个节点的示意图。
集群示例。

不仅如此,你还可以使用集群扫描 节点将计算并行化,该节点设计用于将一个参数化扫描拆分成多个集群计算作业。在集群扫描 节点中定义一组参数,对于每个参数值,系统都会将单独的批处理作业发送到集群队列。计算完成后,COMSOL Multiphysics 会将结果整合回主进程。

你甚至还可以通过这种方式嵌套参数化扫描,将集群扫描与“标准”参数化扫描相结合。你可以决定为哪些参数启动单独的作业,以及想要将哪些参数保留在作业“内”。

总而言之,集群扫描 节点是 COMSOL Multiphysics 为你提供的强大工具,可以帮助你实现对建模过程的完全控制。

请注意,你需要拥有“网络浮动许可证”(FNL)才能使用集群扫描。此外,建议你熟练掌握博客文章 COMSOL Desktop® 环境如何实现在集群上运行中讨论的设置,如果你按照该篇文章中的步骤操作并保存设置,这些设置将自动应用于集群扫描 节点。

何时使用集群扫描节点

现在,你已经知道什么是集群扫描 节点,你可能还想要了解以下两点:

  1. 我应该在什么时候使用它?
  2. 此节点在什么情况下优于集群计算 节点?

对于上述问题,常见的第一种情况是,你有一个参数集但不知道模型是否收敛,或者是否对所有参数组合都有效。参数集可以控制几何结构,在采用某些值时,几何结构可能会导致求解或网格划分失败。如果用参数化扫描计算模型,COMSOL Multiphysics 将在第一个失败的几何结构上取消计算,即使后面的几何结构都能成功计算也将如此。将计算过程拆分为多个单独的作业后,你便可以开始针对每个参数值进行计算。

另一种情况是,涉及的参数值数量太大,单个集群作业无法完成计算。如果你有用于控制频率、几何、材料、边界条件等的参数,并希望得到所有可用组合的结果,则需要进行大量的 计算。如果你将所有计算都放入一个大型作业并将其发送到集群,那么几乎可以肯定会引起集群管理员和同事们的强烈不满(稍后会详细说明)。

好消息:通过使用集群扫描 节点,你可以将潜在的大型作业拆分成多个小作业。为此,除了集群扫描 节点外,还需将参数化扫描 节点添加到模型中。以这种方式设置模型会创建嵌套参数化扫描(类似于编程中的嵌套 for 循环)。请继续阅读本文,了解详细的操作步骤。我们在本篇博客文章中引入了一个简短的教程。

关于集群扫描 节点,还有一点需要注意:你可以使用它来潜在地增加集群上作业的吞吐量。

使用集群扫描优化调度

上文中我们提到了集群管理员的不满,想必你希望了解其中的原因吧。计算时间是高性能集群的宝贵资源,因此,大多数集群都实施了某种队列或调度系统。如何处理大型作业取决于集群管理员,根据经验,大型作业意味着需要长时间的等待。原因何在?大型作业会占用大量的计算资源,并且可能需要很长时间才能完成。因此,为了不影响其他用户作业的正常运行,为大型作业分配的优先级就会比较低。当然,这一切都取决于集群管理员如何配置调度程序;也就是说,这需要视实际的情况而定。

这与集群扫描 节点有什么关系呢?假设你可以访问一个集群,在这个集群中很难安排大型作业,但很容易安排小型作业,因为它们会填充调度程序中的空隙(未使用的集群节点是计算成本较高的集群节点)。你可以使用集群扫描将大型作业拆分成多个小型作业。

我们通过一个例子来看一下:你可以启动 8 个作业,让每个作业使用 1 个节点来计算它们自己的 100 个参数值的集合,而不是在 8 个节点上启动 1 个大型作业来并行计算 800 个参数值。随后这些作业将被单独调度,小型作业可能比大型作业完成得更快,具体取决于集群的设置。

设置集群扫描和嵌套参数化扫描

如果你有批处理扫描和集群计算 节点的使用经验,那么使用集群扫描 节点会很轻松。(请查看博客文章“ 强大的批处理扫描功能”和 “ 批处理扫描中任务并行的附加值”,找到有关如何设置批处理扫描的描述)。

为了演示如何设置纯集群扫描和嵌套参数化扫描,我们来看看我最喜欢的示例模型:参数化的热微执行器(这是我最喜欢的模型,原因是其中演示了 COMSOL® 软件的多物理场功能)。由于这是一个参数化模型,因此我们很容易向其中添加参数化扫描和集群扫描。

在 COMSOL Multiphysics® 中使用集群扫描功能建模的热微执行器。
微执行器的焦耳热建模。电流流过两臂,导致它们发热。随后,热膨胀使执行器发生弯曲。

添加集群扫描

我们首先添加一个基于执行器长度参数 L 的集群扫描。为此,首先右键单击研究1,然后单击集群扫描。此操作将添加一个节点,你可以在其中进行集群设置,具体操作请参见这篇关于从 COMSOL Desktop® 运行集群的博客文章中的说明。(如果你还没有看过这篇文章,现在不妨先读一读。)

接下来,你可以在研究设置 窗口中添加要扫描的参数。单击加号并在下拉列表中选择参数 L。然后在参数值列表 编辑框中输入(例如)“100 170 240 310”。在参数单位 编辑框中,输入“um”(微米)。

如果你要将结果引入主模型,请确保选中同步解 复选框。这样,你就可以得到所有结果,并将其用于进一步分析和后处理。

显示在模型中添加集群扫描结果相关设置的屏幕截图。
在模型中添加集群扫描。

现在我们已经创建了集群扫描,它基于微执行器的长度进行循环。假设集群设置正确无误,我们现在需要做的就是单击计算,然后将单独的作业发送到集群。

添加嵌套参数化扫描

现在,我们创建一个嵌套参数化扫描,这样我们的每个集群作业本身都包含一个参数化扫描。为此,我们添加一个基于电压参数 DV 的参数化扫描,具体步骤如下:

  1. 右键单击研究1,然后单击参数化扫描,此操作将添加一个节点,你可以在其中设置参数化扫描
  2. 研究设置 窗口中,单击加号,然后在下拉列表中选择参数 DV
  3. 参数值列表 编辑框中输入“1 2 3 4 5”
  4. 参数单位 编辑框中输入“V”
  5. 单击计算,COMSOL Multiphysics 将为你调度作业

COMSOL Multiphysics® 中嵌套参数化扫描设置的屏幕截图。
在模型中添加参数化扫描,从而创建嵌套参数化扫描。

你可以等待作业完成(其状态显示在外部进程 窗口中),也可以从进程中分离,然后保存模型,并关闭 COMSOL Multiphysics,让作业自行运行。当你返回工作站时,只需要打开保存的模型并重新连接,软件就会像使用常规集群计算 节点一样处理结果。这一工作流程对于通宵仿真来说堪称完美!

结语

在本篇博客文章中,你不仅学习了如何使用集群扫描 节点对集群上的并行参数计算进行优化,还学习了如何针对不同的情况选用最佳的方法,作为额外的收获,你还知道了如何避免引起系统管理员的不满。

与一般的集群计算一样,你必须根据要计算的模型来决定采用何种方法。为了明白何时使用集群扫描和分布式参数化扫描,你需要在模型和集群上尝试这两种方法。无论何时,要掌握一项技能,都必须进行测试!

如上所述,你需要 FNL 才能使用集群扫描,这是因为此功能是基于网络的技术。

后续操作

如果你想要了解更多关于集群扫描 节点的信息,可以单击下面的按钮联系我们。

Linux是Linus Torvalds在美国和其他国家/地区的注册商标。

]]>
//www.denkrieger.com/blogs/how-to-use-the-cluster-sweep-node-in-comsol-multiphysics/feed/ 0
使用云计算运行 COMSOL Multiphysics® //www.denkrieger.com/blogs/running-comsol-multiphysics-with-cloud-computing //www.denkrieger.com/blogs/running-comsol-multiphysics-with-cloud-computing#respond Fri, 20 Feb 2015 13:15:21 +0000 http://com.staging.comsol.com/blogs/?p=84501 我们以前写过一篇有关 HPC 与 COMSOL Multiphysics® 软件、集群、以及混合计算的博客。但并非所有人的办公室中都有集群可用,或者有可用于构建 Beowulf 集群的硬件,如果我们确实需要集群所能提供的额外计算资源,有哪些可用的选择呢?其中一个解决方案便是云计算,这是一项提供临时性计算能力的服务,可以帮助提升计算能力及生产力。

三种需要更多计算能力的情况

假设您在模拟一个电子器件,希望了解其在运行过程中的温度分布。测试了几种设定之后,您发现您使用的热通量边界条件并非是您模型的最佳近似。要得到更精确的结果,您还需要进行流体流动仿真。但问题是,您基于热通量近似的传热仿真已经几乎占满了您笔记本电脑的全部 4 GB 内存。您需要一个双向耦合,但增加流体流动仿真将会给计算带来更多的自由度,因此需要更多的内存。

现在怎么办呢?您需要更多的计算能力。

换个主题,试想一下您正在为客户进行力学分析,该力学组件中包含许多小细节。为了优化设计,您需要分析大量不同的设计尺寸。但您本地只有一个处理器,每次运行都要花费相当长的时间,您意识到您可能无法在客户的最后期限前完成分析。

解决方案?您需要在多个处理器上并行运行这些仿真。

最后,让我们看一个与涉及的物理场无关,但仍基于这些物理场分析的应用。您已经使用选定的物理场接口建立了模型,但马上要下班了,您希望能尽快、尽量简单地在一夜之间得到模型计算结果。使用直接求解器不需要进行大量的求解器设定及类似工作,但它所需的内存会随您模型的自由度数目的增加而急剧增长。

这次的解决方案呢?您需要一个更大型的电脑。

如果有一个解决方案可以应对所有这三种情况呢…

输入:云计算

这就是我们需要借助云计算的地方。云计算服务是一项能在人们需要时向其提供计算资源的服务。

这一服务有很多优势,特别是在您缺乏时间、资金或经验来投资建立一个传统集群或服务器机柜的情况。您也许并不需要一个 7*24 小时可用的集群,只是在某些时候才需要额外的计算资源,例如,需要更快完成的一次性分析或任务。

通过云运行 COMSOL Multiphysics。
利用 COMSOL Multiphysics® 和云计算的硬件资源,机构可以在需要时使用所需的资源进行不同的分析。

云计算的使用将对您的工作产生积极的影响。能够在需要时增加更多的计算能力,将帮助您更好地完成您日常的 COMSOL Multiphysics® 仿真工作。您不必担心现场缺乏足够的硬件,可以照常进行您的日常操作,同时确定可以在需要时随时利用云进行扩容。

在远程计算资源中使用 COMSOL® 软件

从传统上来看,在使用云计算服务时,您需要拥有所用网络和硬件技术方面的专业知识,还需了解云服务将执行的操作系统及软件,这样才能更好地支持应用程序的运行。在一个典型的操作流程示例中,您需要注册云服务,研究需要的机器规格,租用机器,然后将它连接到您的网络以允许其访问您的许可证服务器。然后就是较容易实现的部分:安装 COMSOL Multiphysics 和运行您的模型。

但由于 HPC 在 CAE 领域中变得越来越重要,于是我们与云计算提供商进行合作,最大限度地降低您进入云计算领域的门槛。

注:COMSOL Multiphysics 长期以来一直支持对远程计算资源的使用,您可以通过用户界面或命令行进行批处理工作,或是使用实时的客户端-服务器技术。要实现这一点,您所需要的仅仅是一个 COMSOL Multiphysics® 的网络浮动许可证 (FNL)。

从以下资源开始:与我们的云计算合作伙伴进行联系

]]>
//www.denkrieger.com/blogs/running-comsol-multiphysics-with-cloud-computing/feed/ 0
建立贝奥武夫集群加速多物理场仿真 //www.denkrieger.com/blogs/building-beowulf-cluster-faster-multiphysics-simulations //www.denkrieger.com/blogs/building-beowulf-cluster-faster-multiphysics-simulations#comments Fri, 11 Apr 2014 02:47:09 +0000 http://com.staging.comsol.com/blogs/?p=121371 很多人都需要最新的软件和硬件来提升工作效率,因此,我们要紧跟科技发展的步伐。但如何处理过时的硬件呢?将它们报废或是扔在角落,这都显得有点浪费。其实我们可以利用这些废旧硬件来组建一个贝奥武夫集群,以提升计算速度与生产率。

关于贝奥武夫集群

1994 年, NASA 的一群研究人员利用普通工作站组建了一个小型集群,并将该集群(或称并行工作站)称为贝奥武夫。之后,贝奥武夫集群这个词就被用来描述为使用商品硬件(例如普通工作站)组建、依靠开源软件驱动的集群。这个定义对于计算机硬件和网络互联来说颇为宽泛。最重要的一点是,工作站不再作为工作站使用,而是作为高性能计算机(HPC)集群中的节点。

贝奥武夫集群可用于计算各类问题,但是正如我们之前在混合建模系列博客中提到的,为了更好地利用集群来提升效率,问题必须是可并行的。因此贝奥武夫集群被用于计算粒子模拟、遗传学问题以及一可能对于 COMSOL Multiphysics® 用户来说最为有趣的——参数化扫描和大型矩阵相乘。

但我们为什么会想到使用非 HPC 硬件来组建集群呢?一个可能的原因就是“我们手头已经有硬件了”。例如,在全办公室的工作站或笔记本电脑更新换代之后,我们可能不知道该如何处理过时的旧电脑,但又不想把它们丢掉。一种可行的解决方法就是在办公时间之后或是双休日利用空闲工作站的集中计算资源。

我们需要什么组建集群?

首先,我们需要有硬件可用。在这篇博客中,我们使用了性能可靠的老旧笔记本作为节点,当然也可以使用工作站或旧服务器。通过任意一种方式组建贝奥武夫集群时,我们都应选择具有相似硬件的节点。我们所用的笔记本电脑已不再是“性能优异的怪兽”了,每一台均配备了 Intel® T2400 @1.83GHz 处理器和 2 GB 的 RAM ,并配有以太网网卡,以便连接所有设备。我们还需要一个交换机。在本案例中使用了一个旧的 HP® 1800 交换机,其实也可以使用普通的商品硬件(譬如家庭办公用的五口交换机),这取决于我们需要用到多少节点。

由旧交换机和六台旧笔记本组成的贝奥武夫集群
我们的贝奥武夫集群,由六台旧笔记本和一台旧交换机组成。

因为贝奥武夫集群(按照上文中的定义)依靠开源操作系统驱动,我们在笔记本电脑中安装了一个 Linux® 发行版。尽管有专门为贝奥武夫集群计算设计的操作系统,但也可以使用标准的服务器操作系统(例如 Debian® )。

在硬件、网络、操作系统以及共享文件系统设定完成后,最后一步就是安装COMSOL Multiphysics® 软件。无需再安装信息传递接口(MPI)或调度程序, COMSOL 的内置功能已经满足了集群计算的所有需求。

组建贝奥武夫集群及安装 COMSOL Multiphysics

在这次安装中我们选择 Debian® Stable 6 ,这是我在撰写这篇博客时 COMSOL Multiphysics 所支持的一种发行版。接下来需组建系统。在这种情况下,为了使安装工作尽可能地轻松省力,我们只安装基础系统外加一个 SHH 服务器将集群连接至网络。此案例中不需要用到桌面环境,因为它只会降低贝奥武夫系统的性能。

成功安装操作系统后,我们要建立网络以及计算节点的文件共享系统。对于文件共享系统,我们在第一个节点上安装 NFS 服务器作为头节点。然后从这里输出文件共享系统的位置。

以下是一个组建案例:

/srv/data/comsolapp     用于 COMSOL App
/srv/data/comsoljobs   用于 用户存储 COMSOL 的集群工作

在计算节点上,我们将自动挂载这些共享内容。

因为系统中没有安装桌面环境,我们需使用自动安装程序(见 COMSOL Multiphysics 安装指南第 77 页)。使用安装媒介中的 ‘setupconfig.ini’ 文件并按需要对其进行编辑。

最重要的一步是将 ‘showgui’ 选项从 ‘1’ 设置为 ‘0’ 。另一个要点是目标路径。这里我们选择网络共享,因为比较容易维护和升级到最新版本的 COMSOL Multiphysics 。

增加参数 ‘-s /path/to/the/setupconfig.ini’ 以开始安装,例如:

cd /media/cdrom/
./setup –s /path/to/the/setupconfig.ini

现在基于文本的安装程序启动并将输出结果发送给终端。

为了告知 COMSOL Multiphysics 哪些节点可用,我们需建立一个简单的包含主机名列表的 ‘mpd.hosts’ 文件:

mpd.hosts
cn01
cn02
...
cn06

最后,我们在第一个节点以及其他六个节点上启动 COMSOL 服务器:

//comsol server -f mpd.hosts -nn 6 -multi on

现在您可以在桌面上启动 COMSOL Multiphysics 并连接到服务器了。

结论:旧硬件提升生产率

我们在案例集锦中选择了修改后的音叉模型来测试 ‘崭新的’ 集群。在测试中,我们决定将参数化扫描中计算的参数数量增加至 48 。接下来用 COMSOL Multiphysics 的批命令在 1 至 6 台笔记本中计算模型。下图中展示了每一天测量出的总模拟量。

在贝奥武夫集群中使用 COMSOL Multiphysics 带来的生产率提升
生产效率增长(工作量/天),包含了使用不同数量的笔记本从打开文件到存储结果的总时间。

正如我们看到的,如果使用 6 台笔记本,那么几乎可以达到每天 140 的工作量,相比之下,一台笔记本每天的工作量不到 40 。总体来说增速接近 3.5 倍。考虑到我们使用的是旧的笔记本电脑,效率的提升非常明显。

需要注意的是,测量时间并不是求解时间,而是总模拟时间。这包括打开、计算和保存模型。打开和保存是自然连续的,根据阿姆达尔定律(在之前关于“批扫描”博客中有提及),我们是看不到求解器提速的。如果我们能够将贝奥武夫集群与 COMSOL Client/Server 功能相关联并比较计算时间,我们将能得到更为显著的生产率提升。

总的来说,这意味着我们完全可以使用旧的硬件与 COMSOL Multiphysics 来提高生产率以及加快计算速度(尤其是参数计算)。

Debian 是美国 Software in the Public Interest, Inc. 公司的注册商标。
HP 是 Hewlett-Packard Development Company, L.P. 公司的注册商标。
Intel 是 Intel 公司在美国及/或其他国家的商标。
Linux 是 Linus Torvalds 的注册商标。

]]>
//www.denkrieger.com/blogs/building-beowulf-cluster-faster-multiphysics-simulations/feed/ 2
批处理扫描中任务并行的附加值 //www.denkrieger.com/blogs/added-value-task-parallelism-batch-sweeps //www.denkrieger.com/blogs/added-value-task-parallelism-batch-sweeps#respond Thu, 20 Mar 2014 03:52:37 +0000 http://cn.staging.comsol.com/blogs?p=278381 到目前为止,我们在混合建模系列博客中还没有详细讨论的一件事是,当向我们的计算中增加更多计算资源时,我们可以期待怎样程度的加速。今天,我们考虑一些解释并行计算局限性的理论研究,并将介绍如何使用 COMSOL 软件的批处理扫描 选项。这是一个内置的、易并行计算功能,可在达到极限时提高性能。

Amdahl 定律和 Gustafson-Barsis 定律

我们之前已经提到过的如何通过增加计算单元来提高速度是基于算法的(在这篇文章中我们将使用术语进程,但添加的计算单元也可以是线程 )。一个严格的串行算法,像计算Fibonacci 数列的元素,完全不能从增加过程中受益,而并行算法,如向量加法,可以利用与向量中的元素一样多的处理器。实际中的大多数算法都介于这两者之间。

为了分析一个算法可能的最大加速,我们将假设它由一小部分完全并行化的代码和一小部分严格串行化的代码组成。我们调用并行代码  的分数,其中, 是介于(包括) 0 和 1 之间的一个数字。这自动意味着我们的算法有一个等于 的串行代码片段。

考虑 P 个活动进程的计算时间 T(P),从 P=1 开始,我们可以使用表达式 。当运行 P 个进程时,代码的串行部分不受影响,但完全并行化的代码的计算速度将提高P倍。因此,P 进程的计算时间为 ,加速度为

Amdahl 定律

这个表达式是Amdahl 定律的核心。对于不同的值  和  绘制图  ,我们现在在下图中看到一些有趣的东西。

增加进程数的加速
为可并行化代码的不同部分增加进程数的加速比。

对于 100% 并行化代码,极限是不存在的。然而,我们发现对于 ,渐近极限或理论最大加速比为 

对于 95% 并行化的代码,我们发现 ,即使我们有无限数量的进程,最大加速也是 20 倍。此外,我们有 , 。当减少并行化代码的比例时,理论最大加速比会迅速下降。

但不要现在就放弃回家!

Gustafson-Barsis 定律

Amdahl 定律没有 考虑到一件事,那就是当我们购买一台速度更快、内存更大的计算机来运行更多进程时,通常不是想更快地计算之前的小模型。相反,我们想要计算新的、更大(更酷)的模型。这就是 Gustafson-Barsis 定律的全部内容。它基于这样一个假设,即我们要计算的问题的规模随着可用进程的数量线性增加。

Amdahl 定律假定问题的大小是固定的。当添加新的处理器时,它们处理的是最初由较少数量的进程处理的部分问题。通过添加越来越多的进程,我们并没有充分利用所添加进程的全部能力,因为最终它们能够处理的问题大小达到了下限。然而,假设问题的大小随着添加的进程数量的增加而增加,那么我们就将所有进程利用到假设的水平,并且执行计算的加速是无限的。

描述这种现象的方程是 ,这为我们提供了一个更为乐观的结果,即所谓的缩放加速(类似于生产力),如下图所示:

描绘作业大小如何随可用进程数量增加的图表
当考虑到工作的规模通常会随着可用进程的数量而增加时,我们的预测就更加乐观了。

通信成本

Gustafson-Barsis 定律意味着,我们拥有的能添加到进程中的资源才能限制我们可以计算的问题的大小。然而,还有其他因素会影响加速。到目前为止,我们在这个系列博客中试图强调的一点是,通信成本较高。但是我们还没有谈到它有多贵,所以让我们看一些例子。

让我们考虑在并行进程中由所需的通信和同步所主导的系统开销,并将其描述为计算时间的增加。这意味着当我们增加进程数量时,通信量也会增加,而这种增加将被函数 所描述,其中 是一个常数, 是某个函数。因此,我们可以通过以下方式来计算加速比:

下面的图显示了并行化代码的比例为 95% 的情况,我们可以看到对于不同的 函数,加速比随着进程数量增加的情况,假设 c=0.005(这个常数在不同的问题和平台之间会有所不同)。在没有系统开销的情况下,结果正如 Amdahl 定律所预测的那样,但是当我们开始增加系统开销的时候,我们看到一些事情正在发生。

对于线性增加的系统开销,我们发现在通信开始抵消更多进程增加的计算能力之前,加速比不会大于 5。对于二次函数,,结果甚至更糟,您可能还记得我们之前关于分布式内存计算的博客文章,在多对多通信的情况下,通信的增加是二次的。

加速并增加开销
增加系统开销的加速比。常数 c 被选为 0.005。

由于这种现象,当添加越来越多的进程时,我们不能期望在集群上有加速,例如,一个小的瞬态问题。通信量的增加将比增加进程带来的任何增益都快。然而,在这种情况下,我们只考虑了一个固定的问题大小,随着我们增加问题的规模,通过通信引入的“减速”效应将变得不那么重要。

COMSOL Multiphysics 中的批处理扫描

现在让我们离开理论,学习如何使用 COMSOL Multiphysics 中的批处理扫描功能。作为我们的示例模型,我们将使用 COMSOL 模型库中提供的无极灯。该模型很小,大约有 80,000 个自由度,但在其解中需要大约 130 个时间步长。为了使这个瞬态模型参数化,我们将计算不同功率的灯模型,即 50W、60W、70W 和 80W。

在我的工作站,一台配备 Intel®Xeon®E5-2643 四核处理器和 16GB RAM 的富士通 ®CELSIUS® 上,得到了以下计算时间:

内核数量 每个参数计算时间 扫描计算时间
1 30 分钟 120 分钟
2 21 分钟 82 分钟
3 17 分钟 68 分钟
4 18 分钟 72 分钟

这里的加速远非完美——三核仅为 1.7 左右,四核甚至有所降低。这是因为它是一个小模型,每个时间步内每个线程的自由度数较低。

现在,我们将使用批处理扫描功能以另一种方式并行化这个问题:我们将从数据并行 切换到任务并行。我们将为每个参数值创建一个批处理作业,看看这对我们的计算时间有什么影响。为此,我们首先激活“高级研究选项”,然后右键单击“研究1”并选择“批处理扫描”,如下面的动画所示:


如何在模型中激活批处理扫描,包括参数值,并指定同时作业的数量。

下图显示了通过控制并行化可以获得的生产率或“加速比”。当使用4个内核运行一个批处理作业时,我们从上面得到的结果是:72 分钟。当将配置同时更改为两个批处理作业时,每个批处理作业使用 2 个核,我们可以在 48 分钟内计算所有参数。最后,当同时计算4个批处理作业时,每个批处理作业使用一个处理器,总计算时间为 34 分钟。这使速度分别提高了 2.5 倍和 3.5 倍——比单独使用纯共享内存进行并行化要好得多。

每天批量扫描模拟与进程和线程的配置
无极灯模型的每天模拟。“4×1”表示 4 个批处理作业同时运行,每个作业使用一个内核。

混合建模系列博客结语

在这个系列博客中,我们了解了共享、分布式和混合内存计算,以及它们的优缺点,以及并行计算的巨大潜力。我们还了解到,在计算领域,没有免费的午餐。我们不能只是添加流程,并希望为所有类型的问题提供完美的加速。

相反,我们需要选择最好的方法来并行化一个问题,以便从硬件中获得最大的性能增益,这就像在解决一个数值问题时,我们必须选择正确的求解器来获得最佳求解时间。

选择正确的并行配置并不总是容易的,而且很难事先知道应该如何“混合”并行计算。但在许多其他情况下,经验来自反复琢磨和测试,然而使用 COMSOL Multiphysics,我们就有可能做到这一点。用不同的配置和不同的模型自己尝试一下,很快您就会知道如何设置软件以获得硬件的最佳性能。

Fujitsu 是 Fujitsu Limited 在美国和其他国家/地区的注册商标。CELSIUS 是 Fujitsu Technology Solutions 在美国和其他国家/地区的注册商标。Intel 和 Xeon 是 Intel 公司在美国和/或其他国家/地区的商标。

]]>
//www.denkrieger.com/blogs/added-value-task-parallelism-batch-sweeps/feed/ 0
分布式内存计算入门:定义、目的及原理 //www.denkrieger.com/blogs/intro-distributed-memory-computing //www.denkrieger.com/blogs/intro-distributed-memory-computing#respond Wed, 19 Feb 2014 18:40:26 +0000 http://cn.staging.comsol.com/blogs?p=181011 在“混合建模”系列的上一篇文章中,我们讨论了有关共享内存计算的基础知识:什么是共享内存、为什么使用共享内存,以及 COMSOL 软件如何在计算中利用共享内存。今天,我们将讨论混合并行计算的另一个组成分支:分布式内存计算。

进程与集群

阅读完上一篇博客后,我们明白了共享内存计算是指将一个程序的任务分割成多个较小的、可在一个节点内并行运行的工作单元,即线程。这些线程共享了对某一部分内存的访问,故称之为共享内存计算。与之相比,分布式内存计算 的并行过程是通过多个进程(执行多线程)来完成的;每个进程都拥有各自的内存空间,其他进程无法访问。在分布式内存 方法中,这些进程分布在多台计算机、多个处理器和/或多个内核中,共同组成了一个并行程序。

简而言之,内存不再是共享的,而是被分配给各个进程(参见本系列第一篇博客中的图表)。

要理解分布式计算的设计意图,我们先来了解集群计算 这一基本概念。一台计算机的内存和计算能力是有限的。为了提升性能及增加可用的内存量,科学家开始将几台计算机连接在一起,组成了所谓的计算机集群

拆分问题

通过计算机集群来分配物理进程,这种方法将并行问题的复杂度提升到了一个新水平。每个问题都要分割成更小的单元——不仅数据需要拆分,对应的任务也要分配给各台机器。以矩阵类的问题为例,在执行庞大的阵列运算时,阵列可以拆分成区块(可能是不连续的,也可能是重叠的),每个私有区块由一个进程专门负责。当然,每个区块上的运算和数据可以和其他区块上的运算和数据相互耦合,所以在进程之间引入通信机制成为了必要。

为了实现通信,其他进程需要的数据或信息会被收集成数据块,然后通过发送消息与其他进程交换数据。这种方法被称为消息传递,模式可以是全局交换(多对多、多对一、一对多)或点对点交换(一个点发送进程,一个点接收进程)。根据整个问题的耦合程度,消息交换可能需要大量的通信。

人们希望尽可能在本地处理数据和执行运算,目的是尽量减少通信量。

图片展示了消息在计算机之间的传递。
完全图描述了需要进行多对多发送的消息数量。消息数量和使用的计算节点数量呈二次函数关系。

提高计算效率,求解大型问题

使用计算机集群时,科学家可以从两个方面受益于额外的资源:

第一,由于内存增多、计算能力增强,科学家可以求解更大型的问题。具体来说,一方面增加额外的进程,另一方面保持每个进程的工作负载(即子问题的规模和运算数量)水平不变,由此在相同的时间内解决规模更大的问题。这叫做弱扩展

第二,科学家可以在保持整体问题规模不变的前提下,将原问题分割成更多更小的子问题,并分配给更多进程。这样一来,每个进程的工作量减小,就可以更快地完成任务。在最优情况下,假如一个规模固定的问题被分配给 P 个进程,那么计算速度就会提高 P倍。相比于单位时间(一个小时、一天等)内运行一次仿真,第二种方法允许在单位时间内运行 P 次仿真。这种方法称为强扩展

简而言之,分布式内存计算可以帮助您在相同的时间内解决规模更大的问题,或者缩短相同问题的求解时间。

通信需求

接下来,我们将讨论消息传递的细节。进程如何知道程序的其他部分正在执行哪些任务?正如上文所述,进程必须发送和接收其他处理器或自己需要的信息和变量。这一过程反过来给系统带来了一些缺陷,突出问题是通过网络发送消息必须耗费大量额外的时间。

打个比方,我们可以回忆一下介绍共享内存的博客举出的会议室例子:与会者们围绕着一张圆桌进行协作,所有信息都免费提供给桌子前的每一位与会者,他们可以自由地获取并编辑文件,甚至可以并行工作。在本文中,会议室和桌子被换成了单人办公室,雇员坐在各自的办公间内处理面前的文件。

在新情景中,一位名叫爱丽丝的雇员修改了报告 A。她想提醒同事鲍勃,并且将修改内容传达给他。现在她需要停止工作,离开自己的办公室,走到鲍勃的办公室,将新信息递交给他,然后回到自己的办公桌继续工作。这比在同一间会议室中直接把一张纸递给给对方要麻烦得多。最糟糕的部分是,爱丽丝不得不花比修改本身更长的时间去提醒同事她做出了修改

在新版类比中,通信过程很可能成为系统的瓶颈,拖慢整体的工作进度。假如我们计划减少必要的通信量(或者加快通信速度,比如在办公室安装电话或更高效的通信网络),就可以缩短等待消息传递的时间,留出更多时间来计算数值仿真。对于分布式内存计算而言,瓶颈通常是在进程间传递电子数据的技术,您也可以直接理解为节点之间的电线。目前,可实现高吞吐量、低延迟的行业标准是 Infiniband,使用 Infiniband 技术传递消息的效率远远高于以太网。

为什么使用分布式内存?

分布式内存计算拥有众多优点,其中一个优点与共享内存相同,那就是为了增强系统的计算能力,不管我们在集群中增加内核、插槽还是节点,都可以启动更多进程,充分利用新添加的资源。运用更强大的计算能力,我们可以更快地获得仿真结果。

使用分布式内存的另一个好处是,每向集群中添加一个计算节点,我们就会得到更多可用内存。这意味着我们不再受限于主板分配的内存空间,因此理论上可以计算任意大的模型。在多数情况下,分布式内存计算的扩展性强于共享内存计算,也就是说,在加速比达到饱和之前,可以使用的进程数(与可以使用的线程数相比)会多得多。

柱状图显示了每日可进行的仿真次数与使用的进程之间的关系。
纵轴:针对下方图像中的穿孔板消声器模型,每日可进行的仿真次数。横轴:使用的进程数量。通信网络使用了千兆以太网。前四个进程在一个计算节点上执行,第四个进程之后才会用到以太网。在仿真中,第四个和五个进程之间的差异很小,说明了即使对于参数化问题,缓慢的通信网络依旧会产生明显的影响。所使用的计算节点装有 Intel® Xeon® E5-2609和 64 GB DDR3 @1600 MHz。

然而,我们也必须认识到分布式内存的局限性。与共享内存的情况一样,有些问题十分适合使用分布式内存进行计算,有些问题则不适合。此外,除了问题是否容易并行化,我们还要考虑问题求解过程需要的通信量。

我们以一个瞬态问题为例,在这个问题中,大量粒子相互作用,每当系统完成一个运算步骤,所有的粒子都需要获取每个其他粒子的信息。假定每个粒子都由各自的专属进程进行计算,那么此示例产生的通信量可以用完全图来描述(见第一张图),并且每一次迭代的消息数量会随着粒子数和进程数的增加而迅速增长。相比之下,参数化扫描中的参数值可以分别进行独立计算,几乎不需要任何通信,因此通信瓶颈对它的限制作用相对较小。

用于测试加速比的小型消声器参数模型
用于测试加速比的模型。这是一个小型参数化模型(75 万个自由度),使用 PARDISO 直接求解器完成求解。此模型可以在“案例下载”中获取。

COMSOL 如何发挥分布式内存计算的优势

有权访问网络浮动许可证(FNL)的用户可以在一台多处理器单机、集群上,甚至是云端使用 COMSOL 软件的分布式处理功能。COMSOL 软件的求解器默认在分布式模式下运行,无需进一步设置。由此,您可以在相同的时间内运行规模更大的仿真,或以更快的速度完成同等规模的仿真。不管是哪种方式,COMSOL Multiphysics 都可以帮您提高生产率。

当计算参数化扫描时,COMSOL 的分布式处理功能也可以发挥重要作用。您可以将应用不同参数值的求解过程自动分配给打开 COMSOL Multiphysics 时启动的各个进程。因为在此类参数化扫描中,这些求解过程可以互相独立计算,所以被称为“易并行问题(embarrassingly parallel)”。在良好的互联网络中时,加速比基本等于进程数量。

如果希望了解更多有关分布式内存计算的内容,推荐您阅读《COMSOL 参考手册》。手册列举了多个如何在分布式模式下启动 COMSOL 的示例。如果希望详细了解如何提交计算任务,您还可以参考高性能计算(HPC)集群的用户指南。

“混合建模”系列的下一篇博客中,我们将进一步探究混合建模的概念,请不要错过!

]]>
//www.denkrieger.com/blogs/intro-distributed-memory-computing/feed/ 0
共享内存计算入门:定义、目的及原理 //www.denkrieger.com/blogs/intro-shared-memory-computing //www.denkrieger.com/blogs/intro-shared-memory-computing#respond Wed, 05 Feb 2014 18:52:05 +0000 http://cn.staging.comsol.com/blogs?p=180211 几周前,我们发布了“混合建模”系列的第一篇博客文章,介绍了混合并行计算的含义,以及它是如何提高 COMSOL Multiphysics 运算效率的。今天,我们将简要探讨混合并行计算的一个组成部分——共享内存计算。不过在此之前,我们首先会解释“应用程序并行运行”的意义。此外,我们还将讨论何时以及如何在 COMSOL 软件中使用共享内存。

多核和多线程

人们对计算机运算速度的需求日益增长,然而由于一些技术限制(例如时钟频率的提升瓶颈)的存在,迫使计算机进入了多核 时代。如今,多核计算机已经成为主流,市面上常见的处理器通常最多是 12 核,而实际上处理器可以安装多达 60 个以上的核心。如果您希望了解什么是核心,以及它与共享内存计算之间的关联,请查看链接中介绍共享内存计算的图表

鉴于上述情况,每个应用程序都需要考虑并行性,以有效发挥前沿并行硬件的性能;否则,这些程序只能使用一个 内核执行运算。虽然用户往往不能直接感受并行性的影响,不过,您应当知道自己的计算机拥有并行处理能力,清楚修改哪些软件设置能提高计算效率,明白当所有核心超频时应该做何预期。

如果要使执行一个进程应用程序 在一台多核机器上并行运行,必须将它分割成更小的单元,这些单元被称作线程。实现多个线程并发执行的技术叫做多线程。多线程技术在十五年前便已经成为了计算机的内置功能。对于多线程技术而言,多核心并非不可或缺的配置;单核处理器可以采用时间分片模式,通过在活动线程之间快速切换来支持多线程。让一个核心“同时”处理多个线程 有效提高了资源利用率,当然,这一技术也可以应用于多核处理器。

了解基本原理后,我们就很容易理解,为什么说与单核处理器相比,多核处理器向前迈出了一大步。装配多个计算单元便意味着系统可以同时运行多个线程,进而增加了单位时间内的计算量。基于上述原因,并行计算目前是加速计算的主要来源。

下图展示了 COMSOL Multiphysics 与八核处理器相结合的优势。当八个核心都投入应用时,计算时间会大大减少。它带来的直接好处是,在相同时间内可执行的仿真次数大大增加,从而提高了生产率。下图显示了对选定模型进行测试时,八核处理器的生产率是单核处理器的 6.5 倍。

每日可执行的仿真次数与核心数量之间的关系。
测试下方的射频加热模型时,每日可执行的仿真次数与核心数量之间的关系。用于测试的计算服务器装有 2 个 Intel® Xeon® E5-2609 和 64 GB DDR3 @1600 MHz。

使用了共享内存的射频加热模型计算案例。
用于测试加速比的模型。右侧的红白渐进标度表示温度(摄氏度),绿色箭头表示磁场。此模型拥有近 140 万个自由度,使用 PARDISO 直接求解器进行求解,并且需要 52 GB 的内存。请注意:这是一个双向耦合的多物理场模型。“案例库”中提供了一款规模相对较小的模型。

什么是共享内存?

当计算机执行一项进程时,操作系统会分配给应用程序一定的内存供其使用(注意:在 COMSOL Multiphysics 中,您可以在底部的工具栏中查看分配给程序的内存大小)。概括而言,由主进程创建的全部线程共享了这些内存,每个线程都可以访问储存在内存中的全部变量。

打个比方,您可以想像一群人围坐在会议室的圆桌旁开会,桌子上摊着所有的重要会议报告和信息。每个参会者可以阅读任何文件,或在上面写字。这样一来,每个参会者都可以挑选自己要处理的文件,所有信息都是共享的。

上述比喻让我们对运行原理有了一个大致印象,因此很大程度上简化了共享内存的概念。毕竟在计算机上进行共享内存编程时,人们必须注意许多方面和细节。很显然,系统需要引入某种同步机制,而且或许会发生资源冲突——毕竟想象一下 50 个人在一张纸上书写时的情景。这也初步解释了为什么第一张图中的加速比逐渐降低并最终将在某一点处达到饱和。

内存共享允许线程直接访问共享的变量,而且程序不必进行通信,也能在线程之间交换信息。在计算中,通信很可能是一个巨大瓶颈,应当尽可能避免;而 COMSOL 软件采用了共享内存,因此在这一方面具有比较优势。当然,共享内存计算也有自己的缺点。正如上一篇系列博客所述,我们可用的内存大小受到计算机内存容量的限制,而且在编写应用程序时,程序员必须考虑到其他逻辑问题。

为什么使用共享内存?

如上所述,并行运算目前是加快计算速度的主要方式。为此,程序员需要清楚如何将整体工作分配给所有参与的线程。不过如果一项任务无需任何依赖项也能并行执行,分配的过程将相当简洁明了。

在数值线性代数中,您常常会同矩阵和矢量等特大型阵列打交道。在这些情况中,最常见的构造是处理阵列的长循环。如果采用共享内存的机制,所有线程都可以访问整个阵列,而且能够通过多种方式将循环拆分给多个线程(前提是不存在循环体依赖)。当 COMSOL Multiphysics 执行各种线性代数运算和特定算法时,都利用了共享内存式并行计算,充分体现了它是一款灵活的并行工具。

但是,对于某些任务和算法,人们很难甚至不可能采用并行计算的方法。斐波那契数列 F(n) = F(n-1) + F(n-2) 就是一个例子,因为其中每个步骤都依赖于上一步,因此它是一个无法采用并行处理的递归问题。其他与并行计算和多核计算机不相容的算法包括时间步进法、延拓(例如递增)研究,它们的共同特征是计算量级不变。

然而,没有人会仅仅为了整日计算斐波那契数列的元素才使用计算机和数值软件;而且幸运的是,市面上每一款有限元分析软件的主要功能——求解线性方程组在很大程度上是可并行的。因此,即使矩阵方程只是某个大型任务(例如瞬态问题)的其中一部分,但是涉及到矩阵求解的问题或多或少都能从多核处理器中受益。对于绝大多数模型而言,COMSOL Multiphysics 主要执行矩阵矢量运算,因此采用共享内存多核处理器具有巨大的优势。对于时间步进算法和延拓研究而言,每个时间步和参数步本身都可以实现并行执行。为了提升这类研究的可扩展性,采用时间步进法或延拓研究的底层物理场应当拥有数量巨大且充足的自由度。

此外,您必须牢记:整体的加速比会受到算法中非并行化分支及其执行情况的限制。阿姆达尔定律描述了这个著名的观察结果。通过推算上述模型中不可并行化的部分,我们发现即使处理器的核心数量可以无限增加,加速比也不会超过 30 倍(不过 30 倍已经相当厉害了!)。因此从理论上讲,COMSOL Multiphysics 每日仿真次数可略高于 60 次。

COMSOL Multiphysics 如何发挥多核配置的优势

当然,只有当多核计算机的所有核心均处于工作状态时,才能获得最优数值仿真性能。COMSOL 软件会默认利用系统中的所有可用核心,因此您无需进行任何特别设置,就能最大限度地利用系统资源。

不过有时您或许需要测量模型或系统的加速比,或者保留几个核心来处理其他应用程序或任务。在这种情况下,您可以更改启动 COMSOL Multiphysics 时默认使用的核心数量,或者在“首选项”设置中编辑“多核与集群计算”。此外,在混合并行计算中,如果同时使用分布式内存和共享内存,利用特定设置可能会取得更佳的效果。

我们将在下一篇系列博客文章中继续探讨这一主题,敬请期待!

扩展阅读

  • 正如第一篇系列博客提到的,如果您希望研读共享内存计算的背景知识,劳伦斯利弗莫尔国家实验室(Lawrence Livermore National Laboratory)的《并行计算导论》非常值得一读。
  • 请将“混合建模”系列加入收藏,以免错过新文章。
]]>
//www.denkrieger.com/blogs/intro-shared-memory-computing/feed/ 0
利用混合并行计算技术加速物理场仿真 //www.denkrieger.com/blogs/hybrid-parallel-computing-speeds-up-physics-simulations //www.denkrieger.com/blogs/hybrid-parallel-computing-speeds-up-physics-simulations#respond Wed, 22 Jan 2014 17:47:08 +0000 http://cn.staging.comsol.com/blogs?p=179861 二十年前,配备了多达 1000 个处理单元的向量处理器超级计算机在超级计算机 500 强中占据了统治地位。随着时间推移,大规模并行计算集群不仅迅速取代了向量超级计算机成为了榜单中的新霸主,同时还促使了分布式计算的兴起。集群的每个计算节点上最初只有一个专用于高性能计算的单核处理器,很快,人们针对需要共享内存的节点,增加节点上的处理器数量,并以这种具备内存共享能力的并行计算机为基础,开发出了多核处理器,满足了各类计算应用对高效算法的需求。再看今天的超级计算机 500 强排名,我们会发现当中大多数集群均由数量众多的计算节点组成,每个节点又包含多个插槽(socket),每个插槽连接着最多可达八核的多核处理器。并行计算是一种适用于共享内存计算系统的技术,与基于分布式内存的集群采用的并行计算技术全然不同。为了实现高效率的并行计算,我们需要一种两者并用(混合)的机制。

共享和分布式内存

并行计算主要有两种经典的实现方式:共享内存分布式内存。虽然二者的最终目的都是利用并行硬件提高运算效率、扩大计算规模,但是这两种机制在结构方面存在许多差异。(注:美国劳伦斯利弗莫尔国家实验室网站提供了详细介绍并行计算的学习资料。

这两种方法的名称本身便表明了二者的基本差异。在共享内存计算系统中,整个程序的各个分布进程并行运行,共享相同的内存空间。这种方式保证了数据在核心和处理器之间高速传输,但主要缺点是共享内存节点上的计算资源有限。如果问题规模扩大,或者需要引入更多核心来减轻每个核心的计算量,人们却不能增加更多资源。综上所述,共享内存计算的扩展性 较差。

在分布式内存计算系统中,内存是由多个并行进程分配的,而非共享的。这些进程必须通过发“消息”进行显式通信,所以通信和同步会耗费额外的时间。我们应该利用数据局部性,并改善算法,尽可能地减少通信量。分布式内存计算的一大优势是出色的扩展性,轻松支持增加更多可用的资源(节点,核心与内存资源)。

根据经验,我们可以总结出一个简单的原则:对于核心数量极多的计算机,应使用共享内存;对于由多个计算节点组成的集群,则应使用分布式内存。

混合并行计算

从处理器市场的发展历程中,我们可以发现一个明显的趋势:处理器不再通过提高时钟频率,而是通过不断增加核数来增强性能。AMD 公司于 2004 年发布了世界上第一款 x86 双核处理器。到了 2013 年下半年,英特尔发布的一款处理器已经升级到了 12 核。如果传言属实,英特尔的 Knights Landing 技术可能会达到 72 核

共享内存与分布式内存计算的图解

这也意味着,由单核计算节点组成的集群已经成为了上个世纪的古董。在世界超级计算机 500 强中,大多数集群计算节点上的每个插槽均安装了八核处理器。小型和中型计算集群也采用了相似的装置。这种配置的广泛应用使得混合运用两种机制成为必然:共享内存应用于节点内计算,同时分布式内存应用于节点间计算。这种做法的目标是最大限度地提升扩展性,并减少消息传输的成本,同时充分发挥共享内存的优势。混合并行计算 结合了共享内存机制和分布式内存机制,提供了一种灵活适应所有计算平台的通用方法。如果正确地结合两种并行技术,就可以加快计算速度,提高扩展性,并且高效地利用硬件。

 混合并行计算的图解

COMSOL软件与混合并行

默认情况下,当在一个多核并行工作站或个人计算机上启动 COMSOL® 软件时,软件会通过共享内存机制调用系统中所有可用的核心进行并行计算。在工作站或集群上工作时,用户可以控制所用的并行计算方法,选择分布式内存、共享内存,或者混合模式来运行仿真。您可以在《COMSOL 参考手册》中阅读相关操作的详细说明。

COMSOL Multiphysics® 及其附加产品专为计算耦合物理场问题量身定制。不同问题对应不同的最优并行配置,这主要取决于问题涉及的底层物理场、模型的耦合程度、问题规模和求解器选择。COMSOL 软件内置了精细的选项控制,供您挑选与具体问题对应的最佳并行配置。

]]>
//www.denkrieger.com/blogs/hybrid-parallel-computing-speeds-up-physics-simulations/feed/ 0