xref: /libCEED/rust/libceed-sys/c-src/backends/hip-gen/ceed-hip-gen.c (revision dfdfb19e57f3fc18ccfd612ad88e5987a5e7a393)
1 // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors.
2 // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3 //
4 // SPDX-License-Identifier: BSD-2-Clause
5 //
6 // This file is part of CEED:  http://github.com/ceed
7 
8 #include <ceed/ceed.h>
9 #include <ceed/backend.h>
10 #include <string.h>
11 #include "ceed-hip-gen.h"
12 
13 //------------------------------------------------------------------------------
14 // Backend init
15 //------------------------------------------------------------------------------
16 static int CeedInit_Hip_gen(const char *resource, Ceed ceed) {
17   int ierr;
18 
19   char *resource_root;
20   ierr = CeedHipGetResourceRoot(ceed, resource, &resource_root);
21   CeedChkBackend(ierr);
22   if (strcmp(resource_root, "/gpu/hip") && strcmp(resource_root, "/gpu/hip/gen"))
23     // LCOV_EXCL_START
24     return CeedError(ceed, CEED_ERROR_BACKEND,
25                      "Hip backend cannot use resource: %s", resource);
26   // LCOV_EXCL_STOP
27   ierr = CeedFree(&resource_root); CeedChkBackend(ierr);
28 
29   Ceed_Hip *data;
30   ierr = CeedCalloc(1, &data); CeedChkBackend(ierr);
31   ierr = CeedSetData(ceed, data); CeedChkBackend(ierr);
32   ierr = CeedHipInit(ceed, resource); CeedChkBackend(ierr);
33 
34   Ceed ceedshared;
35   CeedInit("/gpu/hip/shared", &ceedshared);
36   ierr = CeedSetDelegate(ceed, ceedshared); CeedChkBackend(ierr);
37 
38   const char fallbackresource[] = "/gpu/hip/ref";
39   ierr = CeedSetOperatorFallbackResource(ceed, fallbackresource);
40   CeedChkBackend(ierr);
41 
42   ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "QFunctionCreate",
43                                 CeedQFunctionCreate_Hip_gen); CeedChkBackend(ierr);
44   ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "OperatorCreate",
45                                 CeedOperatorCreate_Hip_gen); CeedChkBackend(ierr);
46   ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "Destroy",
47                                 CeedDestroy_Hip); CeedChkBackend(ierr);
48   return CEED_ERROR_SUCCESS;
49 }
50 
51 //------------------------------------------------------------------------------
52 // Register backend
53 //------------------------------------------------------------------------------
54 CEED_INTERN int CeedRegister_Hip_Gen(void) {
55   return CeedRegister("/gpu/hip/gen", CeedInit_Hip_gen, 20);
56 }
57 //------------------------------------------------------------------------------
58