从中获得良好性能 mdrun软件 #
硬件背景信息 #
核心 # 实际执行的硬件计算单元 说明。 通常 处理器,通常更多。 隐藏物 # 内核本地的一种特殊内存,速度快得多 访问主内存,有点像人类的顶部 桌子,与他们的文件柜相比。 通常有 与核心相关联的几层缓存。 插座 # 共享某种局部性的一组核心,例如 共享缓存。 这使得传播效率更高 套接字内核心的计算工作量高于核心 在不同的插槽中。 现代处理器通常有超过 一个插座。 节点 # 共享粗级别局部性的一组套接字,例如 无需任何网络即可共享对同一内存的访问 硬件。 普通笔记本电脑或台式电脑是一个节点。 A类 节点通常是大型计算集群的最小数量 用户可以请求使用的。 线 # 核心要执行的指令流。 有很多 创建和管理的不同编程抽象 将计算分散到多个线程上,例如OpenMP, pthreads、winthreads、CUDA、SYCL、OpenCL和OpenACC。 某些类型的 硬件可以将多个软件线程映射到一个内核; 在 英特尔x86处理器这被称为“超线程”,而 更一般的概念通常称为SMT “同时多线程”。 例如,IBM Power8可以使用 每个内核最多8个硬件线程。 此功能通常可以在中启用或禁用 硬件BIOS或通过Linux操作中的设置 系统。 GROMACS通常可以利用这一点 免费性能提升。 在大多数情况下 默认情况下启用,例如在新的x86处理器上,但在某些情况下 系统管理员可能已禁用它。如果是 如果是这样,询问他们是否可以为您重新启用它。 如果你不确定 如果已启用,请检查中CPU信息的输出 并与联机找到的CPU规格进行比较。 线程亲和力(固定) # 默认情况下,大多数操作系统都允许软件线程迁移 在内核(或硬件线程)之间帮助自动平衡 工作量。 然而 gmx mdrun 会恶化 如果这是允许的,并且会显著降低,特别是当 依赖一个列中的多线程。 为了避免这种情况, gmx mdrun 将默认 设置其线程与各个内核/硬件线程的关联, 除非用户或软件环境已经这样做了 (或不是整个节点都用于运行,即有可能 用于节点共享)。 设置线程相关性有时被称为线程“固定”。 MPI(消息传递接口) # 主要的多节点并行化方案,它提供 一种标准化语言,可以用它编写程序 跨多个节点工作。 等级 # 在MPI中,秩是用于 多节点并行化方案。 该分组可以是 由用户控制,可能对应于核心 套接字、一个节点或一组节点。 最佳选择各不相同 硬件、软件和计算任务。 有时是MPI 秩称为MPI进程。 通用分组 # 图形处理单元,通常速度更快 对于特定类型的 计算工作负载。 GPU始终与 特定节点,通常是其中的特定套接字 节点。 开放式多媒体播放器 # 许多编译器支持的一种标准化技术,用于共享 多核计算工作负载。 通常与 MPI实现混合MPI/OpenMP并行。 CUDA公司 # NVIDIA开发的专有并行计算框架和API 这允许瞄准他们的加速器硬件。 GROMACS使用CUDA为NVIDIA硬件提供GPU加速支持。 开放运算语言 # 一个开放的基于标准的并行计算框架,包括 基于C99的编译器和针对异构的编程API 和加速器硬件。 GROMACS使用OpenCL进行GPU加速 在AMD设备(包括GPU和APU)、英特尔集成GPU和苹果上 硅集成GPU; 还支持一些NVIDIA硬件。 在GROMACS中,OpenCL被弃用,取而代之的是SYCL。 SYCL公司 # 一个基于C++17的开放标准,用于针对异构系统。 SYCL有几种实现,其中GROMACS支持两种: 英特尔oneAPI DPC++ 和 自适应Cpp .GROMACS使用SYCL进行GPU加速 在AMD和Intel GPU上。 NVIDIA GPU也有实验支持。 SIMD(单指令多数据) # 一种CPU指令,现代CPU内核可以通过它执行多个 单循环中的浮点指令。
GROMACS中基于并行化的工作分配 #
域分解 # 域分解(DD)算法将 非键相互作用的(短程)成分 共享空间位置的域,允许使用 高效算法。 每个域处理所有 其成员的粒子-粒子(PP)相互作用 映射到单个MPI列组。 在PP列组中,OpenMP线程 可以共享工作负载,并且可以将一些工作卸载到 GPU。 PP等级还处理 其域的成员。 GPU可以执行超过 一个PP等级,但通常使用单个 每个GPU的PP排名,该排名有数千 粒子。 当PP列的工作在CPU上完成时, MD运行 将广泛使用SIMD 核心能力。 有各种各样的 命令行选项 控制DD算法的行为。 颗粒米埃瓦尔德 # 粒子-梅什-埃瓦尔德(PME)算法处理长期 非键相互作用的组分(库仑,可能还有 伦纳德-琼斯)。 要么全部,要么只是队伍的一个子集 参与计算远程组件的工作 (通常不准确地简单称为“PME” 组件)。 因为该算法使用的3D FFT需要 全球通信,其并行效率随着等级的增加而降低 参与,这意味着只使用子集是最快的 等级(例如四分之一到二分之一的等级)。 如果 有单独的PME等级,然后剩下的等级处理 PP工作。否则,所有级别都会同时进行PP和PME工作。
并行化方案 #
通过SIMD:SSE、AVX等实现核内并行。 #
通过OpenMP实现进程(或)级并行 #
通过GPU卸载和线程-MPI实现节点级并行 #
带螺纹的多线程-MPI #
混合/异构加速 #
通过MPI在多个节点上进行并行化 #
控制区域分解算法 #
-关系型数据 可用于设置inter所需的最大距离 电荷组键合相互作用。 双体通信 低于非键合截止距离的键合相互作用总是 免费提供非绑定通信。 粒子超出 只有在非保税截止日期 缺失键相互作用; 这意味着额外的费用是 次要且几乎独立于 -关系型数据 .带动态 负载平衡,选项 -关系型数据 还设置了 区域分解单元大小。 默认情况下 -关系型数据 已确定 通过 gmx mdrun 基于初始坐标。 所选值将 在互动范围和沟通成本之间取得平衡。 -dd检查 默认情况下启用。 当电荷组间键合相互作用 超出粘结截止距离, gmx mdrun 以 错误消息。 对于成对相互作用和表列键 不生成排除,可以使用关闭此检查 选项 -节点检查 。 -雷达控制单元 当存在约束时,选项 -雷达控制单元 影响 单元格大小限制也是如此。 由NC约束连接的粒子,其中NC是LINCS顺序 加1,不应超过最小单元格大小。 一个错误 发生这种情况时会生成消息,用户应该更改 分解或降低LINCS顺序并增加 LINCS迭代次数。 默认情况下 gmx mdrun 估计 保守情况下P-LINCS所需的最小单元尺寸 时尚。 对于高度并行化,设置 P-LINCS所需的距离 -雷达控制单元 。 -分布式数据库 设置单元格的最小允许x、y和/或z缩放比例 动态负载平衡。 gmx mdrun 将确保细胞能够 至少按这个因素缩小。 此选项用于 自动空间分解(不使用时 -日 )以及 用于确定栅极脉冲数,从而设置 允许的最小单元格大小。 在某些情况下,价值 属于 -分布式数据库 可能需要进行调整以适应高或低 系统的空间不均匀性。
多级并行化:MPI和OpenMP #
独立PME等级 #
正在运行 mdrun软件 在单个节点内 #
-纳特 要使用的线程总数。 默认值0的开始形式为 许多线程作为可用内核。 螺纹是否 线程-MPI列组和/或此类列组中的OpenMP线程取决于 其他设置。 -ntmpi接口 要使用的线程MPI列组总数。 默认值为0, 将为每个GPU启动一个列组(如果存在),否则为一个列 每个核心。 -ntomp公司 每个列组要启动的OpenMP线程总数。 这个 默认值0将在每个可用内核上启动一个线程。 或者, mdrun软件 将遵守适当的制度 环境变量(例如。 OMP_NUM_螺纹 )如果设置。 请注意,OpenMP线程的最大数量(每列)为, 出于效率原因,限制为64。 虽然它很少有益于使用 大于此值的线程数,GMX_OPENMP_MAX_threads CMake变量 可用于增加限制。 -核动力装置 为长期目标贡献的等级总数 PME组件(如果使用)。 默认值为-1,将奉献等级 只有当线程总数至少为12个时,才会使用 远程组件的排名约为四分之一。 -ntomp_pme(P) 当使用具有单独PME等级的PME时, 每个单独PME列组的OpenMP线程总数。 默认值0从 -ntomp公司 。 -销 可以设置为“自动”、“打开”或“关闭”以控制 mdrun软件 将尝试设置线程与核心的关联性。 默认为“auto”,这意味着如果 mdrun软件 检测到所有 节点上的内核用于 mdrun软件 ,那么它应该表现良好 如“on”,并尝试设置相关性(除非它们是 已经被其他东西设置)。 -皮诺夫塞特 如果 -销 在 ,将逻辑核心编号指定为 哪一个 mdrun软件 应该钉住第一根螺纹。 当运行超过 一个实例 mdrun软件 在节点上,使用此选项可以避免 固定不同的螺纹 mdrun软件 实例到同一个内核。 -针状步幅 如果 -销 在 ,指定逻辑核心中的步幅 核心的编号 mdrun软件 应将其螺纹固定。 什么时候? 运行的多个实例 mdrun软件 在节点上,使用此选项 避免钉住不同的螺纹 MD运行 实例到 相同的核心。 使用默认值0来最小化线程数 每个物理核心-这让 mdrun软件 管理硬件、操作系统和 如何将逻辑核心映射到的特定于配置的详细信息 物理核心。 -dd订单 可以设置为“interleave”、“pp_pme”或“cartesian” 默认为“交错”,这意味着任何单独的PME排列 将按PP、PP、PME、PP、PP, PME等。这通常会充分利用可用的 硬件。 “pp_pme”首先映射所有pp排名,然后映射所有pme 排名。 “笛卡尔”是一种特殊用途的映射,通常很有用 仅在全局加速的特殊环面网络上 笛卡尔通信器的通信。 如果有,则无效 没有单独的PME级别。 -编号 用于设置执行短程非绑定交互的位置。 可以设置为“自动”、“cpu”、“gpu” 默认为“auto”,它使用兼容的GPU(如果可用)。 设置“cpu”要求不使用GPU。 设置“gpu”需要 可以使用兼容的GPU。 -项目经理 用于设置执行远程非绑定交互的位置。 可以设置为“自动”、“cpu”、“gpu” 默认为“auto”,它使用兼容的GPU(如果可用)。 设置“gpu”需要一个兼容的gpu可用。 GPU上的PME不支持多个PME列组,因此如果使用GPU 对于PME计算-npme必须设置为1。 -粘结的 用于设置在何处执行作为 域的PP工作负载。 可以设置为“自动”、“cpu”、“gpu” 默认为“自动”,仅当一个兼容的CUDA或SYCL GPU 可用,GPU正在处理短程交互,并且 CPU正在处理远程交互工作(静电或 LJ)。 键合相互作用的工作发生在同一个 GPU作为短程交互,不能独立 分配。 设置“gpu”要求有兼容的gpu可用,并且 使用。 -更新 用于设置执行更新和约束的位置(如果存在)。 可以设置为“自动”、“cpu”、“gpu” 默认为“auto”,当前总是使用CPU。 设置“gpu”要求提供兼容的CUDA或SYCL gpu, 模拟使用一个等级。 当前不支持GPU上的更新和约束 具有质量和约束的自由能扰动,域 分解、虚拟场地、Ewald曲面校正、, 副本交换、约束拉动、方向约束 和计算电生理学。 -gpu id 一个字符串,指定GPU的ID号 可供每个节点上的列组使用。 例如, “12”指定ID为1和2的GPU(如报告所示 (由GPU运行时使用) mdrun软件 。这很有用 与其他计算共享节点时,或者如果GPU 专用于GROMACS不应使用的显示器。 如果不指定此参数, mdrun软件 将使用所有GPU。 当许多GPU 现在,可以使用逗号分隔ID,因此 “12,13”将使GPU 12和13可用于 mdrun软件 。 可能有必要在不同的GPU上使用不同的GPU 模拟节点,在这种情况下,环境 变量 GMX_GPU_ID 可以为列组设置不同的 在不同的节点上实现该结果。 在2018年之前的GROMACS版本中,此参数用于 指定GPU可用性和GPU任务分配。 后者现在用 -gputasks公司 参数。 -gputasks公司 一个字符串,指定GPU的ID号为 由该节点上相应的GPU任务使用。 例如, “0011”指定前两个GPU任务将使用GPU 0, 另外两个使用GPU 1。 使用此选项时 必须知道列数 mdrun软件 ,以及在哪里 应该运行不同类型的任务,例如使用 -编号 通用程序单元 -仅设置为在GPU上运行的任务 解析映射的计数。 请参见 将任务分配给GPU 了解更多详细信息。 请注意 -gpu id 和 -gputasks公司 不能同时使用! 在2018年之前的GROMACS版本中,只有一种类型 GPU任务(“PP”)可以在任何列组上运行。 现在有一些 支持在GPU上运行PME,GPU任务的数量 (以及 -gputasks公司 字符串) 对于单秩模拟,实际上可以是3。 ID 在这种情况下仍然必须相同,因为使用多个GPU 每一个等级尚未实现。 串中每个秩的GPU任务的顺序是PP优先, PME第二。 不同类型GPU任务的排名顺序 默认情况下是相同的,但可以受 -dd订单 选项,并且在使用多个节点时变得非常复杂。 请注意,PP任务的键合交互可能 在与短期工作相同的GPU上运行,或在CPU上运行, 可以使用控制 -保税的 标志。 GPU任务分配(无论是手动设置还是自动设置), 将在中报告 mdrun软件 输出打开 模拟的第一个物理节点。 例如: gmx公司 mdrun软件 - gputasks公司 0001 - 编号 通用程序单元 - 项目经理 通用程序单元 - 核动力装置 1 - ntmpi接口 4 将在日志文件/终端中生成以下输出: 打开 主办 tcbl14号机组 2 GPU(全球生产单位) 挑选出来的 对于 这 运行 。 映射 属于 通用分组 标识 到 这个 4 通用分组 任务 在里面 这个 4 等级 在 这 节点 : 聚丙烯 : 0 , 聚丙烯 : 0 , 聚丙烯 : 0 , 项目管理工程师 : 1 在这种情况下,用户设置3个等级来计算PP功 在GPU 0上,1排名以计算GPU 1上的PME。 日志文件中还报告了GPU的详细索引。 有关GPU任务的更多信息,请参阅 GPU任务类型 。 -设备快速傅立叶变换 允许选择是在CPU还是GPU上执行3D FFT计算。 可以设置为“自动”、“cpu”、“gpu”。 当PME卸载到GPU时 -pmefft系统 全球采购单位 是默认值, 整个PME计算在GPU上执行。 然而, 在某些情况下,例如使用相对较慢或较老一代的GPU 与运行中的快速CPU内核相结合,将一些工作移出GPU 通过计算CPU上的FFT返回CPU可以提高性能。
的示例 mdrun软件 在一个节点上 #
gmx公司 mdrun软件
gmx公司 mdrun软件 - 纳特 8
gmx公司 mdrun软件 - ntmpi接口 2 - ntomp公司 4
gmx公司 mdrun软件 - ntmpi接口 4 - 编号 通用程序单元 - 项目经理 中央处理器
gmx公司 mdrun软件 - ntmpi接口 1 - 编号 通用程序单元 - 项目经理 通用程序单元 - 保税的 通用程序单元 - 更新 通用程序单元
gmx公司 mdrun软件 - ntmpi接口 4 - 编号 通用程序单元 - 项目经理 中央处理器 - gputasks公司 0011
gmx公司 mdrun软件 - ntmpi接口 4 - 编号 通用程序单元 - 项目经理 通用程序单元 - 核动力装置 1 - gputasks公司 0001
gmx公司 MD运行 - ntmpi接口 4 - 编号 通用程序单元 - 设备设备 通用程序单元 - npme公司 1 - gputasks公司 0011
gmx公司 mdrun软件 - gpu id 12
gmx公司 mdrun软件 - 纳特 6 - 大头针 在 - 皮诺夫塞特 0 - 针状步幅 1
gmx公司 mdrun软件 - 纳特 6 - 大头针 在 - 皮诺夫塞特 6 - 针状步幅 1
mpirun运行 - 净现值 2 gmx_mpi(gmx _ mpi) mdrun软件
正在运行 mdrun软件 在多个节点上 #
-调谐 默认为“on”。如果“on”,模拟将 优化PME和DD算法的各个方面 列组和/或GPU之间的负载以最大化吞吐量。 一些 mdrun软件 特性与此不兼容,这些特性将被忽略 此选项。 -数字图书馆 可以设置为“自动”、“否”或“是” 默认为“自动”。在MPI列组之间执行动态负载平衡 需要最大化性能。 这一点尤其重要 对于具有异质粒子或相互作用的分子系统 密度。 当性能损失的特定阈值为 超过,DLB激活并在级别之间移动粒子以提高 性能。 如果可用,使用 -保税的 通用程序单元 应为 以提高DLB最大化性能的能力。 DLB与驻留在GPU的并行化(与 -更新 通用程序单元 ) 因此,在这种模拟中,它仍然处于关闭状态。
的示例 mdrun软件 在多个节点上 #
mpirun运行 - 净现值 16 gmx_mpi(gmx _ mpi) mdrun软件
mpirun运行 - 净现值 16 gmx_mpi(gmx _ mpi) mdrun软件 - 核动力装置 5
mpirun运行 - 净现值 11 gmx_mpi公司 mdrun软件 - ntomp公司 2 - npme公司 6 - ntomp_pme(P) 1
mpirun运行 - 净现值 4 gmx_mpi(gmx _ mpi) mdrun软件 - ntomp公司 6 - 编号 通用程序单元 - gputasks公司 00
mpirun运行 - 净现值 8 gmx_mpi(gmx _ mpi) mdrun软件 - ntomp公司 三 - gputasks公司 0000
mpirun运行 - 净现值 20 gmx_mpi(gmx _ mpi) MD运行 - ntomp公司 4 - gputasks公司 00
mpirun运行 - 净现值 10 gmx_mpi(gmx _ mpi) mdrun软件 - gpu id 1
mpirun运行 - 净现值 20 gmx_mpi(gmx _ mpi) mdrun软件 - gpu id 01
避免因约束而进行沟通 #
了解如何运行 mdrun软件 更好的 #
粒子网格Ewald期间的粒子-粒子 区域分解 域分解通信负载 域分解通信边界 虚拟站点约束 将X发送到粒子网格Ewald 邻居搜索 启动GPU操作 坐标的交流 武力 等待+武力沟通 颗粒网格Ewald PME再贴现。 X/F(X/F) PME价差 PME集合 PME 3D-FFT公司 PME 3D-FFT通信 PME解决Lennard-Jones PME解决LJ PME解决方案 PME等待粒子粒子 等待+接收PME强制 等待GPU非本地 等待GPU本地 等待PME GPU扩散 等待PME GPU收集 减少PME GPU力量 非绑定位置/力缓冲操作 虚拟站点分布 COM拉力 AWH(加速重量直方图法) 写入轨迹 更新 约束条件 能量的传播 强制旋转 添加旋转力 位置交换 交互式MD MD图
域分解再分配 DD邻居搜索网格+排序 DD设置通信 DD生成拓扑 DD制造约束 DD拓扑其他 本地邻居搜索网格 NS网格非本地 NS搜索本地 NS搜索非本地 粘结力 粘结FEP力 约束力 列出的缓冲操作 非粘结修剪 非结合力 启动非绑定GPU任务 启动PME GPU任务 埃瓦尔德力修正 非绑定位置缓冲操作 非绑定力缓冲操作
正在运行 mdrun软件 带GPU #
GPU任务类型 #
近程非键相互作用的GPU计算 #
GPU加速PME计算 #
已知限制 #
GPU加速计算键合相互作用(CUDA和SYCL) #
GPU加速约束计算和坐标更新(仅限CUDA和SYCL) #
将任务分配给GPU #
有两种不同类型的可分配GPU加速任务可用,(短程)非绑定任务和PME。 每个PP列组都有一个可以卸载到GPU的非绑定任务。 如果PME任务只有一个列组(包括如果该列组是 PME-only rank),则可以将该任务卸载到GPU。 这样的PME 任务可以完全在GPU上运行,也可以使其后期阶段仅在CPU上运行。
限制是GPU上的PME不支持PME域分解, 这样,只有一个PME任务可以卸载到单个GPU 分配给单独的PME列组,而非绑定的可以分解并卸载到多个GPU。
没有新的可分配GPU任务可用,但有任何绑定的交互 可以在与PP任务的短期交互相同的GPU上运行。 这可能受到
-保税的 标志。
更新和约束可以在与PP任务的短期非绑定和绑定交互相同的GPU上运行。 这可能受到
-更新 标志。
通信和辅助任务也可以在CUDA构建中卸载。 在域分解晕交换和PP-PME通信中, 代替通过CPU在GPU之间进行转移, 直接GPU–可以进行GPU通信。 作为光环交换的辅助任务,执行数据打包和解包 也会卸载到GPU。 在2021版本中,这由thread-MPI和2022版本支持 它还支持使用支持GPU的MPI。 默认情况下不启用直接GPU通信,可以使用触发 这个
GMX_ENABLE_DIRECT_GPU_COMM公司 环境变量(只起作用 在支持的系统上)。
默认情况下,更新在GPU上运行,支持模拟设置; 请注意,这仅适用于CUDA和SYCL,而不适用于OpenCL。
PME分解支持添加了额外的与并行化相关的辅助GPU任务,包括网格打包和缩减操作 以及分布式GPU FFT计算。
添加了对CUDA-graphs调度的实验支持,它支持大多数不需要CPU强制计算的GPU驻留运行。
GPU任务的性能注意事项 #
性能平衡取决于您的CPU内核的速度和数量 与GPU的速度和数量相比。 驻留在GPU的并行化模式(卸载更新/约束)较少 与强制卸载模式相比,对适当的CPU-GPU平衡更敏感。 使用慢速/老式GPU和/或快速/现代CPU 核心,让CPU进行PME计算可能更有意义, GPU专注于非绑定计算。 使用快速/现代GPU和/或慢速/旧CPU,内核很少, 让GPU进行PME通常会有所帮助。 将绑定工作卸载到GPU通常不会提高模拟性能 因为高效的基于CPU的内核可以完成绑定计算 在GPU完成其他卸载工作之前。因此, gmx mdrun 当PME卸载时,将默认为无保税卸载。 保税卸载可以提高性能的典型案例有: 具有显著的结合功(例如纯脂质或大部分具有少量溶剂的聚合物系统), 每个GPU的CPU内核非常少和/或很慢,或者当CPU 其他计算(例如PME、自由能)。 在大多数现代硬件上,GPU驻留模式(默认)比强制卸载模式更快, 尽管它可能会使CPU空闲。 将绑定工作移回CPU( -保税的 中央处理器 )是一个 使用快速CPU的更好方法,而不是在CPU上留下集成和约束。 唯一的例外可能是为每个GPU分配了大量仿真的多仿真。 在大多数情况下,直接GPU通信将优于分段通信(使用线程-MPI和MPI)。 理想情况下,它应该与GPU驻留模式相结合,以实现最大效益。 唯一能确定哪种选择最适合 你的机器是用来测试和检查性能的。
减少GPU加速运行的开销 #
运行mdrun的OpenCL版本 #
基于GCN和基于CDNA的AMD GPU; Volta之前的NVIDIA GPU; Intel iGPU。
OpenCL支持的已知限制 #
支持Intel集成GPU。 不支持Intel CPU和Xeon Phi。 设置 -DGMX_GPU_NB_CLUSTER_SIZE=4 编译GROMACS以在使用者上运行时 Intel GPU(与Ponte Vecchio/数据中心Max GPU相对)。 由于一些异步任务排队函数的阻塞行为 在NVIDIA OpenCL运行时中,受影响的驱动程序版本有 使用NVIDIA GPU时几乎没有性能提升。 该问题会影响NVIDIA驱动程序版本(349系列之前),但它 已知已修复352和更高版本的驱动程序。 在NVIDIA GPU上,OpenCL内核的性能要低得多 由于NVIDIA OpenCL的限制,与等效的CUDA内核相比 编译器。 在NVIDIA Volta和Turing架构上,OpenCL代码可以生成 驱动程序版本高达440.x时的错误结果(很可能是由于编译器问题)。 这些体系结构上的运行通常会失败。
正在运行mdrun的SYCL版本 #
使用oneAPI运行时时: SYCL_CACHE_PERSISTENT=1 :启用GPU内核缓存,减少 gmx mdrun 启动时间。
性能检查表 #
GROMACS配置 #
除非你确信自己需要,否则不要使用双精度。 使用x86上的正确标志(大多数情况下)编译FFTW库 在这种情况下,将自动配置正确的标志)。 在x86上,使用gcc作为编译器(而不是icc、pgi或Cray编译器)。 在POWER上,使用gcc而不是IBM的xlc。 使用新的编译器版本,特别是对于gcc(例如从版本5到版本6 编译后的代码的性能提高了很多)。 MPI库:OpenMPI通常具有良好的性能,并且几乎不会造成麻烦。 确保编译器支持OpenMP(Clang的某些版本不支持)。 如果您有支持CUDA、OpenCL或SYCL的GPU,请使用它们。
运行安装程序 #
对于近似球形的溶质,使用菱形十二面体单元。 当使用<=2.5 fs的时间步长时,使用 约束=氢键 (而不是 约束=所有债券 ),自: 这速度更快,尤其是使用GPU时; 必须能够使用GPU驻留模式; 大多数力场都是参数化的,只包含约束氢的键。
通过重新分配氢,通常可以将时间步长增加到4 fs 质量使用 质量分割系数 mdp选项。 这不是 影响平衡分布,但使动力学稍慢。 使用虚拟交互时,可以将时间步长增加到4或5 fs 站点( 通用管理系统 pdb2gmx -辉橄榄岩 小时 ). 对于与PME大规模并行运行,您可能需要尝试不同的数字 PME排名( gmx公司 mdrun软件 -核动力装置 ??? )实现最佳绩效; gmx音乐文件 可以帮助自动化此搜索。 对于大规模并行运行(也 gmx公司 mdrun软件 -多对 ),或者用慢速 网络,全球沟通可能成为瓶颈,你可以减少它 通过为算法(如温度和 压力联轴器)。
检查和改进性能 #
看一下 md.log文件 文件查看性能和周期 MD计算不同部分的计数器和墙锁时间。 这个 PP/PME负载比也会打印出来,当大量性能 由于不平衡而丢失。 在以下情况下调整PME等级和/或截止线和PME网格间距 PP/PME存在很大的不平衡。 请注意,即使有少量报告 不平衡,自动PME调整可能已经减少了初始不平衡。 您仍然可以通过更改mdp参数或增加 PME排名的数量。 (特别是)GPU驻留运行( -更新 全球采购单位 ): 频繁的维里或能量计算可能会有很大的开销(这不会显示在循环计数器中)。 要减少此开销,请增加 非标准计算能量 ; 频繁的温度或压力耦合可能会产生大量开销; 为了减少这种情况,请确保在算法允许的范围内尽可能少地进行耦合(通常>=50-100步)。
如果邻居搜索和/或域分解需要大量时间,请增加 非甾体抗炎药列表 如果是Verlet 使用缓冲区容差,这由自动完成 gmx mdrun 增加对列表缓冲区以保持能量漂移恒定。 特别是在多GPU运行时 非甾体抗炎药列表 在 mdrun软件 启动可以是保守的,较大的值通常是最优的 (例如。 nstlist=200-300 带有PME和默认Verlet缓冲区容差)。 使用CUDA图时应避免nstlist的奇数值 以最小化与图实例化相关的开销。
如果 通信。 能量 花费大量时间(日志中会打印注释 文件),增加 nstcalcenergy公司 。 如果所有的沟通都需要很多时间,那么你可能会占用太多时间 或者您可以尝试使用2运行MPI/OpenMP并行化组合 或每个MPI进程4个OpenMP线程。 在多GPU运行中,避免使用与内核(或硬件线程)相同数量的列组,因为 由于与多个MPI列组共享GPU相关的开销,这导致了一个主要的低效率。 每个GPU最多使用几个等级,1-3级通常是最佳的; 使用GPU驻留模式和直接GPU通信,通常1列/GPU是最好的。