1*3d8e8822SJeremy L Thompson // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors. 2*3d8e8822SJeremy L Thompson // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 37d8d0e25Snbeams // 4*3d8e8822SJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause 57d8d0e25Snbeams // 6*3d8e8822SJeremy L Thompson // This file is part of CEED: http://github.com/ceed 77d8d0e25Snbeams 8ec3da8bcSJed Brown #include <ceed/ceed.h> 9ec3da8bcSJed Brown #include <ceed/backend.h> 103d576824SJeremy L Thompson #include <hip/hip_runtime.h> 117d8d0e25Snbeams #include <stdio.h> 123d576824SJeremy L Thompson #include <string.h> 137d8d0e25Snbeams #include "ceed-hip-gen.h" 147d8d0e25Snbeams 157d8d0e25Snbeams //------------------------------------------------------------------------------ 167d8d0e25Snbeams // Apply QFunction 177d8d0e25Snbeams //------------------------------------------------------------------------------ 187d8d0e25Snbeams static int CeedQFunctionApply_Hip_gen(CeedQFunction qf, CeedInt Q, 197d8d0e25Snbeams CeedVector *U, CeedVector *V) { 207d8d0e25Snbeams int ierr; 217d8d0e25Snbeams Ceed ceed; 22e15f9bd0SJeremy L Thompson ierr = CeedQFunctionGetCeed(qf, &ceed); CeedChkBackend(ierr); 23e15f9bd0SJeremy L Thompson return CeedError(ceed, CEED_ERROR_BACKEND, 24e15f9bd0SJeremy L Thompson "Backend does not implement QFunctionApply"); 257d8d0e25Snbeams } 267d8d0e25Snbeams 277d8d0e25Snbeams //------------------------------------------------------------------------------ 287d8d0e25Snbeams // Destroy QFunction 297d8d0e25Snbeams //------------------------------------------------------------------------------ 307d8d0e25Snbeams static int CeedQFunctionDestroy_Hip_gen(CeedQFunction qf) { 317d8d0e25Snbeams int ierr; 327d8d0e25Snbeams CeedQFunction_Hip_gen *data; 33e15f9bd0SJeremy L Thompson ierr = CeedQFunctionGetData(qf, &data); CeedChkBackend(ierr); 347d8d0e25Snbeams Ceed ceed; 35e15f9bd0SJeremy L Thompson ierr = CeedQFunctionGetCeed(qf, &ceed); CeedChkBackend(ierr); 367d8d0e25Snbeams ierr = hipFree(data->d_c); CeedChk_Hip(ceed, ierr); 37e15f9bd0SJeremy L Thompson ierr = CeedFree(&data->qFunctionSource); CeedChkBackend(ierr); 38e15f9bd0SJeremy L Thompson ierr = CeedFree(&data); CeedChkBackend(ierr); 39e15f9bd0SJeremy L Thompson return CEED_ERROR_SUCCESS; 407d8d0e25Snbeams } 417d8d0e25Snbeams 427d8d0e25Snbeams //------------------------------------------------------------------------------ 437d8d0e25Snbeams // Create QFunction 447d8d0e25Snbeams //------------------------------------------------------------------------------ 457d8d0e25Snbeams int CeedQFunctionCreate_Hip_gen(CeedQFunction qf) { 467d8d0e25Snbeams int ierr; 477d8d0e25Snbeams Ceed ceed; 487d8d0e25Snbeams CeedQFunctionGetCeed(qf, &ceed); 497d8d0e25Snbeams CeedQFunction_Hip_gen *data; 50e15f9bd0SJeremy L Thompson ierr = CeedCalloc(1, &data); CeedChkBackend(ierr); 51e15f9bd0SJeremy L Thompson ierr = CeedQFunctionSetData(qf, data); CeedChkBackend(ierr); 527d8d0e25Snbeams 533d3250a0SJeremy L Thompson // Read QFunction source 5443e1b16fSJeremy L Thompson ierr = CeedQFunctionGetKernelName(qf, &data->qFunctionName); 5543e1b16fSJeremy L Thompson CeedChkBackend(ierr); 5646dc0734SJeremy L Thompson CeedDebug256(ceed, 2, "----- Loading QFunction User Source -----\n"); 573d3250a0SJeremy L Thompson ierr = CeedQFunctionLoadSourceToBuffer(qf, &data->qFunctionSource); 583d3250a0SJeremy L Thompson CeedChkBackend(ierr); 5946dc0734SJeremy L Thompson CeedDebug256(ceed, 2, "----- Loading QFunction User Source Complete! -----\n"); 603d3250a0SJeremy L Thompson if (!data->qFunctionSource) 613d3250a0SJeremy L Thompson // LCOV_EXCL_START 623d3250a0SJeremy L Thompson return CeedError(ceed, CEED_ERROR_UNSUPPORTED, 633d3250a0SJeremy L Thompson "/gpu/hip/gen backend requires QFunction source code file"); 643d3250a0SJeremy L Thompson // LCOV_EXCL_STOP 657d8d0e25Snbeams 667d8d0e25Snbeams ierr = CeedSetBackendFunction(ceed, "QFunction", qf, "Apply", 67e15f9bd0SJeremy L Thompson CeedQFunctionApply_Hip_gen); CeedChkBackend(ierr); 687d8d0e25Snbeams ierr = CeedSetBackendFunction(ceed, "QFunction", qf, "Destroy", 69e15f9bd0SJeremy L Thompson CeedQFunctionDestroy_Hip_gen); CeedChkBackend(ierr); 70e15f9bd0SJeremy L Thompson return CEED_ERROR_SUCCESS; 717d8d0e25Snbeams } 727d8d0e25Snbeams //------------------------------------------------------------------------------ 73