6. GPUによる高速化

6.1. 概要

このページでは、GPU計算についての説明を行います。
TSUBAME3では計算ノードの各ノードにNvidia tesla P100が4基内蔵されており、ユーザはGPUによる高速化の恩恵を受けることができます。
近年、GPU計算に対応するアプリケーションも増えており、Amberもその一つです。
PMEMDの新機能としてNVIDIA製GPUを用いたNVE、NVT、NPTカノニカルアンサンブルでの溶媒分子を露わに扱うPMEシミュレーションおよび連続誘電体モデルであるGeneralized Bornシミュレーションの高速化が挙げられます。 また、マルチGPUでの計算にも対応しています。

なお、この章にある情報はほとんどが次のURLからの引用、和訳となっています。 より詳しく調べたい方は ambermd.orgのページをご参照ください。

http://ambermd.org/GPUSupport.php

GPUによる高速化は恩恵が大きいですが、歴史は浅いためユーザは注意深くなる必要があるとambermd.org では述べられています。もし、問題に遭遇したら同等のシミュレーションをCPUで実施して、シミュレーション設定の問題かどうかの切り分けを行うようにしてください。

6.2. pmemd.cudaとpmemdとの違い

6.2.1. 機能の違い

NVE、NVT、NPTカノニカルアンサンブルでのExplicit solvent(陽溶媒)PMEシミュレーションおよびImplicit solvent(暗溶媒)Generalized Bornシミュレーションは、標準のGPUを使用しないpmemdとほぼ同等になるようにデザインされています。
しかしいくつかの制約があり、制約内容は概要で示したambermd.orgのページをご参照ください。 また、念のためCPUで短いシミュレーションを実行して Ewald error estimateを確認し、妥当な数値となっているかどうか確認することをおすすめします。

6.2.2. 出力の違い

出力ファイルのフォーマットにいくつかの差異がありますGPU計算に対応したpmemd.cudaで実行した際、pmemdとの実行結果の主な違いは次の4点です。

  • GPU の著作情報が現れること
  • GPUのdevice 情報が出力されること
  • Conditional Compilation Defines UsedとしてCUDAが含まれていること
  • Ewald error estimateの出力がなされないこと

なお、5章で計算した同一の入力ファイルを用いてGPU, CPUそれぞれで計算した結果をsdiffコマンドで差分をとって確認すると次のようになります。左がGPU,右がCPUとなります。

 Amber 16 PMEMD                              2016                                Amber 16 PMEMD                              2016
          ---------------------------------------------------                            ---------------------------------------------------
| PMEMD implementation of SANDER, Release 16                                                         | PMEMD implementation of SANDER, Release 16
| Run on 09/04/2017 at 12:41:23                                                                                      |                           | Run on 09/04/2017 at 13:37:44
|   Executable path: pmemd.cuda.MPI                                                                           |                           |   Executable path: pmemd.MPI
| Working directory: /home/7/A2901692/amber/dna_wat3                     |               | Working directory: /home/7/A2901692/amber/dna_wat2
|          Hostname: r2i5n7                                                                                          |                           |          Hostname: r5i4n3
  [-O]verwriting output                                                                                                                                                             [-O]verwriting output
File Assignments:                                                                                                                                                                      File Assignments:
|   MDIN: dna_water_md.in                                                            |   MDIN: dna_water_md.in                                   
|  MDOUT: dna_water_md.out                                                        |  MDOUT: dna_water_md.out                                  
| INPCRD: dna_water_md_fixd.rst                                                         | INPCRD: dna_water_md_fixd.rst                             
|   PARM: prmtop                                                                |   PARM: prmtop                                            
| RESTRT: dna_water_md.rst                                                          | RESTRT: dna_water_md.rst                                   
|   REFC: refc                                                                    |   REFC: refc                                              
|  MDVEL: mdvel                                                                 |  MDVEL: mdvel                                              
|   MDEN: mden                                                                 |   MDEN: mden                                              
|  MDCRD: dna_water_md.mdcrd                                                     |  MDCRD: dna_water_md.mdcrd                                 
| MDINFO: mdinfo                                                                  | MDINFO: mdinfo                                            
|LOGFILE: logfile                                                                    |LOGFILE: logfile                                           
|  MDFRC: mdfrc                                                                 |  MDFRC: mdfrc                                              
 Here is the input file:                                                                                                       Here is the input file:
