xref: /petsc/src/sys/objects/device/impls/host/hostdevice.cxx (revision 0e6b6b5985dd9b1172860d21fb88bd3966bf7c54)
1*0e6b6b59SJacob Faibussowitsch #include "hostdevice.hpp"
2*0e6b6b59SJacob Faibussowitsch 
3*0e6b6b59SJacob Faibussowitsch namespace Petsc {
4*0e6b6b59SJacob Faibussowitsch 
5*0e6b6b59SJacob Faibussowitsch namespace device {
6*0e6b6b59SJacob Faibussowitsch 
7*0e6b6b59SJacob Faibussowitsch namespace host {
8*0e6b6b59SJacob Faibussowitsch 
9*0e6b6b59SJacob Faibussowitsch PetscErrorCode Device::initialize(MPI_Comm comm, PetscInt *defaultDeviceId, PetscBool *defaultView, PetscDeviceInitType *defaultInitType) noexcept {
10*0e6b6b59SJacob Faibussowitsch   PetscFunctionBegin;
11*0e6b6b59SJacob Faibussowitsch   // the host is always id 0
12*0e6b6b59SJacob Faibussowitsch   *defaultDeviceId = 0;
13*0e6b6b59SJacob Faibussowitsch   // the host is always "lazily" initialized
14*0e6b6b59SJacob Faibussowitsch   *defaultInitType = PETSC_DEVICE_INIT_LAZY;
15*0e6b6b59SJacob Faibussowitsch 
16*0e6b6b59SJacob Faibussowitsch   PetscOptionsBegin(comm, nullptr, "PetscDevice host Options", "Sys");
17*0e6b6b59SJacob Faibussowitsch   PetscCall(base_type::PetscOptionDeviceView(PetscOptionsObject, defaultView, nullptr));
18*0e6b6b59SJacob Faibussowitsch   PetscOptionsEnd();
19*0e6b6b59SJacob Faibussowitsch   PetscFunctionReturn(0);
20*0e6b6b59SJacob Faibussowitsch }
21*0e6b6b59SJacob Faibussowitsch 
22*0e6b6b59SJacob Faibussowitsch PetscErrorCode Device::get_attribute_(PetscInt, PetscDeviceAttribute attr, void *value) noexcept {
23*0e6b6b59SJacob Faibussowitsch   PetscFunctionBegin;
24*0e6b6b59SJacob Faibussowitsch   switch (attr) {
25*0e6b6b59SJacob Faibussowitsch   case PETSC_DEVICE_ATTR_SIZE_T_SHARED_MEM_PER_BLOCK: *static_cast<std::size_t *>(value) = 64000; break;
26*0e6b6b59SJacob Faibussowitsch   default: PetscUnreachable();
27*0e6b6b59SJacob Faibussowitsch   }
28*0e6b6b59SJacob Faibussowitsch   PetscFunctionReturn(0);
29*0e6b6b59SJacob Faibussowitsch }
30*0e6b6b59SJacob Faibussowitsch 
31*0e6b6b59SJacob Faibussowitsch } // namespace host
32*0e6b6b59SJacob Faibussowitsch 
33*0e6b6b59SJacob Faibussowitsch } // namespace device
34*0e6b6b59SJacob Faibussowitsch 
35*0e6b6b59SJacob Faibussowitsch } // namespace Petsc
36