13d8e8822SJeremy L Thompson // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors. 23d8e8822SJeremy L Thompson // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 382b77998SStan Tomov // 43d8e8822SJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause 582b77998SStan Tomov // 63d8e8822SJeremy L Thompson // This file is part of CEED: http://github.com/ceed 782b77998SStan Tomov 838612b08SStan Tomov #include "ceed-magma.h" 952d6035fSJeremy L Thompson 1049aac155SJeremy L Thompson #include <ceed.h> 112b730f8bSJeremy L Thompson #include <ceed/backend.h> 122b730f8bSJeremy L Thompson #include <stdlib.h> 132b730f8bSJeremy L Thompson #include <string.h> 142b730f8bSJeremy L Thompson 15*00fb7a04SSebastian Grimberg #include "ceed-magma-common.h" 16e0582403Sabdelfattah83 17*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------ 18*00fb7a04SSebastian Grimberg // Backend Init 19*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------ 2082b77998SStan Tomov static int CeedInit_Magma(const char *resource, Ceed ceed) { 216dbfb411Snbeams const int nrc = 14; // number of characters in resource 226574a04fSJeremy L Thompson CeedCheck(!strncmp(resource, "/gpu/cuda/magma", nrc) || !strncmp(resource, "/gpu/hip/magma", nrc), ceed, CEED_ERROR_BACKEND, 236574a04fSJeremy L Thompson "Magma backend cannot use resource: %s", resource); 247f5b9731SStan Tomov 25e0582403Sabdelfattah83 Ceed_Magma *data; 2658549094SSebastian Grimberg CeedCallBackend(CeedCalloc(1, &data)); 272b730f8bSJeremy L Thompson CeedCallBackend(CeedSetData(ceed, data)); 28*00fb7a04SSebastian Grimberg CeedCallBackend(CeedInit_Magma_common(ceed, resource)); 29e0582403Sabdelfattah83 3058549094SSebastian Grimberg // Create reference Ceed that implementation will be dispatched through unless overridden 3158549094SSebastian Grimberg Ceed ceed_ref; 32e5f091ebSnbeams #ifdef CEED_MAGMA_USE_HIP 3358549094SSebastian Grimberg CeedCallBackend(CeedInit("/gpu/hip/ref", &ceed_ref)); 346dbfb411Snbeams #else 3558549094SSebastian Grimberg CeedCallBackend(CeedInit("/gpu/cuda/ref", &ceed_ref)); 366dbfb411Snbeams #endif 3758549094SSebastian Grimberg CeedCallBackend(CeedSetDelegate(ceed, ceed_ref)); 386dbfb411Snbeams 392b730f8bSJeremy L Thompson CeedCallBackend(CeedSetBackendFunction(ceed, "Ceed", ceed, "BasisCreateTensorH1", CeedBasisCreateTensorH1_Magma)); 402b730f8bSJeremy L Thompson CeedCallBackend(CeedSetBackendFunction(ceed, "Ceed", ceed, "BasisCreateH1", CeedBasisCreateH1_Magma)); 412b730f8bSJeremy L Thompson CeedCallBackend(CeedSetBackendFunction(ceed, "Ceed", ceed, "Destroy", CeedDestroy_Magma)); 4258549094SSebastian Grimberg 43e15f9bd0SJeremy L Thompson return CEED_ERROR_SUCCESS; 4482b77998SStan Tomov } 4582b77998SStan Tomov 46*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------ 47*00fb7a04SSebastian Grimberg // Backend Register 48*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------ 491d013790SJed Brown CEED_INTERN int CeedRegister_Magma(void) { 50e5f091ebSnbeams #ifdef CEED_MAGMA_USE_HIP 511d013790SJed Brown return CeedRegister("/gpu/hip/magma", CeedInit_Magma, 120); 52adb2481bSnbeams #else 531d013790SJed Brown return CeedRegister("/gpu/cuda/magma", CeedInit_Magma, 120); 54adb2481bSnbeams #endif 5582b77998SStan Tomov } 56*00fb7a04SSebastian Grimberg 57*00fb7a04SSebastian Grimberg //------------------------------------------------------------------------------ 58