layout

title

categories

tags

math

post

GROMACS中文手册:附录A 技术细节

gmx

true

toc

{:toc}

A.1 混合精度或双精度

可以使用混合精度或双精度编译GROMACS. 老版本GROMACS的文档将混合精度称为“单精度”, 但选择性地使用双精度已实现很多年了. 对所有变量都使用单精度将导致精度显著降低. 尽管在“混合精度”中, 所有的状态向量, 即粒子坐标, 速度和力, 都是单精度的, 但关键变量仍是双精度的. 后者的一个典型例子是维里, 它是对体系中所有力的加和, 正负可变. 另外, 在代码的许多地方, 通过改变求和顺序或重新组合数学表达式, 我们设法避免对双精度进行算术运算. 默认配置使用混合精度, 但通过为cmake添加选项-DGMX_DOUBLE=on, 可以很容易地启用双精度. 双精度比混合精度慢20%到100%, 具体数字取决于运行机器的架构. 双精度会使用更多的内存和运行输入, 而且能量和全精度轨迹文件的大小几乎是混合模式的两倍.

混合精度的能量精确到最后一位小数, 力的最后一位或两位数字并不重要. 维里的精度比力的要差, 因为维里只比所有原子加和中的各个元素大一个数量级(参见B.1节). 对大多数情况, 这真的不是一个问题, 因为维里的涨落可以比其平均值大两个数量级. 对库仑相互作用使用截断会导致能量, 力和维里出现大的误差. 即便使用反应场或晶格加和方法, 误差也大于或近于因局部使用单精度导致的误差. 由于MD具有混沌性, 具有非常相似起始条件的轨迹也将迅速发散, 混合精度的发散速度高于双精度.

对大多数模拟, 混合精度足够精确. 在某些情况下, 需要使用双精度以获得合理的结果:

简正分析, 其中的共轭梯度或l-bfgs最小化, 计算和对角化力常数矩阵

长时间的能量守恒, 特别是对于大的体系

A.2 环境变量

可以使用环境变量影响GROMACS程序的运行. 首先, 在GMXRC文件中设置的变量对运行和编译GROMACS至关重要. 以下各节列出了其他一些有用的环境变量. 通过在你的shell中设置非空值, 大多数环境变量可以起作用. 如果需要设置其他的值, 参考下面的具体要求. 你应该查看自己所用shell的文档以了解如何为当前shell设置环境变量, 或者如何为以后的shell设置配置文件. 注意, 将环境变量输出到批处理控制系统作业中的要求各不相同, 你应该查看本地文档的详情说明.

输出控制

GMX_CONSTRAINTVIR: 打印能量项中的约束维里和力维里.

GMX_MAXBACKUP: 当尝试写到具有相同名称的新文件时, GROMACS自动备份以前文件的副本. 此变量控制备份的最大数量, 默认为99. 当设置为0时, 若输出文件已存在, 则无法运行. 当设置为–1时, 会覆盖所有输出文件, 不进行备份.

GMX_NO_QUOTES: 如果明确设置了此变量, 不会在程序结束后打印有趣的引用.

GMX_SUPPRESS_DUMP: 禁用每步的文件转储, 当(例如)约束算法失效引起体系崩溃时.

GMX_TPI_DUMP: 将相互作用能小于此环境变量设定值的全部构型转储到一个.pdb文件.

GMX_VIEW_XPM: GMX_VIEW_XVG, GMX_VIEW_EPS和MX_VIEW_PDB, 分别用于自动查看.xvg, .xpm, .eps和.pdb文件类型的命令, 默认为xv, xmgrace, ghostview和rasmol. 设置为空则禁用自动查看特定的文件类型. 命令将被分叉运行于后台, 运行时具有的优先级与GROMACS工具相同(这可能不是你想要的). 注意不要使用阻断终端的命令(例如vi), 因为可能会运行多个实例.

GMX_VIRIAL_TEMPERATURE: 打印能量项中的维里温度

GMX_LOG_BUFFER: 用于文件I/O的缓冲区大小. 如果设置为0, 所有文件I/O都不使用缓冲, 因此非常慢. 此变量可以方便调试, 因为它能保证所有文件始终是最新的.

