xref: /libCEED/backends/cuda/ceed-cuda-common.c (revision df9b1082f3fea590280bb79ace83362d3424df46)
1 // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors.
2 // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3 //
4 // SPDX-License-Identifier: BSD-2-Clause
5 //
6 // This file is part of CEED:  http://github.com/ceed
7 
8 #include <string.h>
9 #include "ceed-cuda-common.h"
10 
11 //------------------------------------------------------------------------------
12 // Device information backend init
13 //------------------------------------------------------------------------------
14 int CeedCudaInit(Ceed ceed, const char *resource) {
15   int ierr;
16   const char *device_spec = strstr(resource, ":device_id=");
17   const int device_id = (device_spec) ? atoi(device_spec + 11) : -1;
18 
19   int current_device_id;
20   ierr = cudaGetDevice(&current_device_id); CeedChk_Cu(ceed, ierr);
21   if (device_id >= 0 && current_device_id != device_id) {
22     ierr = cudaSetDevice(device_id); CeedChk_Cu(ceed, ierr);
23     current_device_id = device_id;
24   }
25   Ceed_Cuda *data;
26   ierr = CeedGetData(ceed, &data); CeedChkBackend(ierr);
27   data->device_id = current_device_id;
28   ierr = cudaGetDeviceProperties(&data->device_prop, current_device_id);
29   CeedChk_Cu(ceed, ierr);
30   return CEED_ERROR_SUCCESS;
31 }
32 
33 //------------------------------------------------------------------------------
34 // Backend destroy
35 //------------------------------------------------------------------------------
36 int CeedDestroy_Cuda(Ceed ceed) {
37   int ierr;
38   Ceed_Cuda *data;
39   ierr = CeedGetData(ceed, &data); CeedChkBackend(ierr);
40   if (data->cublas_handle) {
41     ierr = cublasDestroy(data->cublas_handle); CeedChk_Cublas(ceed, ierr);
42   }
43   ierr = CeedFree(&data); CeedChkBackend(ierr);
44   return CEED_ERROR_SUCCESS;
45 }
46 
47 //------------------------------------------------------------------------------
48