xref: /libCEED/backends/sycl-shared/ceed-sycl-shared.sycl.cpp (revision 9ba83ac0e4b1fca39d6fa6737a318a9f0cbc172d)
1*9ba83ac0SJeremy L Thompson // Copyright (c) 2017-2026, Lawrence Livermore National Security, LLC and other CEED contributors.
2bd882c8aSJames Wright // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3bd882c8aSJames Wright //
4bd882c8aSJames Wright // SPDX-License-Identifier: BSD-2-Clause
5bd882c8aSJames Wright //
6bd882c8aSJames Wright // This file is part of CEED:  http://github.com/ceed
7bd882c8aSJames Wright 
8bd882c8aSJames Wright #include "ceed-sycl-shared.hpp"
9bd882c8aSJames Wright 
10bd882c8aSJames Wright #include <ceed/backend.h>
11bd882c8aSJames Wright #include <ceed/ceed.h>
12bd882c8aSJames Wright 
13bd882c8aSJames Wright #include <sstream>
14bd882c8aSJames Wright #include <string>
15bd882c8aSJames Wright #include <string_view>
16bd882c8aSJames Wright 
17bd882c8aSJames Wright //------------------------------------------------------------------------------
18bd882c8aSJames Wright // Backend init
19bd882c8aSJames Wright //------------------------------------------------------------------------------
20bd882c8aSJames Wright static int CeedInit_Sycl_shared(const char *resource, Ceed ceed) {
21dd64fc84SJeremy L Thompson   Ceed       ceed_ref;
22097cc795SJames Wright   Ceed_Sycl *data;
23bd882c8aSJames Wright   char      *resource_root;
24dd64fc84SJeremy L Thompson 
25bc246734SJeremy L Thompson   CeedCallBackend(CeedGetResourceRoot(ceed, resource, ":", &resource_root));
26bd882c8aSJames Wright   CeedCheck(!std::strcmp(resource_root, "/gpu/sycl/shared") || !std::strcmp(resource_root, "/cpu/sycl/shared"), ceed, CEED_ERROR_BACKEND,
27bd882c8aSJames Wright             "Sycl backend cannot use resource: %s", resource);
28bd882c8aSJames Wright   std::string_view root_view = resource_root;
29bd882c8aSJames Wright 
30bd882c8aSJames Wright   auto suffix_length = root_view.size() - root_view.rfind("shared");
31bd882c8aSJames Wright   root_view.remove_suffix(suffix_length);
32bd882c8aSJames Wright 
33bd882c8aSJames Wright   std::ostringstream ref_resource;
34bd882c8aSJames Wright   ref_resource << root_view << "ref";
35bd882c8aSJames Wright 
36bd882c8aSJames Wright   CeedCallBackend(CeedFree(&resource_root));
37bd882c8aSJames Wright   CeedCallBackend(CeedSetDeterministic(ceed, true));
38bd882c8aSJames Wright 
39bd882c8aSJames Wright   CeedCallBackend(CeedCalloc(1, &data));
40bd882c8aSJames Wright   CeedCallBackend(CeedSetData(ceed, data));
41eb7e6cafSJeremy L Thompson   CeedCallBackend(CeedInit_Sycl(ceed, resource));
42bd882c8aSJames Wright 
43bd882c8aSJames Wright   CeedCallBackend(CeedInit(ref_resource.str().c_str(), &ceed_ref));
441f4b1b45SUmesh Unnikrishnan   CeedCallBackend(CeedSetStream_Sycl(ceed_ref, &(data->sycl_queue)));
45bd882c8aSJames Wright   CeedCallBackend(CeedSetDelegate(ceed, ceed_ref));
46bd882c8aSJames Wright 
47bd882c8aSJames Wright   CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "BasisCreateTensorH1", CeedBasisCreateTensorH1_Sycl_shared));
48bd882c8aSJames Wright   CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "Ceed", ceed, "Destroy", CeedDestroy_Sycl));
49bd882c8aSJames Wright   return CEED_ERROR_SUCCESS;
50bd882c8aSJames Wright }
51bd882c8aSJames Wright 
52bd882c8aSJames Wright //------------------------------------------------------------------------------
53bd882c8aSJames Wright // Register backend
54bd882c8aSJames Wright //------------------------------------------------------------------------------
55bd882c8aSJames Wright CEED_INTERN int CeedRegister_Sycl_Shared(void) {
56bd882c8aSJames Wright   CeedCallBackend(CeedRegister("/gpu/sycl/shared", CeedInit_Sycl_shared, 25));
57bd882c8aSJames Wright   CeedCallBackend(CeedRegister("/cpu/sycl/shared", CeedInit_Sycl_shared, 35));
58bd882c8aSJames Wright   return CEED_ERROR_SUCCESS;
59bd882c8aSJames Wright }
60ff1e7120SSebastian Grimberg 
61bd882c8aSJames Wright //------------------------------------------------------------------------------
62