GMX_LOGO_COLOR: 设置ngmx标志的显示颜色.

GMX_PRINT_LONGFORMAT: 当打印十进制数值时使用长浮点格式.

GMX_COMPELDUMP: 仅用于计算电生理学设置(参见6.6节). 初始结构转储到.pdb文件, 这样可以检查多聚体通道的PBC表示是否正确.

调试

GMX_PRINT_DEBUG_LINES: 设置后, 打印调试的行号信息.

GMX_DD_NST_DUMP: 转储当前DD到PDB文件的间隔步数(默认为0). 仅对区域分解有效, 因此典型的值为0(从不), 1(每DD相)或nstlist的倍数.

GMX_DD_NST_DUMP_GRID: 转储当前DD格点到PDB文件的间隔步数(默认为0). 仅对区域分解有效, 因此典型的值为0(从不), 1(每DD相)或nstlist的倍数.

GMX_DD_DEBUG: 每个区域分解的通用调试触发器(默认为0, 意味着禁用). 目前只检查全局-局部原子索引映射的一致性.

GMX_DD_NPULSE: 覆盖所用的DD脉冲数(默认0, 意味着不覆盖). 通常为1或2.

性能和运行控制

GMX_DO_GALACTIC_DYNAMICS: 设置此环境变量可启用行星模拟(只是为了好玩), 允许在.mdp文件中设置epsilon_r = -1. 正常情况下, epsilon_r必须大于零, 以防止出现致命错误. 参见www.gromacs.org上行星模拟的输入文件的例子.

GMX_ALLOW_CPT_MISMATCH: 设置后, 如果在.tpr文件中的系综设置与.cpt文件中的不匹配, 运行也不会退出.

GMX_CUDA_NB_EWALD_TWINCUT: 强制使用双程截断内核, 即使PP-PME负载均衡后rvdw=rcoulomb. 会自动切换到双程截断内核, 所以此变量只能用于校准.

GMX_CUDA_NB_ANA_EWALD: 强制使用解析的Ewald内核. 只能用于校准.

GMX_CUDA_NB_TAB_EWALD: 强制使用表格的Ewald内核. 只能用于校准.

GMX_CUDA_STREAMSYNC: 在启用ECC功能的GPU上强制使用cudaStreamSynchronize, 由于在API v5.0 NVIDIA驱动程序(30x.xx以前版本)中存在一个已知的CUDA驱动程序缺陷, 会导致性能下降. 不能与GMX_NO_CUDA_STREAMSYNC同时设置.

GMX_CYCLE_ALL: 运行时对所有的代码进行计时. 不兼容线程.

GMX_CYCLE_BARRIER: 在每个循环启动/停止调用前调用MPI_Barrier.

GMX_DD_ORDER_ZYX: 设置构造区域分解格胞的顺序为(z, y, x), 而不是默认的(x, y, z).

GMX_DD_USE_SENDRECV2: 在约束和vsite通信时, 使用一对MPI_SendRecv调用代替两个同步的非阻塞调用(默认为0, 意味着不使用). 对一些MPI实现可能会更快.

GMX_DLB_BASED_ON_FLOPS: 基于flop计数进行区域域分解的动态负载均衡, 而不是基于测量到的流逝时间(默认为0, 意味着禁用). 这使得负载均衡可重复, 对调试很有帮助. 值为1时使用flop; 对>1的值将添加(值–1)*5%的噪声到flop, 以增加不均衡性和标度.

GMX_DLB_MAX_BOX_SCALING: 每区域分解负载平衡步中所允许的盒子缩放的最大百分比(默认为10)

GMX_DD_RECORD_LOAD: 运行结束时记录DD负载统计报告(默认为1, 意味着启用)

GMX_DD_NST_SORT_CHARGE_GROUPS: 重新排序电荷组的间隔步数(默认为1). 只在区域分解中起作用, 所以典型值应为0(从不), 1(每次区域分解), 或nstlist的倍数.

