ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
base_device::DeviceContext Class Reference

Singleton class to manage GPU device context and initialization. More...

#include <device.h>

Collaboration diagram for base_device::DeviceContext:

Public Member Functions

void init ()
 Initialize GPU device binding.
 
int get_device_id () const
 Get the bound GPU device ID.
 
int get_device_count () const
 Get the total number of GPU devices on this node.
 
int get_local_rank () const
 Get the local MPI rank within the node.
 
 DeviceContext (const DeviceContext &)=delete
 
DeviceContextoperator= (const DeviceContext &)=delete
 

Static Public Member Functions

static DeviceContextinstance ()
 Get the singleton instance of DeviceContext.
 

Private Member Functions

 DeviceContext ()=default
 
 ~DeviceContext ()=default
 

Private Attributes

bool initialized_ = false
 
bool gpu_enabled_ = false
 
int device_id_ = -1
 
int device_count_ = 0
 
int local_rank_ = 0
 
std::mutex init_mutex_
 

Detailed Description

Singleton class to manage GPU device context and initialization.

This class provides a centralized way to:

  1. Initialize GPU device binding (only once)
  2. Query GPU device state (device_id, device_count, etc.)
  3. Ensure thread-safe initialization

Usage: // Initialize (call once after MPI init and after determining device=gpu) DeviceContext::instance().init(MPI_COMM_WORLD);

// Query device info int dev_id = DeviceContext::instance().get_device_id();

Constructor & Destructor Documentation

◆ DeviceContext() [1/2]

base_device::DeviceContext::DeviceContext ( const DeviceContext )
delete

◆ DeviceContext() [2/2]

base_device::DeviceContext::DeviceContext ( )
privatedefault

◆ ~DeviceContext()

base_device::DeviceContext::~DeviceContext ( )
privatedefault

Member Function Documentation

◆ get_device_count()

int base_device::DeviceContext::get_device_count ( ) const
inline

Get the total number of GPU devices on this node.

Returns
Number of GPU devices, or 0 if not initialized

◆ get_device_id()

int base_device::DeviceContext::get_device_id ( ) const
inline

Get the bound GPU device ID.

Returns
Device ID (0-based), or -1 if not initialized
Here is the caller graph for this function:

◆ get_local_rank()

int base_device::DeviceContext::get_local_rank ( ) const
inline

Get the local MPI rank within the node.

Returns
Local rank, or 0 if not initialized

◆ init()

void base_device::DeviceContext::init ( )

Initialize GPU device binding.

This function:

  1. Gets the local rank within the node using MPI_COMM_TYPE_SHARED (MPI_COMM_WORLD)
  2. Queries the number of available GPU devices
  3. Binds the current process to a GPU device (local_rank % device_count)
Note
This function should only be called once. Subsequent calls are no-ops.
This function should only be called when device=gpu is confirmed.
In MPI builds, uses MPI_COMM_WORLD internally.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ instance()

DeviceContext & base_device::DeviceContext::instance ( )
static

Get the singleton instance of DeviceContext.

Returns
Reference to the singleton instance
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

DeviceContext & base_device::DeviceContext::operator= ( const DeviceContext )
delete

Member Data Documentation

◆ device_count_

int base_device::DeviceContext::device_count_ = 0
private

◆ device_id_

int base_device::DeviceContext::device_id_ = -1
private

◆ gpu_enabled_

bool base_device::DeviceContext::gpu_enabled_ = false
private

◆ init_mutex_

std::mutex base_device::DeviceContext::init_mutex_
private

◆ initialized_

bool base_device::DeviceContext::initialized_ = false
private

◆ local_rank_

int base_device::DeviceContext::local_rank_ = 0
private

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