xref: /libCEED/rust/libceed-sys/c-src/backends/magma/ceed-magma-common.c (revision 00fb7a044a7fd1c8bfdb0605078b0c7ba7a4ad58)
1*00fb7a04SSebastian Grimberg // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors.
2*00fb7a04SSebastian Grimberg // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3*00fb7a04SSebastian Grimberg //
4*00fb7a04SSebastian Grimberg // SPDX-License-Identifier: BSD-2-Clause
5*00fb7a04SSebastian Grimberg //
6*00fb7a04SSebastian Grimberg // This file is part of CEED:  http://github.com/ceed
7*00fb7a04SSebastian Grimberg 
8*00fb7a04SSebastian Grimberg #include "ceed-magma-common.h"
9*00fb7a04SSebastian Grimberg 
10*00fb7a04SSebastian Grimberg #include <ceed.h>
11*00fb7a04SSebastian Grimberg #include <ceed/backend.h>
12*00fb7a04SSebastian Grimberg #include <stdlib.h>
13*00fb7a04SSebastian Grimberg #include <string.h>
14*00fb7a04SSebastian Grimberg 
15*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
16*00fb7a04SSebastian Grimberg // Device information backend init
17*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
18*00fb7a04SSebastian Grimberg int CeedInit_Magma_common(Ceed ceed, const char *resource) {
19*00fb7a04SSebastian Grimberg   const char *device_spec = strstr(resource, ":device_id=");
20*00fb7a04SSebastian Grimberg   const int   device_id   = (device_spec) ? atoi(device_spec + 11) : -1;
21*00fb7a04SSebastian Grimberg 
22*00fb7a04SSebastian Grimberg   CeedCallBackend(magma_init());
23*00fb7a04SSebastian Grimberg 
24*00fb7a04SSebastian Grimberg   int current_device_id;
25*00fb7a04SSebastian Grimberg   magma_getdevice(&current_device_id);
26*00fb7a04SSebastian Grimberg   if (device_id >= 0 && current_device_id != device_id) {
27*00fb7a04SSebastian Grimberg     magma_setdevice(device_id);
28*00fb7a04SSebastian Grimberg     current_device_id = device_id;
29*00fb7a04SSebastian Grimberg   }
30*00fb7a04SSebastian Grimberg   Ceed_Magma *data;
31*00fb7a04SSebastian Grimberg   CeedCallBackend(CeedGetData(ceed, &data));
32*00fb7a04SSebastian Grimberg   data->device_id = current_device_id;
33*00fb7a04SSebastian Grimberg #ifdef CEED_MAGMA_USE_HIP
34*00fb7a04SSebastian Grimberg   magma_queue_create_from_hip(data->device_id, NULL, NULL, NULL, &(data->queue));
35*00fb7a04SSebastian Grimberg #else
36*00fb7a04SSebastian Grimberg   magma_queue_create_from_cuda(data->device_id, NULL, NULL, NULL, &(data->queue));
37*00fb7a04SSebastian Grimberg #endif
38*00fb7a04SSebastian Grimberg   return CEED_ERROR_SUCCESS;
39*00fb7a04SSebastian Grimberg }
40*00fb7a04SSebastian Grimberg 
41*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
42*00fb7a04SSebastian Grimberg // Backend destroy
43*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
44*00fb7a04SSebastian Grimberg int CeedDestroy_Magma(Ceed ceed) {
45*00fb7a04SSebastian Grimberg   Ceed_Magma *data;
46*00fb7a04SSebastian Grimberg   CeedCallBackend(CeedGetData(ceed, &data));
47*00fb7a04SSebastian Grimberg   magma_queue_destroy(data->queue);
48*00fb7a04SSebastian Grimberg   CeedCallBackend(CeedFree(&data));
49*00fb7a04SSebastian Grimberg   return CEED_ERROR_SUCCESS;
50*00fb7a04SSebastian Grimberg }
51*00fb7a04SSebastian Grimberg 
52*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
53