GMX_DETAILED_PERF_STATS: 设置后, 会打印更详细的性能信息到.log文件. 输出结果的方式类似于4.5.x版本的性能总结, 因而可能对那些使用脚本解析.log文件或标准输出的人有用.

GMX_DISABLE_SIMD_KERNELS: 禁用特定架构SIMD优化(SSE2, SSE4.1, AVX等)的非键内核, 因而强制使用普通的C内核.

GMX_DISABLE_CUDA_TIMING: 当时间步长较短时, 对异步执行的GPU运算进行计时会有不可忽略的开销. 在这种情况下禁用计时能够提高性能.

GMX_DISABLE_GPU_DETECTION: 设置后, 禁用GPU检测, 即使mdrun支持GPU.

GMX_DISABLE_PINHT: 当采用英特尔超线程时, 禁止将连续线程分配到物理内核. 由mdrun -nopinht控制, 因而此环境变量可能会被移除.

GMX_DISRE_ENSEMBLE_SIZE: 距离约束系综平均的体系数目. 整数值.

GMX_EMULATE_GPU: 不使用GPU加速函数, 而是使用算法等价的CPU引用代码模拟GPU运行. 因为CPU代码较慢, 设置此变量仅用于调试. 如果使用GMX_NO_NONBONDED关闭非键计算, 会自动触发, 将不会调用非键计算, 但也会跳过CPU-GPU转移.

GMX_ENX_NO_FATAL: 当在.edr文件中遇到损坏的帧时禁止退出, 允许使用直到损坏的所有帧.

GMX_FORCE_UPDATE: 调用mdrun -rerun时更新力.

GMX_GPU_ID: 与mdrun选项-gpu_id的设置方式相同, GMX_GPU_ID环境变量允许用户指定不同GPU的ID, 用于选择集群中不同计算节点上不同的设备. 不能与-gpu_id一起使用.

GMX_IGNORE_FSYNC_FAILURE_ENV: 允许mdrun继续运行, 即使文件丢失.

GMX_LJCOMB_TOL: 当设置为浮点值时, 覆盖力场浮点参数的默认容差1e–5.

GMX_MAX_MPI_THREADS: 设置mdrun可以使用的最大MPI线程数.

GMX_MAXCONSTRWARN: 当设置为–1时, 即便产生了很多LINCS警告, mdrun也不会退出.

GMX_NB_GENERIC: 使用通用的C内核. 如果使用基于组的截断并将GMX_NO_SOLV_OPT设为true, 就应该设置此变量, 从而禁用溶剂优化.

GMX_NB_MIN_CI: 在GPU上运行时使用的邻居列表平衡参数. 对小的模拟体系, 为了改进多处理器的负载平衡从而提高性能, 设置目标配对列表的最小数目. 必须设置为正整数. 默认值是针对NVIDIA的Fermi和Kepler类型GPU进行优化的, 所以正常使用时无须改变, 但对于未来的架构可能有用.

GMX_NBLISTCG: 使用基于电荷组的邻居列表和内核.

GMX_NBNXN_CYCLE: 设置后, 打印详细的邻居搜索循环计数.

GMX_NBNXN_EWALD_ANALYTICAL: 强制使用解析Ewald的非键内核, 与GMX_NBNXN_EWALD_TABLE互斥.

GMX_NBNXN_EWALD_TABLE: 强制使用表格Ewald的非键内核, 与GMX_NBNXN_EWALD_ANALYTICAL互斥.

GMX_NBNXN_SIMD_2XNN: 强制使用 2x(N+N) SIMD CPU非键内核, 与GMX_NBNXN_SIMD_4XN互斥.

GMX_NBNXN_SIMD_4XN: 强制使用 4xN SIMD CPU非键内核, 与GMX_NBNXN_SIMD_2XNN互斥.

GMX_NO_ALLVSALL: 禁用优化的 all-vs-all 内核.

GMX_NO_CART_REORDER: 用于初始化区域分解通信器. 默认等级重排序, 但可利用此环境变量关闭.

GMX_NO_CUDA_STREAMSYNC: 与GMX_CUDA_STREAMSYNC相反. 当开启ECC功能的GPU使用V5.0以前版本的CUDA驱动程序API时, 禁用基于标准cudaStreamSynchronize的GPU等待以提高性能.

