xref: /libCEED/rust/libceed-sys/c-src/backends/sycl-gen/ceed-sycl-gen-qfunction.sycl.cpp (revision d4cc18453651bd0f94c1a2e078b2646a92dafdcc)
1*9ba83ac0SJeremy L Thompson // Copyright (c) 2017-2026, Lawrence Livermore National Security, LLC and other CEED contributors.
26ca0f394SUmesh Unnikrishnan // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
36ca0f394SUmesh Unnikrishnan //
46ca0f394SUmesh Unnikrishnan // SPDX-License-Identifier: BSD-2-Clause
56ca0f394SUmesh Unnikrishnan //
66ca0f394SUmesh Unnikrishnan // This file is part of CEED:  http://github.com/ceed
76ca0f394SUmesh Unnikrishnan 
86ca0f394SUmesh Unnikrishnan #include <ceed/backend.h>
96ca0f394SUmesh Unnikrishnan #include <ceed/ceed.h>
106ca0f394SUmesh Unnikrishnan #include <sycl/sycl.hpp>
116ca0f394SUmesh Unnikrishnan #include <stdio.h>
126ca0f394SUmesh Unnikrishnan #include <string.h>
136ca0f394SUmesh Unnikrishnan 
146ca0f394SUmesh Unnikrishnan #include "ceed-sycl-gen.hpp"
156ca0f394SUmesh Unnikrishnan 
166ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------
176ca0f394SUmesh Unnikrishnan // Apply QFunction
186ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------
CeedQFunctionApply_Sycl_gen(CeedQFunction qf,CeedInt Q,CeedVector * U,CeedVector * V)196ca0f394SUmesh Unnikrishnan static int CeedQFunctionApply_Sycl_gen(CeedQFunction qf, CeedInt Q, CeedVector *U, CeedVector *V) {
206e536b99SJeremy L Thompson   return CeedError(CeedQFunctionReturnCeed(qf), CEED_ERROR_BACKEND, "Backend does not implement QFunctionApply");
216ca0f394SUmesh Unnikrishnan }
226ca0f394SUmesh Unnikrishnan 
236ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------
246ca0f394SUmesh Unnikrishnan // Destroy QFunction
256ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------
CeedQFunctionDestroy_Sycl_gen(CeedQFunction qf)266ca0f394SUmesh Unnikrishnan static int CeedQFunctionDestroy_Sycl_gen(CeedQFunction qf) {
276ca0f394SUmesh Unnikrishnan   Ceed                    ceed;
286ca0f394SUmesh Unnikrishnan   Ceed_Sycl              *data;
29dd64fc84SJeremy L Thompson   CeedQFunction_Sycl_gen *impl;
30dd64fc84SJeremy L Thompson 
31dd64fc84SJeremy L Thompson   CeedCallBackend(CeedQFunctionGetCeed(qf, &ceed));
32dd64fc84SJeremy L Thompson   CeedCallBackend(CeedQFunctionGetData(qf, &impl));
336ca0f394SUmesh Unnikrishnan   CeedCallBackend(CeedGetData(ceed, &data));
346ca0f394SUmesh Unnikrishnan 
356ca0f394SUmesh Unnikrishnan   // Wait for all work to finish before freeing memory
366ca0f394SUmesh Unnikrishnan   CeedCallSycl(ceed, data->sycl_queue.wait_and_throw());
376ca0f394SUmesh Unnikrishnan   CeedCallSycl(ceed, sycl::free(impl->d_c, data->sycl_context));
386ca0f394SUmesh Unnikrishnan 
3909095acaSJeremy L Thompson   CeedCallBackend(CeedFree(&impl->qfunction_source));
406ca0f394SUmesh Unnikrishnan   CeedCallBackend(CeedFree(&impl));
419bc66399SJeremy L Thompson   CeedCallBackend(CeedDestroy(&ceed));
426ca0f394SUmesh Unnikrishnan   return CEED_ERROR_SUCCESS;
436ca0f394SUmesh Unnikrishnan }
446ca0f394SUmesh Unnikrishnan 
456ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------
466ca0f394SUmesh Unnikrishnan // Create QFunction
476ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------
CeedQFunctionCreate_Sycl_gen(CeedQFunction qf)486ca0f394SUmesh Unnikrishnan int CeedQFunctionCreate_Sycl_gen(CeedQFunction qf) {
496ca0f394SUmesh Unnikrishnan   Ceed                    ceed;
506ca0f394SUmesh Unnikrishnan   CeedQFunction_Sycl_gen *impl;
51dd64fc84SJeremy L Thompson 
526e536b99SJeremy L Thompson   CeedCallBackend(CeedQFunctionGetCeed(qf, &ceed));
536ca0f394SUmesh Unnikrishnan   CeedCallBackend(CeedCalloc(1, &impl));
546ca0f394SUmesh Unnikrishnan   CeedCallBackend(CeedQFunctionSetData(qf, impl));
556ca0f394SUmesh Unnikrishnan 
566ca0f394SUmesh Unnikrishnan   // Read QFunction source
5709095acaSJeremy L Thompson   CeedCallBackend(CeedQFunctionGetKernelName(qf, &impl->qfunction_name));
586ca0f394SUmesh Unnikrishnan   CeedDebug256(ceed, 2, "----- Loading QFunction User Source -----\n");
5909095acaSJeremy L Thompson   CeedCallBackend(CeedQFunctionLoadSourceToBuffer(qf, &impl->qfunction_source));
606ca0f394SUmesh Unnikrishnan   CeedDebug256(ceed, 2, "----- Loading QFunction User Source Complete! -----\n");
614e3038a5SJeremy L Thompson   CeedCheck(impl->qfunction_source, ceed, CEED_ERROR_UNSUPPORTED, "/gpu/sycl/gen backend requires QFunction source code file");
626ca0f394SUmesh Unnikrishnan 
636ca0f394SUmesh Unnikrishnan   CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "QFunction", qf, "Apply", CeedQFunctionApply_Sycl_gen));
646ca0f394SUmesh Unnikrishnan   CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "QFunction", qf, "Destroy", CeedQFunctionDestroy_Sycl_gen));
659bc66399SJeremy L Thompson   CeedCallBackend(CeedDestroy(&ceed));
666ca0f394SUmesh Unnikrishnan   return CEED_ERROR_SUCCESS;
676ca0f394SUmesh Unnikrishnan }
686ca0f394SUmesh Unnikrishnan 
696ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------
70