略
Note: ig = -1. Setting random seed to   234768 based on wallc |    Note: ig = -1. Setting random seed to   938027 based on wallc
      microseconds and disabling the synchronization of rando           microseconds and disabling the synchronization of rando
      between tasks to improve performance.                                                                    between tasks to improve performance.
|--------------------- INFORMATION ----------------------     <
| GPU (CUDA) Version of PMEMD in use: NVIDIA GPU IN USE.      <
|                    Version 16.0.0                                                                                 <
|                      02/25/2016                                                                                 <
| Implementation by:                                                                                                                <
|                    Ross C. Walker     (SDSC)                                                          <
|                    Scott Le Grand     (nVIDIA)                            <
| Precision model in use:                                                                                                         <
|      [SPFP] - Single Precision Forces, 64-bit Fixed Point   <
|               Accumulation. (Default)                                                                            <
|--------------------------------------------------------     <
|----------------- CITATION INFORMATION -----------------     <
|    When publishing work that utilized the CUDA version      <
|    of AMBER, please cite the following in addition to                           <
|    the regular AMBER citations:                                                                                        <
|  - Romelia Salomon-Ferrer; Andreas W. Goetz; Duncan                      <
|    Poole; Scott Le Grand; Ross C. Walker "Routine                             <
|    microsecond molecular dynamics simulations with                         <
|    AMBER - Part II: Particle Mesh Ewald", J. Chem.                           <
|    Theory Comput., 2013, 9 (9), pp3878-3888,                                      <
|    DOI: 10.1021/ct400314y.                                                                                               <
|  - Andreas W. Goetz; Mark J. Williamson; Dong Xu;                              <
|    Duncan Poole; Scott Le Grand; Ross C. Walker                               <
|    "Routine microsecond molecular dynamics simulations      <
|    with AMBER - Part I: Generalized Born", J. Chem.                         <
|    Theory Comput., 2012, 8 (5), pp1542-1555.                                      <
|  - Scott Le Grand; Andreas W. Goetz; Ross C. Walker                         <
|    "SPFP: Speed without compromise - a mixed precision      <
|    model for GPU accelerated molecular dynamics                              <
|    simulations.", Comp. Phys. Comm., 2013, 184                                 <
|    pp374-380, DOI: 10.1016/j.cpc.2012.09.022                                     <
|--------------------------------------------------------     <
                                                                                                                                                                                                         <
|------------------- GPU DEVICE INFO --------------------     <
|                         Task ID:      0                                       <
|            CUDA_VISIBLE_DEVICES: not set                                     <
|   CUDA Capable Devices Detected:      4                                         <
|           CUDA Device ID in use:      0                                          <
|                CUDA Device Name: Tesla P100-SXM2-16GB        <
|     CUDA Device Global Mem Size:  16276 MB                                                              <
| CUDA Device Num Multiprocessors:     56                                          <
|           CUDA Device Core Freq:   1.48 GHz                                                             <
|                         Task ID:      1                                       <
|            CUDA_VISIBLE_DEVICES: not set                                     <
|   CUDA Capable Devices Detected:      4                                         <
|           CUDA Device ID in use:      1                                          <
|                CUDA Device Name: Tesla P100-SXM2-16GB        <
|     CUDA Device Global Mem Size:  16276 MB                                                              <
| CUDA Device Num Multiprocessors:     56                                          <
|           CUDA Device Core Freq:   1.48 GHz                                                             <
|                         Task ID:      2                                       <
|            CUDA_VISIBLE_DEVICES: not set                                     <
|   CUDA Capable Devices Detected:      4                                         <
|           CUDA Device ID in use:      2                                          <
|                CUDA Device Name: Tesla P100-SXM2-16GB        <
|     CUDA Device Global Mem Size:  16276 MB                                                              <
| CUDA Device Num Multiprocessors:     56                                          <
|           CUDA Device Core Freq:   1.48 GHz                                                             <
|                         Task ID:      3                                       <
|            CUDA_VISIBLE_DEVICES: not set                                     <
|   CUDA Capable Devices Detected:      4                                         <
|           CUDA Device ID in use:      3                                          <
|                CUDA Device Name: Tesla P100-SXM2-16GB        <
|     CUDA Device Global Mem Size:  16276 MB                                                              <
| CUDA Device Num Multiprocessors:     56                                          <
|           CUDA Device Core Freq:   1.48 GHz                                                             <
|                         Task ID:      4                                       <
|            CUDA_VISIBLE_DEVICES: not set                                     <
|   CUDA Capable Devices Detected:      4                                         <
|           CUDA Device ID in use:      0                                          <
|                CUDA Device Name: Tesla P100-SXM2-16GB        <
|     CUDA Device Global Mem Size:  16276 MB                                                              <
| CUDA Device Num Multiprocessors:     56                                          <
|           CUDA Device Core Freq:   1.48 GHz                                                             <
|                         Task ID:      5                                       <
|            CUDA_VISIBLE_DEVICES: not set                                     <
|   CUDA Capable Devices Detected:      4                                         <
|           CUDA Device ID in use:      1                                          <
|                CUDA Device Name: Tesla P100-SXM2-16GB        <
|     CUDA Device Global Mem Size:  16276 MB                                                              <
| CUDA Device Num Multiprocessors:     56                                          <
|           CUDA Device Core Freq:   1.48 GHz                                                             <
|                         Task ID:      6                                       <
|            CUDA_VISIBLE_DEVICES: not set                                     <
|   CUDA Capable Devices Detected:      4                                         <
|           CUDA Device ID in use:      2                                          <
|                CUDA Device Name: Tesla P100-SXM2-16GB        <
|     CUDA Device Global Mem Size:  16276 MB                                                              <
| CUDA Device Num Multiprocessors:     56                                          <
|           CUDA Device Core Freq:   1.48 GHz                                                             <
|                                                                                                                                                                                                         <
|                                                                                                                                                                                                         <
|                         Task ID:      7                                       <
|            CUDA_VISIBLE_DEVICES: not set                                     <
|   CUDA Capable Devices Detected:      4                                         <
|           CUDA Device ID in use:      3                                          <
|                CUDA Device Name: Tesla P100-SXM2-16GB        <
|     CUDA Device Global Mem Size:  16276 MB                                                              <
| CUDA Device Num Multiprocessors:     56                                          <
|           CUDA Device Core Freq:   1.48 GHz                                                             <
|                                                                                                                                                                                                         <
|--------------------------------------------------------     <
|---------------- GPU PEER TO PEER INFO -----------------     <
||   Peer to Peer support: ENABLED                                                        <
|--------------------------------------------------------     <
略
|  Final Performance Info:                                                                                                                             |  Final Performance Info:
|     -----------------------------------------------------                       |     -----------------------------------------------------
|     Average timings for last   15900 steps:                                       |               |     Average timings for last   23900 steps:
|     Elapsed(s) =      27.98 Per Step(ms) =       1.76                   |               |     Elapsed(s) =      55.95 Per Step(ms) =       2.34
|         ns/day =      98.18   seconds/ns =     879.98             |               |         ns/day =      73.82   seconds/ns =    1170.49
|                                                                                                                                                                                                                               |
|     Average timings for all steps:                                                                                                            |     Average timings for all steps:
|     Elapsed(s) =      87.83 Per Step(ms) =       1.76                   |               |     Elapsed(s) =     116.06 Per Step(ms) =       2.32
|         ns/day =      98.37   seconds/ns =     878.34             |               |         ns/day =      74.44   seconds/ns =    1160.64
|     -----------------------------------------------------                       |     -----------------------------------------------------

|  Master Setup CPU time:            3.32 seconds                          |               |  Master Setup CPU time:            0.16 seconds
|  Master NonSetup CPU time:        87.67 seconds                          |               |  Master NonSetup CPU time:       115.83 seconds
|  Master Total CPU time:           90.99 seconds     0.03 ho |                         |  Master Total CPU time:          115.99 seconds     0.03 ho
|
|  Master Setup wall time:          21    seconds                           |               |  Master Setup wall time:           1    seconds
|  Master NonSetup wall time:       88    seconds                           |               |  Master NonSetup wall time:      116    seconds
|  Master Total wall time:         109    seconds     0.03 ho |                          |  Master Total wall time:         117    seconds     0.03 ho