GPU-Omega

GPU-Omega refers to the CUDA-enabled GPU implementation of Omega TK. GPU-Omega takes advantage of a GPU during torsion driving for accelerated conformer generation. To make use of GPU-Omega conformer generation please follow the guidelines below.

The following is required in order to use GPU-accelerated OpenEye toolkits and applications:

Supported Platforms

CUDA-enabled OpenEye software is only available on supported Linux platforms. For supported Linux platforms see above and/or the Platform Support Page

Supported GPUs

An NVIDIA Tesla, Quadro, or GeForce GPU with a compute capability of 3.5 or higher is required on your system. For a comprehensive table of which GPUs fall into which compute capability category please refer to the CUDA wikipedia page.

NVIDIA Drivers

  • Minimum NVIDIA Driver version: 450.x.
  • CUDA is not required to be installed.

We recommend driver 450.80.02 and we strongly advise manually downloading and installing the appropriate NVidia driver for your system as opposed to using a package manager.

To install, root privilege is required. Follow these steps:

  1. Download the driver to the machine you are installing it on.

  2. chmod +x the driver package to make it executable.

  3. Ensure you have disabled X-server by killing any running sessions. Reboot may be required if X-server is still running after this step.

    Warning

    Disabling X-server requires different processes to be killed depending on your Linux distribution. See Nvidia installation guide for more details.

    Warning

    The NVidia kernel module can often conflict with the open source Nouveau display drivers depending on your specific Linux distribution. The NVidia documentation is a much more complete and up-to-date source for information on how to work around this issue. See Disabling Nouveau on the NVIDIA website.

  4. Install the driver by sudo ./NVIDIA-Linux-x86_64-450.80.02.run and follow the step-by-step installation instructions.

For more details on driver installations see the CUDA Installation Guide

Note

The output of the nvidia-smi command is extremely useful when debugging GPU issues. Please include the output from nvidia-smi in any request to support@eyesopen.com.

Performance Tuning

To get the most performance out of an NVIDIA Graphics card, use the persistence daemon to switch persistence mode on across all cards on the system (root privilege required):

sudo nvidia-persistenced --user foo

This will automatically enable persistence mode after reboot.

For full instructions on persistence daemon see the Persistence daemon section of the NVIDIA docs.

Usage

  • GPU-Omega accelerates the torsion driving component of conformer generation in Omega TK and is available through the OEOmega and OETorDriver classes.

  • For all torsion driving sampling modes except dense modes, if a GPU is detected at runtime, torsion driving will be carried out on the GPU by default. To turn this feature off use OETorDriveOptions.SetUseGPU.

    The following code shows how to turn off GPU-omega prior to conformer generation using sparse mode:

    Example of turning off GPU-Omega

    OEOmegaOptions omegaOptsSparse = new OEOmegaOptions();
    omegaOptsSparse.GetTorDriveOptions().SetUseGPU(false);
    OEOmega omega = new OEOmega(omegaOptsSparse);
    omega.call(mol);
    
  • GPU-Omega uses the default OEMMFFSheffieldFFType.MMFF94Smod_NOESTAT forcefield. If attempting to use an alternative forcefield conformer generation will fall back to the CPU. As a result of this, GPU-Omega is not compatible with default settings of OEOmegaSampling.Dense sampling mode. To take advantage of a GPU with dense sampling mode set OETorDriveOptions.SetForceField to OEMMFFSheffieldFFType.MMFF94Smod_NOESTAT.

  • The OEOmegaIsGPUReady utility function is provided for detecting available GPUs on a system.

    The following code demonstrates how to query the system for an available GPU and then set the force field to default in order to use the GPU for dense mode conformer generation:

    Example of detecting a GPU and changing the force field for dense mode conformer generation

    OEOmegaOptions omegaOptsDense = new OEOmegaOptions(OEOmegaSampling.Dense);
    if (oeomegalib.OEOmegaIsGPUReady())
      omegaOptsDense.GetTorDriveOptions().SetForceField(OEOmegaForceFieldType.MMFF94Smod_NOESTAT);
    OEOmega omegaDense = new OEOmega(omegaOptsDense);
    omegaDense.call(mol);
    
  • GPU-Omega does not support the distance geometry method of torsion driving and therefore is incompatible with OEMacrocycleOmega.

Warning

To use GPU-Omega with child processes a new OEOmega object must be created per child. If attempting to use the same instance of an OEOmega object in child processes, conformer generation will fall back to the CPU.