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 GlobalGPUMgr * Object ()
 
static GlobalGPUMgr * ObjectOnPe (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:196

◆ ~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 CollectiveDeviceBuffer< T >::allocate_no_check(), and 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

◆ 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 CollectiveDeviceBuffer< T >::allocate_no_check(), and 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:646
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

◆ 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: