Tinker9

The Tinker molecular modeling software is a complete and general package for molecular mechanics and dynamics, with some special features for biopolymers. Tinker has the ability to use any of several common parameter sets, such as Amber (ff94, ff96, ff98, ff99, ff99SB), CHARMM (19, 22, 22/CMAP), Allinger MM (MM2-1991 and MM3-2000), OPLS (OPLS-UA, OPLS-AA), Merck Molecular Force Field (MMFF), Liam Dang’s polarizable model, AMOEBA (2004, 2009, 2013, 2017, 2018) polarizable atomic multipole force fields, AMOEBA+ that adds charge penetration effects, and our new HIPPO (Hydrogen-like Interatomic Polarizable POtential) force field. Parameter sets for other force field models are under consideration for future releases.

Tinker9 is a complete rewrite and extension of the canonical Tinker software, currently Tinker8. Tinker9 is implemented as C++ code with OpenACC directives and CUDA kernels providing excellent performance on GPUs. At present, Tinker9 builds against the object library from Tinker8, and provides GPU versions of the Tinker ANALYZE, BAR, DYNAMIC, MINIMIZE and TESTGRAD programs. Existing Tinker file formats and force field parameter files are fully compatible with Tinker9, and nearly all Tinker8 keywords function identically in Tinker9. Over time we plan to port much or all of the remaining portions of Fortran Tinker8 to the C++ Tinker9 code base.

These instructions describe how tinker9 was compiled on Thorny Flat with GPU support for the particular GPU cards present on this cluster.

Clone the repository

Tinker9 sources are on Github and uses submodules. This command will download the latest version and the submodules:

$> git clone --recurse-submodules https://github.com/TinkerTools/tinker9.git

Create a build folder

It is a best practice to use a separate build folder to compile the code. The sources remain untouched and it is easy to just remove the content of the folder and recompile:

$> cd tinker9
$> mkdir build
$> cd build

Modules for compilation

Tinker9 uses cmake for building the software. The version of cmake on RHEL 7.x is usually too old so it is a good idea to load a more recent version. RHEL 7.x comes with cmake version 2.8.12.2 and the CMakeLists request the minimal version being 3.12.

Tinker9 is implemented as C++ and takes advantage of GPUs via OpenACC directives and CUDA programming. The natural compiler for a code that uses OpenACC is NVIDIA HPC suite as OpenACC is better implemented. For the CUDA side the latest version of the CUDA Toolkit at the time of writing this (April 2022) is CUDA 11.5. These are the modules loaded for compiling tinker9:

$> module load dev/cmake/3.21.1 dev/git/2.29.1 lang/nvidia/nvhpc/21.11 parallel/cuda/11.5

Configuring tinker9

Configuring a code with cmake will prepare the sources, and create the Makefiles for building the binaries using the compilers and libraries declared with the arguments presented to cmake. The cmake line used was this:

$> cmake -DCUDA_DIR=${CUDA_HOME} -DCOMPUTE_CAPABILITY=61,75,80 \
-DCMAKE_Fortran_COMPILER=gfortran -DCMAKE_BUILD_TYPE=release \
-DCMAKE_INSTALL_PREFIX=/shared/software/atomistic/tinker9 \
-DCMAKE_CUDA_COMPILER=`which nvcc` -Wno-dev ..

The CUDA compute capabilities can be found on CUDA Website For the particular case of Thorny Flat, we have 3 kinds of GPUs: P6000, RTX6000, and A100. The compute capabilities for these cards are:

GPU Model

Compute Capability

Quadro P6000

61

Quadro RTX 6000

75

NVIDIA A100

80

After configuring the code execute make with a reasonable number of compilation threads. On the head node of Thorny Flat we have 24 cores, using 12 compilation threads is reasonable and the code will compile relatively fast:

$> make -j12

Running the tests

To run the tests lauch and interactive job on a queue allowing GPUs:

$> qsub -I -l nodes=1:ppn=16:gpus=2 -q be_gpu

