16ca0f394SUmesh Unnikrishnan // Copyright (c) 2017-2022, 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 //------------------------------------------------------------------------------ 196ca0f394SUmesh Unnikrishnan static int CeedQFunctionApply_Sycl_gen(CeedQFunction qf, CeedInt Q, CeedVector *U, CeedVector *V) { 206ca0f394SUmesh Unnikrishnan Ceed ceed; 21dd64fc84SJeremy L Thompson 226ca0f394SUmesh Unnikrishnan CeedCallBackend(CeedQFunctionGetCeed(qf, &ceed)); 236ca0f394SUmesh Unnikrishnan return CeedError(ceed, CEED_ERROR_BACKEND, "Backend does not implement QFunctionApply"); 246ca0f394SUmesh Unnikrishnan } 256ca0f394SUmesh Unnikrishnan 266ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------ 276ca0f394SUmesh Unnikrishnan // Destroy QFunction 286ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------ 296ca0f394SUmesh Unnikrishnan static int CeedQFunctionDestroy_Sycl_gen(CeedQFunction qf) { 306ca0f394SUmesh Unnikrishnan Ceed ceed; 316ca0f394SUmesh Unnikrishnan Ceed_Sycl *data; 32dd64fc84SJeremy L Thompson CeedQFunction_Sycl_gen *impl; 33dd64fc84SJeremy L Thompson 34dd64fc84SJeremy L Thompson CeedCallBackend(CeedQFunctionGetCeed(qf, &ceed)); 35dd64fc84SJeremy L Thompson CeedCallBackend(CeedQFunctionGetData(qf, &impl)); 366ca0f394SUmesh Unnikrishnan CeedCallBackend(CeedGetData(ceed, &data)); 376ca0f394SUmesh Unnikrishnan 386ca0f394SUmesh Unnikrishnan // Wait for all work to finish before freeing memory 396ca0f394SUmesh Unnikrishnan CeedCallSycl(ceed, data->sycl_queue.wait_and_throw()); 406ca0f394SUmesh Unnikrishnan CeedCallSycl(ceed, sycl::free(impl->d_c, data->sycl_context)); 416ca0f394SUmesh Unnikrishnan 42*09095acaSJeremy L Thompson CeedCallBackend(CeedFree(&impl->qfunction_source)); 436ca0f394SUmesh Unnikrishnan CeedCallBackend(CeedFree(&impl)); 446ca0f394SUmesh Unnikrishnan return CEED_ERROR_SUCCESS; 456ca0f394SUmesh Unnikrishnan } 466ca0f394SUmesh Unnikrishnan 476ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------ 486ca0f394SUmesh Unnikrishnan // Create QFunction 496ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------ 506ca0f394SUmesh Unnikrishnan int CeedQFunctionCreate_Sycl_gen(CeedQFunction qf) { 516ca0f394SUmesh Unnikrishnan Ceed ceed; 526ca0f394SUmesh Unnikrishnan CeedQFunction_Sycl_gen *impl; 53dd64fc84SJeremy L Thompson 54dd64fc84SJeremy L Thompson CeedQFunctionGetCeed(qf, &ceed); 556ca0f394SUmesh Unnikrishnan CeedCallBackend(CeedCalloc(1, &impl)); 566ca0f394SUmesh Unnikrishnan CeedCallBackend(CeedQFunctionSetData(qf, impl)); 576ca0f394SUmesh Unnikrishnan 586ca0f394SUmesh Unnikrishnan // Read QFunction source 59*09095acaSJeremy L Thompson CeedCallBackend(CeedQFunctionGetKernelName(qf, &impl->qfunction_name)); 606ca0f394SUmesh Unnikrishnan CeedDebug256(ceed, 2, "----- Loading QFunction User Source -----\n"); 61*09095acaSJeremy L Thompson CeedCallBackend(CeedQFunctionLoadSourceToBuffer(qf, &impl->qfunction_source)); 626ca0f394SUmesh Unnikrishnan CeedDebug256(ceed, 2, "----- Loading QFunction User Source Complete! -----\n"); 63*09095acaSJeremy L Thompson if (!impl->qfunction_source) { 646ca0f394SUmesh Unnikrishnan // LCOV_EXCL_START 656ca0f394SUmesh Unnikrishnan return CeedError(ceed, CEED_ERROR_UNSUPPORTED, "/gpu/sycl/gen backend requires QFunction source code file"); 666ca0f394SUmesh Unnikrishnan // LCOV_EXCL_STOP 676ca0f394SUmesh Unnikrishnan } 686ca0f394SUmesh Unnikrishnan 696ca0f394SUmesh Unnikrishnan CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "QFunction", qf, "Apply", CeedQFunctionApply_Sycl_gen)); 706ca0f394SUmesh Unnikrishnan CeedCallBackend(CeedSetBackendFunctionCpp(ceed, "QFunction", qf, "Destroy", CeedQFunctionDestroy_Sycl_gen)); 716ca0f394SUmesh Unnikrishnan return CEED_ERROR_SUCCESS; 726ca0f394SUmesh Unnikrishnan } 736ca0f394SUmesh Unnikrishnan 746ca0f394SUmesh Unnikrishnan //------------------------------------------------------------------------------ 75