GMX_NO_INT, GMX_NO_TERM, GMX_NO_USR1: 分布禁用对SIGINT, SIGTERM, SIGUSR1信号进行处理.

GMX_NO_NODECOMM: 不使用独立的节点间和节点内的通讯器.

GMX_NO_NONBONDED: 跳过非键计算; 可用于估计增加GPU加速器到当前硬件设置带来的可能的性能增益-假定完成非键计算的速度足够快, 同时CPU进行键合力和PME计算.

GMX_NO_PULLVIR: 设置后, 不将维里的贡献添加到COM牵引力.

GMX_NOCHARGEGROUPS: 禁用多原子电荷组, 即, 分配所有非溶剂分子中的每个原子到其自己的电荷组.

GMX_NOPREDICT: 不预测壳层位置.

​​GMX_NO_SOLV_OPT: 关闭溶剂优化; 如果启用了GMX_NB_GENERIC会自动进行.

GMX_NSCELL_NCG: 每个邻区搜索格胞的理想电荷组数被硬编码为10. 将此环境变量的值设置为任何其它的整数会覆盖硬编码的值.

GMX_PME_NTHREADS: 设置OpenMP或PME的线程数(覆盖mdrun的猜测值).

GMX_PME_P3M: 使用P3M优化的影响函数, 而不是平滑的PME B样条内插.

GMX_PME_THREAD_DIVISION: 在三个维度上以“X Y Z”格式对PME线程进行划分. 每一维度上线程的总和必须等于PME线程的总数(在GMX_PME_NTHREADS之间设置).

GMX_PMEONEDD: 如果x和y方向上区域分解格胞的数目都为1, 对PME进行一维分解.

GMX_REQUIRE_SHELL_INIT: 需要初始化壳层位置.

GMX_REQUIRE_TABLES: 需要使用表格库仑和van der Waals相互作用.

GMX_SCSIGMA_MIN: 用于软核 \(\s\) 的最小值. 注意, 此值在.mdp文件中使用sc-sigma关键词进行设置, 而此环境变量可用于重现4.5前的版本对此参数的行为.

GMX_TPIC_MASSES: 应包含用于测试粒子插入空腔时的多个质量. 最后一个原子的质量中心用于插入空腔.

GMX_USE_GRAPH: 对键相互作用使用图形.

GMX_VERLET_BUFFER_RES: Verlet截断方案中缓冲区大小的分辨率. 默认值为0.001, 但可以被此环境变量覆盖.

GMX_VERLET_SCHEME: 从基于组的方案转换为Verlet截断方案, 即使.mdp文件中并没有将cutoff_scheme设置为Verlet. 此变量没有必要存在, 因为mdrun的-testverlet选项具有同样的功能, 保留它只是为了向后兼容.

MPIRUN: g_tune_pme使用的mpirun命令.

MDRUN: g_tune_pme使用的mdrun命令.

GMX_NSTLIST: 设置nstlist的默认值, 防止在使用Verlet截断方案启动mdrun时改变.

GMX_USE_TREEREDUCE: 对nbnxn力约化使用树约化. 在OpenMP线程数很多时可能更快(如果内存位置很重要).

分析和核心函数

GMX_QM_ACCURACY: Gaussian程序L510(MC-SCF)模块的精度.

GMX_QM_ORCA_BASENAME: .tpr文件的前缀, 用于Orca计算的输入和输出文件名​​.

GMX_QM_CPMCSCF: 当设置为非零值时, Gaussian时QM计算将迭代求解CP-MCSCF方程.

GMX_QM_MODIFIED_LINKS_DIR: 修改的Gaussian链接的位置.

DSSP: 为do_dssp所用, 指向dssp可执行程序(不只是其路径).

GMX_QM_GAUSS_DIR: Gaussian的安装路径.

GMX_QM_GAUSS_EXE: Gaussian可执行程序的名称.

GMX_DIPOLE_SPACING: g_dipoles所用的间距.

