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