xref: /libCEED/rust/libceed-sys/c-src/backends/magma/ceed-magma-common.c (revision d4cc18453651bd0f94c1a2e078b2646a92dafdcc)
1*9ba83ac0SJeremy L Thompson // Copyright (c) 2017-2026, Lawrence Livermore National Security, LLC and other CEED contributors.
200fb7a04SSebastian Grimberg // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
300fb7a04SSebastian Grimberg //
400fb7a04SSebastian Grimberg // SPDX-License-Identifier: BSD-2-Clause
500fb7a04SSebastian Grimberg //
600fb7a04SSebastian Grimberg // This file is part of CEED:  http://github.com/ceed
700fb7a04SSebastian Grimberg 
800fb7a04SSebastian Grimberg #include "ceed-magma-common.h"
900fb7a04SSebastian Grimberg 
1000fb7a04SSebastian Grimberg #include <ceed.h>
1100fb7a04SSebastian Grimberg #include <ceed/backend.h>
1200fb7a04SSebastian Grimberg #include <stdlib.h>
1300fb7a04SSebastian Grimberg #include <string.h>
1400fb7a04SSebastian Grimberg 
1500fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
1600fb7a04SSebastian Grimberg // Device information backend init
1700fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
CeedInit_Magma_common(Ceed ceed,const char * resource)1800fb7a04SSebastian Grimberg int CeedInit_Magma_common(Ceed ceed, const char *resource) {
19940a72f1SSebastian Grimberg   Ceed_Magma *data;
2000fb7a04SSebastian Grimberg   const char *device_spec = strstr(resource, ":device_id=");
2100fb7a04SSebastian Grimberg   const int   device_id   = (device_spec) ? atoi(device_spec + 11) : -1;
2238293ee6SJeremy L Thompson   int         current_device_id;
2300fb7a04SSebastian Grimberg 
2400fb7a04SSebastian Grimberg   CeedCallBackend(magma_init());
2500fb7a04SSebastian Grimberg 
2600fb7a04SSebastian Grimberg   magma_getdevice(&current_device_id);
2700fb7a04SSebastian Grimberg   if (device_id >= 0 && current_device_id != device_id) {
2800fb7a04SSebastian Grimberg     magma_setdevice(device_id);
2900fb7a04SSebastian Grimberg     current_device_id = device_id;
3000fb7a04SSebastian Grimberg   }
31940a72f1SSebastian Grimberg 
3200fb7a04SSebastian Grimberg   CeedCallBackend(CeedGetData(ceed, &data));
3300fb7a04SSebastian Grimberg   data->device_id = current_device_id;
3400fb7a04SSebastian Grimberg #ifdef CEED_MAGMA_USE_HIP
3500fb7a04SSebastian Grimberg   magma_queue_create_from_hip(data->device_id, NULL, NULL, NULL, &(data->queue));
3600fb7a04SSebastian Grimberg #else
3700fb7a04SSebastian Grimberg   magma_queue_create_from_cuda(data->device_id, NULL, NULL, NULL, &(data->queue));
3800fb7a04SSebastian Grimberg #endif
3900fb7a04SSebastian Grimberg   return CEED_ERROR_SUCCESS;
4000fb7a04SSebastian Grimberg }
4100fb7a04SSebastian Grimberg 
4200fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
4300fb7a04SSebastian Grimberg // Backend destroy
4400fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
CeedDestroy_Magma(Ceed ceed)4500fb7a04SSebastian Grimberg int CeedDestroy_Magma(Ceed ceed) {
4600fb7a04SSebastian Grimberg   Ceed_Magma *data;
4738293ee6SJeremy L Thompson 
4800fb7a04SSebastian Grimberg   CeedCallBackend(CeedGetData(ceed, &data));
4900fb7a04SSebastian Grimberg   magma_queue_destroy(data->queue);
503e2dab0aSSebastian Grimberg   CeedCallBackend(magma_finalize());
5100fb7a04SSebastian Grimberg   CeedCallBackend(CeedFree(&data));
5200fb7a04SSebastian Grimberg   return CEED_ERROR_SUCCESS;
5300fb7a04SSebastian Grimberg }
5400fb7a04SSebastian Grimberg 
5500fb7a04SSebastian Grimberg //------------------------------------------------------------------------------
56