GMX_MAXRESRENUM: 设置grompp重新编号的残基的最大数目. –1表示重新编号所有残基.

GMX_FFRTP_TER_RENAME: 有些力场(例如AMBER), 对N端和C端残基使用特定的名称(NXXX和CXXX), 像那些正常重命名的.rtp项一样. 设置此环境变量禁用此类重命名.

GMX_PATH_GZIP: gunzip可执行程序的路径, 为g_wham所用.

GMX_FONT: ngmx使用的X11字体的名称.

GMXTIMEUNIT: 输出文件中使用的时间单位, 可以为fs, ps, ns, us, ms, s, m或h.

GMX_QM_GAUSSIAN_MEMORY: Gaussian QM计算使用的内存.

MULTIPROT: multiprot可执行程序的名称, 为程序do_multiprot所用.

NCPUS: Gaussian QM计算使用的CPU数

GMX_ORCA_PATH: Orca的安装目录.

GMX_QM_SA_STEP: Gaussian QM计算的模拟退火步长.

GMX_QM_GROUND_STATE: 定义Gaussian表面跳跃计算的态.

GMX_TOTAL: total可执行程序的名称, 为do_shift程序所用.

GMX_ENER_VERBOSE: 让g_energy和eneconv输出更多信息.

VMD_PLUGIN_PATH: VMD插件的安装路径. 需要能够读取VMD插件认可的文件格式.

VMDDIR: 安装VMD的基准路径.

GMX_USE_XMGR: 将查看器设置为xmgr(不推荐)以代替xmgrace.

A.3 并行运行GROMACS

默认情况下, 将使用内置的线程MPI库编译GROMACS. 在处理单节点上线程之间的通信时, 使用此函数库比使用外部MPI库更高效. 要在多个节点, 例如一个集群上并行运行GROMACS, 你需要使用外部MPI库配置编译GROMACS. 所有的超级计算机都带有为其特定平台优化的MPI库, 也有几个好的免费MPI实现; OpenMPI通常是一个不错的选择. 注意, MPI和线程MPI支持彼此不兼容.

除​​MPI并行外, GROMACS还支持通过OpenMP的线程并行. MPI和OpenMP并行可以结合起来使用, 也就是所谓的杂合并行化. 在某些情况下, 杂合并行可提供更好的性能和标度.

请参看www.gromacs.org上关于不同并行方案使用和性能的详细信息.

A.4 使用GPU运行GROMACS

自4.6版本开始, GROMACS原生支持基于CUDA的GPU. 注意, GROMACS只将计算最密集的部分, 目前也就是非键相互作用, 分配到GPU上运行, MD计算的所有其他部分都是在CPU上进行的. 对CUDA代码的要求是, Nvidia计算能力≥2.0的GPU, 即至少为Fermi类. 在许多情况下, cmake可自动检测GPU并自动配置GPU支持. 请传递-DGMX_GPU=on选项给cmake, 并确认已配置GPU支持, . GPU的实际使用与否在mdrun运行时决定, 取决于是否有(合适的)GPU可用和运行输入设置. 支持GPU的可执行程序也可以只使用CPU进行模拟, 通过使用mdrun -nb cpu强制仅使用CPU来运行模拟. 只有使用Verlet截断方案的模拟才能在GPU上运行. 为测试以前的tpr文件在GPU上运行的性能, 可以使用mdrun的-testverlet选项, 但因为没有进行grommp的完整参数一致性检查, 你不应该使用此选项进行最终模拟. 在GPU上获得GROMACS的良好性能很容易, 但得到最佳性能很困难. 请查看www.gromacs.org上关于GPU使用的最新信息.

