xref: /libCEED/rust/libceed-sys/c-src/backends/xsmm/ceed-xsmm-serial.c (revision 3d8e882215d238700cdceb37404f76ca7fa24eaa)
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.
38d713cf6Sjeremylt //
4*3d8e8822SJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause
58d713cf6Sjeremylt //
6*3d8e8822SJeremy L Thompson // This file is part of CEED:  http://github.com/ceed
78d713cf6Sjeremylt 
8ec3da8bcSJed Brown #include <ceed/ceed.h>
9ec3da8bcSJed Brown #include <ceed/backend.h>
103d576824SJeremy L Thompson #include <stdbool.h>
113d576824SJeremy L Thompson #include <string.h>
128d713cf6Sjeremylt #include "ceed-xsmm.h"
138d713cf6Sjeremylt 
14f10650afSjeremylt //------------------------------------------------------------------------------
15f10650afSjeremylt // Backend Init
16f10650afSjeremylt //------------------------------------------------------------------------------
178d713cf6Sjeremylt static int CeedInit_Xsmm_Serial(const char *resource, Ceed ceed) {
188d713cf6Sjeremylt   int ierr;
19e0fc0447Sjeremylt   if (strcmp(resource, "/cpu/self")
20e0fc0447Sjeremylt       && strcmp(resource, "/cpu/self/xsmm/serial"))
21c042f62fSJeremy L Thompson     // LCOV_EXCL_START
22e15f9bd0SJeremy L Thompson     return CeedError(ceed, CEED_ERROR_BACKEND,
23e15f9bd0SJeremy L Thompson                      "serial libXSMM backend cannot use resource: %s",
248d713cf6Sjeremylt                      resource);
25c042f62fSJeremy L Thompson   // LCOV_EXCL_STOP
26e15f9bd0SJeremy L Thompson   ierr = CeedSetDeterministic(ceed, true); CeedChkBackend(ierr);
278d713cf6Sjeremylt 
285f67fadeSJeremy L Thompson   // Create reference CEED that implementation will be dispatched
298d713cf6Sjeremylt   //   through unless overridden
30d1d35e2fSjeremylt   Ceed ceed_ref;
31d1d35e2fSjeremylt   CeedInit("/cpu/self/opt/serial", &ceed_ref);
32d1d35e2fSjeremylt   ierr = CeedSetDelegate(ceed, ceed_ref); CeedChkBackend(ierr);
338d713cf6Sjeremylt 
3480a9ef05SNatalie Beams   if (CEED_SCALAR_TYPE == CEED_SCALAR_FP64) {
352f86a920SJeremy L Thompson     ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "TensorContractCreate",
3680a9ef05SNatalie Beams                                   CeedTensorContractCreate_f64_Xsmm);
3780a9ef05SNatalie Beams     CeedChkBackend(ierr);
3880a9ef05SNatalie Beams   } else {
3980a9ef05SNatalie Beams     ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "TensorContractCreate",
4080a9ef05SNatalie Beams                                   CeedTensorContractCreate_f32_Xsmm);
4180a9ef05SNatalie Beams     CeedChkBackend(ierr);
4280a9ef05SNatalie Beams   }
438d713cf6Sjeremylt 
44e15f9bd0SJeremy L Thompson   return CEED_ERROR_SUCCESS;
458d713cf6Sjeremylt }
468d713cf6Sjeremylt 
47f10650afSjeremylt //------------------------------------------------------------------------------
48f10650afSjeremylt // Backend Register
49f10650afSjeremylt //------------------------------------------------------------------------------
501d013790SJed Brown CEED_INTERN int CeedRegister_Xsmm_Serial(void) {
511d013790SJed Brown   return CeedRegister("/cpu/self/xsmm/serial", CeedInit_Xsmm_Serial, 25);
528d713cf6Sjeremylt }
53f10650afSjeremylt //------------------------------------------------------------------------------
54