Go to the build folder and check the GPU present on the node:

$> cd /shared/src/tinker9/build
$> nvidia-smi
Fri Apr  1 12:35:39 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 495.29.05    Driver Version: 495.29.05    CUDA Version: 11.5     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Quadro RTX 6000     Off  | 00000000:C1:00.0 Off |                    0 |
| N/A   25C    P8    14W / 250W |      0MiB / 22698MiB |      0%   E. Process |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  Quadro RTX 6000     Off  | 00000000:C2:00.0 Off |                    0 |
| N/A   25C    P8    15W / 250W |      0MiB / 22698MiB |      0%   E. Process |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Load the modules:

$> module load dev/cmake/3.21.1 dev/git/2.29.1 lang/nvidia/nvhpc/21.11 parallel/cuda/11.5

Execute the test suite:

    $> make test
    [ 69%] Built target tinkerObjF
    [ 69%] Built target tinkerObjCpp
    [ 69%] Built target tinkerFToCpp
    [ 83%] Built target tinker9_cpp
    [ 88%] Built target __t9_all_tests_o
    [ 89%] Built target tinker9_f
    [ 89%] Built target tinker9_version
    [ 97%] Built target tinker9_acc
    [100%] Built target tinker9_cu
    [100%] Built target all.tests
    Filters: info
     Primary GPU package :  CUDA

     GPU Device :  Setting Device ID to 0 from GPU utilization


     Program Information

            Version:                             1.0.0 GIT 1e34a417
            Synchronized with Tinker commit:     5aa9948d
            C++ compiler:                        nvc++ 21.11.0
            Size of real (bytes):                4
            Size of mixed (bytes):               8
            Using deterministic force:           true
            Debug mode:                          off
            Platform:                            CUDA and OpenACC
            Primary GPU package:                 CUDA
            Latest CUDA supported by driver:     11.5
            CUDA runtime version:                11.5
            Thrust version:                      1.13.1 patch 0
            CUDA compiler:                       nvcc 11.5.119
            OpenACC compiler:                    nvc++ 21.11.0
            GPU detected:                        2
            GPU 0:
               PCI:                              0000:C1:00.0
               Name:                             Quadro RTX 6000
               Maximum compute capability:       7.5
               Single double perf. ratio:        32
               Compute mode:                     exclusive process
               Error-correcting code (ECC):      on
               Clock rate (kHz):                 1620000
               Number of Multiprocessors:        72
               Number of CUDA cores:             9216
               Used/Total GPU memory:            0.79 % / 22.17 GB
            GPU 1:
               PCI:                              0000:C2:00.0
               Name:                             Quadro RTX 6000
               Maximum compute capability:       7.5
               Single double perf. ratio:        32
               Compute mode:                     exclusive process
               Error-correcting code (ECC):      on
               Clock rate (kHz):                 1620000
               Number of Multiprocessors:        72
               Number of CUDA cores:             9216
               Used/Total GPU memory:            0.79 % / 22.17 GB
    ===============================================================================
    test cases: 1 | 1 passed
    assertions: - none -

    Filters: [ff],[util]

.....######################################################################
...##########################################################################
..###                                                                      ###
.###            Tinker9  --  Software Tools for Molecular Design            ###
.##                                                                          ##
.##                      Version 1.0.0-rc  January 2021                      ##
.##                                                                          ##
.##                 Copyright (c)  Zhi Wang & the Ponder Lab                 ##
.###                           All Rights Reserved                          ###
..###                                                                      ###
...##########################################################################
.....######################################################################

     Compiled at:  12:18:38  Apr  1 2022
     Commit Date:  Fri Apr 1 04:23:24 2022 -0500
     Commit:       1e34a417

     Primary GPU package :  CUDA

     GPU Device :  Setting Device ID to 0 from GPU utilization

    ...
    ...
    ...

    ===============================================================================
    All tests passed (65640 assertions in 58 test cases)

    [100%] Built target test