xref: /libCEED/rust/libceed-sys/c-src/backends/sycl-ref/ceed-sycl-ref.sycl.cpp (revision bd882c8a454763a096666645dc9a6229d5263694)
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