NAMD
Public Member Functions | Static Public Member Functions | List of all members
GlobalGPUMgr Class Reference

#include <GlobalGPUMgr.h>

Inheritance diagram for GlobalGPUMgr:

Public Member Functions

 GlobalGPUMgr ()
 
 ~GlobalGPUMgr ()
 
void initialize ()
 
void initializeBackends ()
 
void finalize ()
 
void printDeviceMaps ()
 
int getNumDevices ()
 
int getDeviceIndex ()
 
int getIsMasterPe ()
 
int getMasterPeForDeviceIndex (int device)
 
const std::vector< int > & getDeviceIndexToPeMap () const
 
bool getIsMasterDevice ()
 
bool getIsPmeDevice ()
 

Static Public Member Functions

static GlobalGPUMgrObject ()
 
static GlobalGPUMgrObjectOnPe (const int pe)
 

Detailed Description

Definition at line 58 of file GlobalGPUMgr.h.

Constructor & Destructor Documentation

◆ GlobalGPUMgr()

GlobalGPUMgr::GlobalGPUMgr ( void  )

Definition at line 47 of file GlobalGPUMgr.C.

References NAMD_bug().

48 {
49  if (CkpvAccess(GlobalGPUMgr_instance) == NULL) {
50  CkpvAccess(GlobalGPUMgr_instance) = this;
51  } else {
52  NAMD_bug("GlobalGPUMgr instanced twice on same processor!");
53  }
54 }
void NAMD_bug(const char *err_msg)
Definition: common.C:195

◆ ~GlobalGPUMgr()

GlobalGPUMgr::~GlobalGPUMgr ( void  )

Definition at line 56 of file GlobalGPUMgr.C.

56 { }

Member Function Documentation

◆ finalize()

void GlobalGPUMgr::finalize ( )

Definition at line 97 of file GlobalGPUMgr.C.

97  {
98 }

◆ getDeviceIndex()

int GlobalGPUMgr::getDeviceIndex ( )
inline

Definition at line 101 of file GlobalGPUMgr.h.

Referenced by initializeGPUResident().

101 { return deviceIndex; }

◆ getDeviceIndexToPeMap()

const std::vector<int>& GlobalGPUMgr::getDeviceIndexToPeMap ( ) const
inline

Definition at line 116 of file GlobalGPUMgr.h.

Referenced by initializeGPUResident().

116 { return deviceIndexToPeMap; }

◆ getIsMasterDevice()

bool GlobalGPUMgr::getIsMasterDevice ( )
inline

Definition at line 124 of file GlobalGPUMgr.h.

Referenced by initializeGPUResident().

124 { return isMasterDevice && isMasterPe; }

◆ getIsMasterPe()

int GlobalGPUMgr::getIsMasterPe ( )
inline

Definition at line 106 of file GlobalGPUMgr.h.

Referenced by initializeGPUResident().

106 { return isMasterPe; }

◆ getIsPmeDevice()

bool GlobalGPUMgr::getIsPmeDevice ( )

Definition at line 100 of file GlobalGPUMgr.C.

References deviceCUDA, and DeviceCUDA::getPmeDeviceIndex().

100  {
101  return deviceCUDA->getPmeDeviceIndex() == deviceIndex;
102 }
__thread DeviceCUDA * deviceCUDA
Definition: DeviceCUDA.C:23
int getPmeDeviceIndex()
Definition: DeviceCUDA.h:167

◆ getMasterPeForDeviceIndex()

int GlobalGPUMgr::getMasterPeForDeviceIndex ( int  device)
inline

Definition at line 111 of file GlobalGPUMgr.h.

111 { return deviceIndexToPeMap[device]; }

◆ getNumDevices()

int GlobalGPUMgr::getNumDevices ( )
inline

Definition at line 96 of file GlobalGPUMgr.h.

Referenced by initializeGPUResident().

96 { return numDevices; }

◆ initialize()

void GlobalGPUMgr::initialize ( void  )

Definition at line 58 of file GlobalGPUMgr.C.

References all, SynchronousCollectives::allGather(), deviceCUDA, SynchronousCollectives::forceBarrierAll(), DeviceCUDA::getDeviceID(), DeviceCUDA::getIsMasterDevice(), DeviceCUDA::getMasterPe(), and SynchronousCollectives::Object().

Referenced by initializeGPUResident().

58  {
60 
61  isMasterPe = (CkMyPe() == deviceCUDA->getMasterPe());
62  isMasterDevice = deviceCUDA->getIsMasterDevice();
63 
64  peToDeviceIDMap.resize(CkNumPes(), -1);
65  peToDeviceIndexMap.resize(CkNumPes(), -1);
66  syncColl->forceBarrierAll(); //Make sure maps are resized
67 
68  const int myDeviceId = (isMasterPe) ? deviceCUDA->getDeviceID() : -1;
69  peToDeviceIDMap = syncColl->allGather<int>(myDeviceId, SynchronousCollectiveScope::all);
70 
71  // Count number of devices first
72  numDevices = 0;
73  for (int i = 0; i < CkNumPes(); i++) {
74  if (peToDeviceIDMap[i] != -1) {
75  numDevices++;
76  }
77  }
78 
79  deviceIndexToPeMap.resize(numDevices, 0);
80 
81  // Setup maps
82  int current_device = 0;
83  for (int i = 0; i < CkNumPes(); i++) {
84  if (peToDeviceIDMap[i] != -1) {
85  deviceIndexToPeMap[current_device] = i;
86  peToDeviceIndexMap[i] = current_device;
87  current_device++;
88  }
89  }
90 
91  deviceIndex = peToDeviceIndexMap[CkMyPe()];
92 }
std::vector< T > allGather(const T &data, const SynchronousCollectiveScope scope)
__thread DeviceCUDA * deviceCUDA
Definition: DeviceCUDA.C:23
int getMasterPe()
Definition: DeviceCUDA.h:137
int getDeviceID()
Definition: DeviceCUDA.h:144
bool getIsMasterDevice()
Definition: DeviceCUDA.C:642
static SynchronousCollectives * Object()

◆ initializeBackends()

void GlobalGPUMgr::initializeBackends ( )

Definition at line 94 of file GlobalGPUMgr.C.

Referenced by initializeGPUResident().

94  {
95 }

◆ Object()

static GlobalGPUMgr* GlobalGPUMgr::Object ( )
inlinestatic

Definition at line 61 of file GlobalGPUMgr.h.

Referenced by initializeGPUResident(), and Sequencer::Sequencer().

61 { return CkpvAccess(GlobalGPUMgr_instance); }

◆ ObjectOnPe()

static GlobalGPUMgr* GlobalGPUMgr::ObjectOnPe ( const int  pe)
inlinestatic

Definition at line 62 of file GlobalGPUMgr.h.

62  {
63  return CkpvAccessOther(GlobalGPUMgr_instance, CmiRankOf(pe));
64  }

◆ printDeviceMaps()

void GlobalGPUMgr::printDeviceMaps ( )

The documentation for this class was generated from the following files: