1*bd882c8aSJames Wright // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other 2*bd882c8aSJames Wright // CEED contributors. All Rights Reserved. See the top-level LICENSE and NOTICE 3*bd882c8aSJames Wright // files for details. 4*bd882c8aSJames Wright // 5*bd882c8aSJames Wright // SPDX-License-Identifier: BSD-2-Clause 6*bd882c8aSJames Wright // 7*bd882c8aSJames Wright // This file is part of CEED: http://github.com/ceed 8*bd882c8aSJames Wright 9*bd882c8aSJames Wright #include "ceed-sycl-ref.hpp" 10*bd882c8aSJames Wright 11*bd882c8aSJames Wright #include <ceed/backend.h> 12*bd882c8aSJames Wright #include <ceed/ceed.h> 13*bd882c8aSJames Wright 14*bd882c8aSJames Wright #include <string> 15*bd882c8aSJames Wright #include <sycl/sycl.hpp> 16*bd882c8aSJames Wright 17*bd882c8aSJames Wright //------------------------------------------------------------------------------ 18*bd882c8aSJames Wright // SYCL preferred MemType 19*bd882c8aSJames Wright //------------------------------------------------------------------------------ 20*bd882c8aSJames Wright static int CeedGetPreferredMemType_Sycl(CeedMemType *mem_type) { 21*bd882c8aSJames Wright *mem_type = CEED_MEM_DEVICE; 22*bd882c8aSJames Wright return CEED_ERROR_SUCCESS; 23*bd882c8aSJames Wright } 24*bd882c8aSJames Wright 25*bd882c8aSJames Wright //------------------------------------------------------------------------------ 26*bd882c8aSJames Wright // Backend Init 27*bd882c8aSJames Wright //------------------------------------------------------------------------------ 28*bd882c8aSJames Wright static int CeedInit_Sycl(const char *resource, Ceed ceed) { 29*bd882c8aSJames Wright char *resource_root; 30*bd882c8aSJames Wright CeedCallBackend(CeedSyclGetResourceRoot(ceed, resource, &resource_root)); 31*bd882c8aSJames Wright CeedCheck(!std::strcmp(resource_root, "/gpu/sycl/ref") || !std::strcmp(resource_root, "/cpu/sycl/ref"), ceed, CEED_ERROR_BACKEND, 32*bd882c8aSJames Wright "Sycl backend cannot use resource: %s", resource); 33*bd882c8aSJames Wright CeedCallBackend(CeedFree(&resource_root)); 34*bd882c8aSJames Wright CeedCallBackend(CeedSetDeterministic(ceed, true)); 35*bd882c8aSJames Wright 36*bd882c8aSJames Wright Ceed_Sycl *data; 37*bd882c8aSJames Wright CeedCallBackend(CeedCalloc(1, &data)); 38*bd882c8aSJames Wright CeedCallBackend(CeedSetData(ceed, data)); 39*bd882c8aSJames Wright CeedCallBackend(CeedSyclInit(ceed, resource)); 40*bd882c8aSJames Wright 41*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "GetPreferredMemType", CeedGetPreferredMemType_Sycl)); 42*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "VectorCreate", &CeedVectorCreate_Sycl)); 43*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "BasisCreateTensorH1", &CeedBasisCreateTensorH1_Sycl)); 44*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "BasisCreateH1", &CeedBasisCreateH1_Sycl)); 45*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "ElemRestrictionCreate", &CeedElemRestrictionCreate_Sycl)); 46*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "QFunctionCreate", &CeedQFunctionCreate_Sycl)); 47*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "QFunctionContextCreate", &CeedQFunctionContextCreate_Sycl)); 48*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "OperatorCreate", &CeedOperatorCreate_Sycl)); 49*bd882c8aSJames Wright CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "Destroy", &CeedDestroy_Sycl)); 50*bd882c8aSJames Wright 51*bd882c8aSJames Wright return CEED_ERROR_SUCCESS; 52*bd882c8aSJames Wright } 53*bd882c8aSJames Wright 54*bd882c8aSJames Wright //------------------------------------------------------------------------------ 55*bd882c8aSJames Wright // Backend Register 56*bd882c8aSJames Wright //------------------------------------------------------------------------------ 57*bd882c8aSJames Wright CEED_INTERN int CeedRegister_Sycl(void) { 58*bd882c8aSJames Wright CeedCallBackend(CeedRegister("/gpu/sycl/ref", CeedInit_Sycl, 40)); 59*bd882c8aSJames Wright CeedCallBackend(CeedRegister("/cpu/sycl/ref", CeedInit_Sycl, 50)); 60*bd882c8aSJames Wright return CEED_ERROR_SUCCESS; 61*bd882c8aSJames Wright } 62*bd882c8aSJames Wright //------------------------------------------------------------------------------ 63