Unverified Commit ac32ce76 authored by bdenhollander's avatar bdenhollander Committed by GitHub
Browse files

Benchmark enhancements (#4695)

* Benchmark enhancements

- Add `--disable-pme-stream` to benchmark.py to easily compare performance without having to build with different default values for `DisablePmeSteam`
- Replace utcnow to remove DeprecationWarning
- Check for nvidia-smi before attempting to launch it
- Mention HIP where appropriate

* Adjust option
parent 9335b8e2
...@@ -2,7 +2,7 @@ from __future__ import print_function ...@@ -2,7 +2,7 @@ from __future__ import print_function
import openmm.app as app import openmm.app as app
import openmm as mm import openmm as mm
import openmm.unit as unit import openmm.unit as unit
from datetime import datetime from datetime import datetime, timezone
import argparse import argparse
import os import os
...@@ -352,6 +352,8 @@ def runOneTest(testName, options): ...@@ -352,6 +352,8 @@ def runOneTest(testName, options):
properties['DeviceIndex'] = options.device properties['DeviceIndex'] = options.device
if ',' in options.device or ' ' in options.device: if ',' in options.device or ' ' in options.device:
initialSteps = 250 initialSteps = 250
if options.disable_pme_stream:
properties['DisablePmeStream'] = 'true'
if options.opencl_platform is not None and 'OpenCLPlatformIndex' in platform.getPropertyNames(): if options.opencl_platform is not None and 'OpenCLPlatformIndex' in platform.getPropertyNames():
properties['OpenCLPlatformIndex'] = options.opencl_platform properties['OpenCLPlatformIndex'] = options.opencl_platform
if (options.precision is not None) and ('Precision' in platform.getPropertyNames()): if (options.precision is not None) and ('Precision' in platform.getPropertyNames()):
...@@ -478,9 +480,10 @@ parser.add_argument('--seconds', default=60, dest='seconds', type=float, help='t ...@@ -478,9 +480,10 @@ parser.add_argument('--seconds', default=60, dest='seconds', type=float, help='t
parser.add_argument('--polarization', default='mutual', dest='polarization', choices=POLARIZATION_MODES, help=f'the polarization method for AMOEBA: {POLARIZATION_MODES} [default: mutual]') parser.add_argument('--polarization', default='mutual', dest='polarization', choices=POLARIZATION_MODES, help=f'the polarization method for AMOEBA: {POLARIZATION_MODES} [default: mutual]')
parser.add_argument('--mutual-epsilon', default=1e-5, dest='epsilon', type=float, help='mutual induced epsilon for AMOEBA [default: 1e-5]') parser.add_argument('--mutual-epsilon', default=1e-5, dest='epsilon', type=float, help='mutual induced epsilon for AMOEBA [default: 1e-5]')
parser.add_argument('--bond-constraints', default='hbonds', dest='bond_constraints', help=f'hbonds: constrain bonds to hydrogen, use 1.5*amu H mass; allbonds: constrain all bonds, use 4*amu H mass, and use larger timestep. This option is ignored for AMOEBA: {BOND_CONSTRAINTS} [default: hbonds]') parser.add_argument('--bond-constraints', default='hbonds', dest='bond_constraints', help=f'hbonds: constrain bonds to hydrogen, use 1.5*amu H mass; allbonds: constrain all bonds, use 4*amu H mass, and use larger timestep. This option is ignored for AMOEBA: {BOND_CONSTRAINTS} [default: hbonds]')
parser.add_argument('--device', default=None, dest='device', help='device index for CUDA or OpenCL') parser.add_argument('--disable-pme-stream', default=False, action='store_true', dest='disable_pme_stream', help='disable use of a separate GPU stream for PME')
parser.add_argument('--device', default=None, dest='device', help='device index for CUDA, HIP, or OpenCL')
parser.add_argument('--opencl-platform', default=None, dest='opencl_platform', help='platform index for OpenCL') parser.add_argument('--opencl-platform', default=None, dest='opencl_platform', help='platform index for OpenCL')
parser.add_argument('--precision', default='single', dest='precision', help=f'precision modes for CUDA or OpenCL: {PRECISIONS} [default: single]') parser.add_argument('--precision', default='single', dest='precision', help=f'precision modes for CUDA, HIP, or OpenCL: {PRECISIONS} [default: single]')
parser.add_argument('--style', default='simple', dest='style', choices=STYLES, help=f'output style: {STYLES} [default: simple]') parser.add_argument('--style', default='simple', dest='style', choices=STYLES, help=f'output style: {STYLES} [default: simple]')
parser.add_argument('--outfile', default=None, dest='outfile', help='output filename for benchmark logging (must end with .yaml or .json)') parser.add_argument('--outfile', default=None, dest='outfile', help='output filename for benchmark logging (must end with .yaml or .json)')
parser.add_argument('--serialize', default=None, dest='serialize', help='if specified, output serialized test systems for Folding@home or other uses') parser.add_argument('--serialize', default=None, dest='serialize', help='if specified, output serialized test systems for Folding@home or other uses')
...@@ -493,7 +496,7 @@ if args.platform is None: ...@@ -493,7 +496,7 @@ if args.platform is None:
system_info = dict() system_info = dict()
import socket, platform import socket, platform
system_info['hostname'] = socket.gethostname() system_info['hostname'] = socket.gethostname()
system_info['timestamp'] = datetime.utcnow().isoformat() system_info['timestamp'] = datetime.now(timezone.utc).isoformat()
system_info['openmm_version'] = mm.version.version system_info['openmm_version'] = mm.version.version
system_info['cpuinfo'] = cpuinfo() system_info['cpuinfo'] = cpuinfo()
system_info['cpuarch'] = platform.processor() system_info['cpuarch'] = platform.processor()
...@@ -502,10 +505,12 @@ system_info['system'] = platform.system() ...@@ -502,10 +505,12 @@ system_info['system'] = platform.system()
# Attempt to get GPU info # Attempt to get GPU info
try: try:
import shutil
import subprocess import subprocess
cmd = 'nvidia-smi --query-gpu=driver_version,gpu_name --format=csv,noheader' if shutil.which('nvidia-smi') is not None:
output = subprocess.check_output(cmd, shell=True, text=True) cmd = 'nvidia-smi --query-gpu=driver_version,gpu_name --format=csv,noheader'
system_info['nvidia_driver'], system_info['gpu'] = output.strip().split(', ') output = subprocess.check_output(cmd, shell=True, text=True)
system_info['nvidia_driver'], system_info['gpu'] = output.strip().split(', ')
except Exception as e: except Exception as e:
pass pass
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment