CMS 3D CMS Logo

ProcessAcceleratorROCm.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
3 import os
4 
5 from HeterogeneousCore.Common.PlatformStatus import PlatformStatus
6 
7 class ProcessAcceleratorROCm(cms.ProcessAccelerator):
8  def __init__(self):
9  super(ProcessAcceleratorROCm, self).__init__()
10  self._label = "gpu-amd"
11 
12  def labels(self):
13  return [ self._label ]
14 
15  def enabledLabels(self):
16  # Check if ROCm is available, and if the system has at least one usable device.
17  # These should be checked on each worker node, because it depends both
18  # on the architecture and on the actual hardware present in the machine.
19  status = PlatformStatus(os.waitstatus_to_exitcode(os.system("rocmIsEnabled")))
20  return self.labels() if status == PlatformStatus.Success else []
21 
22  def apply(self, process, accelerators):
23 
24  if self._label in accelerators:
25  # Ensure that the ROCmService is loaded
26  if not hasattr(process, "ROCmService"):
27  from HeterogeneousCore.ROCmServices.ROCmService_cfi import ROCmService
28  process.add_(ROCmService)
29 
30  # Propagate the ROCmService messages through the MessageLogger
31  if not hasattr(process.MessageLogger, "ROCmService"):
32  process.MessageLogger.ROCmService = cms.untracked.PSet()
33 
34  else:
35  # Make sure the ROCmService is not loaded
36  if hasattr(process, "ROCmService"):
37  del process.ROCmService
38 
39  # Drop the ROCmService messages from the MessageLogger
40  if hasattr(process.MessageLogger, "ROCmService"):
41  del process.MessageLogger.ROCmService
42 
43 
44 # Ensure this module is kept in the configuration when dumping it
45 cms.specialImportRegistry.registerSpecialImportForType(ProcessAcceleratorROCm, "from HeterogeneousCore.ROCmCore.ProcessAcceleratorROCm import ProcessAcceleratorROCm")