gromacs ngmx_Jerkwin.github.io相关推荐

  1. 回归——同步更新github.io

    回归 已经有好长时间没写博客了,可能我比较懒,不太乐于分享,我觉得这个是一个很不好的习惯.但我坚信:Sharing changes the world! 最近搭建了自己的个人独立博客,基于Github ...

  2. 新的博客 bincoding.github.io

    最近周围的人都在用静态博客,随主流也换了github page搭建hexo. bincoding.github.io 个人网站,用来上线乱七八糟的东西: bincoding.cn

  3. ztree 标准得json数据格式_酷站推荐 - json-c.github.io/json-c - json-c API

    json-c.github.io/json-c/ http://json-c.github.io/json-c/ JSON:JavaScript 对象表示法(JavaScript Object Not ...

  4. 【还是回来了】博客搬家--https://cangbean.github.io

    还是弄了个自己的地址:https://cangbean.github.io 想记录下,防止万一以后迁移不好弄 想练习markdown写作 折腾而已 以后不再博客园记录东西了,但是还是会回来看看的 转载 ...

  5. 采取HEXO+NexT主题+github.io的方式建立自己的个人主页

    采取HEXO+NexT主题+github.io的方式建立自己的个人主页 主要知识点 注册github帐号,建立io仓库. 本地配置HEXO博客. 克隆NexT主题到本地仓库 建立本地博客与github ...

  6. 最新博客地址转移https://bravoing.github.io/

    最新博客地址转移:https://bravoing.github.io/ 欢迎大家收藏

  7. 复活→移步:https://beiyuouo.github.io/

    Update 2018/11/17 移步→https://beiyuouo.github.io/ 复活了解一下? 虽然我啥都不会了 ------- Update 2019/5/2 如果我做一些题的话还 ...

  8. 解决打不开 xxx.github.io的万能解决方法

    解决打不开 xxx.github.io的万能解决方法 网上的方法都是采用修改 hosts文件的方法,将网站的地址添加到host文件中,这样做不能解决所有github的pages打不开的问题,所以我选择 ...

  9. github.io网页无法打开(连接不是私密连接)

    github还是好好的,但是github.io访问不了 这是因为DNS服务器的问题,可以下载个DNS jumper 就可以解决了

  10. 解决github.io 连接不安全,无法访问

    https://*.github.io   显示连接不安全,并且 无法访问. 修改网络DNS 为114.114.114.114

最新文章

  1. 腾讯机器人实验室首曝光 攻坚“通用人工智能”
  2. hadoop map reduce自定义数据类型时注意顺序,否则报错。
  3. 显卡测试软件3d mark,显卡评测工具3DMark跑分结果变了:可以直接PK同等配置
  4. python六十: __doc__属性
  5. Spring Security——认证失败时获取认证信息(用户名、密码、IP、SESSIONID)
  6. [bzoj3625][Codeforces 250 E]The Child and Binary Tree(生成函数+多项式运算+FFT)
  7. java 切换后台程序_将 Android 程序切换到后台及从后台切换到前台实现
  8. 苹果6怎样打开html,苹果iPhone的Safari浏览器使用技巧图解
  9. python文件传输socket_树莓派采用socket方式文件传输(python)
  10. C语言程序设计期末卷子,C语言程序设计试题1
  11. 为.net开发者提供的一份关于存储过程的评论(转载)
  12. Struts2快速入门,超简单详细的快速入门教程
  13. 贷款软件测试经典bug描述,如何描述bug
  14. 宁芝普拉姆键盘说明书及帮助文档支持宏定义
  15. 从入门到冠军 中国移动人群画像赛TOP1经验学习研究
  16. 会议panel是什么意思中文_topanel中文是什么意思
  17. 网络爬虫的基本结构是什么?如何建立网络爬虫抓取数据?
  18. docker数据卷容器卷_如何删除Docker映像,容器和卷
  19. 不用计算机怎么算根号二,根号怎么打 根号2或3等于多少?
  20. win10 t480耳机没有声音处理方法

热门文章

  1. SaaS产品移动化,你想好这3点了吗
  2. mysql的insert_MySQL中INSERT的一般用法
  3. 2021CCPC东北四省赛 解题报告
  4. shel中的if-else语句
  5. 360极速模式版本,出现已经取消网页导航现象,怎么解决呢?
  6. 手机短信校验(前端js)
  7. STM32个人笔记--GPIO框图
  8. 串口调试工具--SecureCRT的使用
  9. 我的世界java1.15.2光影_我的世界Java版带光影
  10. linux中tmp文件在哪,学习LINUX入门,/tmp文件夹