16 static CuSolverContext instance;
20 CuSolverContext::CuSolverContext() {
22 CUDAScopedDevice scoped_device(device);
23 cusolverDnHandle_t handle;
24 if (cusolverDnCreate(&handle) != CUSOLVER_STATUS_SUCCESS) {
28 map_device_to_handle_[device] = handle;
32 CuSolverContext::~CuSolverContext() {
34 for (
auto& item : map_device_to_handle_) {
35 if (cusolverDnDestroy(item.second) != CUSOLVER_STATUS_SUCCESS) {
37 "Unable to destroy cuSolver handle for device {}.",
38 item.first.ToString());
43 cusolverDnHandle_t& CuSolverContext::GetHandle(
const Device& device) {
47 if (map_device_to_handle_.count(device) == 0) {
51 return map_device_to_handle_.at(device);
55 static CuBLASContext instance;
59 CuBLASContext::CuBLASContext() {
61 CUDAScopedDevice scoped_device(device);
62 cublasHandle_t handle;
63 if (cublasCreate(&handle) != CUBLAS_STATUS_SUCCESS) {
67 map_device_to_handle_[device] = handle;
71 CuBLASContext::~CuBLASContext() {
73 for (
auto& item : map_device_to_handle_) {
74 if (cublasDestroy(item.second) != CUBLAS_STATUS_SUCCESS) {
76 item.first.ToString());
81 cublasHandle_t& CuBLASContext::GetHandle(
const Device& device) {
85 if (map_device_to_handle_.count(device) == 0) {
89 return map_device_to_handle_.at(device);
static std::vector< Device > GetAvailableCUDADevices()
Returns a vector of available CUDA device.
ccGuiPythonInstance * GetInstance() noexcept
Generic file read and write utility for python interface.