diff --git a/include/astaroth.h b/include/astaroth.h index 1aef514..9befcee 100644 --- a/include/astaroth.h +++ b/include/astaroth.h @@ -28,6 +28,17 @@ extern "C" { #include "astaroth_grid.h" #include "astaroth_node.h" +#define acInit(x) acGridInit(x) +#define acQuit() acGridQuit() +#define acLoad(x) acGridLoadMesh(STREAM_DEFAULT, x) +#define acReduceScal(x, y) acGridReduceScal(STREAM_DEFAULT, x, y) +#define acReduceVec(x, y, z, w) acGridReduceVec(STREAM_DEFAULT, x, y, z, w) +#define acBoundcondStep() acGridPeriodicBoundcondStep(STREAM_DEFAULT) +#define acIntegrate(x) acGridIntegrateStep(STREAM_DEFAULT, x) +#define acStore(x) acGridStoreMesh(STREAM_DEFAULT, x) +#define acSynchronizeStream(x) acGridSynchronizeStream(x) +#define acLoadDeviceConstant(x, y) acGridLoadConstant(STREAM_DEFAULT, x, y) + #ifdef __cplusplus } // extern "C" #endif diff --git a/include/astaroth_defines.h b/include/astaroth_defines.h index 1441967..0d03b70 100644 --- a/include/astaroth_defines.h +++ b/include/astaroth_defines.h @@ -105,7 +105,7 @@ typedef enum { } ReductionType; typedef enum { STREAM_DEFAULT, NUM_STREAM_TYPES } Stream; -#define STREAM_ALL (-1) +#define STREAM_ALL (NUM_STREAM_TYPES) #define AC_GEN_ID(X) X typedef enum { diff --git a/include/astaroth_grid.h b/include/astaroth_grid.h index 7dfe323..3fb5f8f 100644 --- a/include/astaroth_grid.h +++ b/include/astaroth_grid.h @@ -31,7 +31,7 @@ AcResult acGridInit(const AcMeshInfo node_config); AcResult acGridQuit(void); /** */ -AcResult acGridSynchronize(void); +AcResult acGridSynchronizeStream(const Stream stream); /** */ AcResult acGridSwapBuffers(void); @@ -72,34 +72,27 @@ AcResult acGridStoreVertexBuffer(const Stream stream, const VertexBufferHandle v /** */ AcResult acGridStoreMesh(const Stream stream, AcMesh* host_mesh); -/** */ -AcResult acGridTransferVertexBufferWithOffset(const Stream stream, - const VertexBufferHandle vtxbuf_handle, - const int3 src, const int3 dst, - const int num_vertices); - -/** */ -AcResult acGridTransferMeshWithOffset(const Stream stream, const int3 src, const int3 dst, - const int num_vertices); - -/** */ -AcResult acGridTransferVertexBuffer(const Stream stream, const VertexBufferHandle vtxbuf_handle); - -/** */ -AcResult acGridTransferMesh(const Stream stream); - /** */ AcResult acGridIntegrateSubstep(const Stream stream, const int step_number, const int3 start, const int3 end, const AcReal dt); + /** */ -AcResult acGridPeriodicBoundcondStep(const Stream stream, const int3 start, const int3 end); +AcResult acGridIntegrateStep(const Stream stream, const AcReal dt); + /** */ -AcResult acGridReduceScal(const Stream stream, const ReductionType rtype, - const VertexBufferHandle vtxbuf_handle, AcReal* result); +AcResult acGridPeriodicBoundcondStep(const Stream stream); /** */ -AcResult acGridReduceVec(const Stream stream, const ReductionType rtype, +/* acGridReduceScal(const Stream stream, const ReductionType rtype, + const VertexBufferHandle vtxbuf_handle, AcReal* result); */ +AcReal acGridReduceScal(const Stream stream, const ReductionType rtype, + const VertexBufferHandle vtxbuf_handle); +/** */ +/*AcResult acGridReduceVec(const Stream stream, const ReductionType rtype, const VertexBufferHandle vec0, const VertexBufferHandle vec1, - const VertexBufferHandle vec2, AcReal* result); + const VertexBufferHandle vec2, AcReal* result);*/ +AcReal acGridReduceVec(const Stream stream, const ReductionType rtype, + const VertexBufferHandle vec0, const VertexBufferHandle vec1, + const VertexBufferHandle vec2); #ifdef __cplusplus } // extern "C" diff --git a/src/core/astaroth.cu b/src/core/astaroth.cu index 1ef56d4..5de6d24 100644 --- a/src/core/astaroth.cu +++ b/src/core/astaroth.cu @@ -17,3 +17,15 @@ along with Astaroth. If not, see . */ #include "astaroth_defines.h" + +#define AC_GEN_STR(X) #X +const char* intparam_names[] = {AC_FOR_BUILTIN_INT_PARAM_TYPES(AC_GEN_STR) // + AC_FOR_USER_INT_PARAM_TYPES(AC_GEN_STR)}; +const char* int3param_names[] = {AC_FOR_BUILTIN_INT3_PARAM_TYPES(AC_GEN_STR) // + AC_FOR_USER_INT3_PARAM_TYPES(AC_GEN_STR)}; +const char* realparam_names[] = {AC_FOR_BUILTIN_REAL_PARAM_TYPES(AC_GEN_STR) // + AC_FOR_USER_REAL_PARAM_TYPES(AC_GEN_STR)}; +const char* real3param_names[] = {AC_FOR_BUILTIN_REAL3_PARAM_TYPES(AC_GEN_STR) // + AC_FOR_USER_REAL3_PARAM_TYPES(AC_GEN_STR)}; +const char* vtxbuf_names[] = {AC_FOR_VTXBUF_HANDLES(AC_GEN_STR)}; +#undef AC_GEN_STR diff --git a/src/core/grid.cu b/src/core/grid.cu index 83c7453..7a05d22 100644 --- a/src/core/grid.cu +++ b/src/core/grid.cu @@ -17,3 +17,172 @@ along with Astaroth. If not, see . */ #include "astaroth_grid.h" + +#include "astaroth_node.h" + +const size_t MAX_NUM_NODES = 32; +size_t num_nodes = 0; +static Node nodes[MAX_NUM_NODES]; + +/** */ +AcResult +acGridInit(const AcMeshInfo node_config) +{ + acNodeCreate(0, node_config, &nodes[0]); + ++num_nodes; + return AC_FAILURE; +} + +/** */ +AcResult +acGridQuit(void) +{ + acNodeDestroy(nodes[0]); + --num_nodes; + return AC_FAILURE; +} + +/** */ +AcResult +acGridSynchronizeStream(const Stream stream) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridSwapBuffers(void) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridLoadConstant(const Stream stream, const AcRealParam param, const AcReal value) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridLoadVertexBufferWithOffset(const Stream stream, const AcMesh host_mesh, + const VertexBufferHandle vtxbuf_handle, const int3 src, + const int3 dst, const int num_vertices) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridLoadMeshWithOffset(const Stream stream, const AcMesh host_mesh, const int3 src, + const int3 dst, const int num_vertices) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridLoadVertexBuffer(const Stream stream, const AcMesh host_mesh, + const VertexBufferHandle vtxbuf_handle) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridLoadMesh(const Stream stream, const AcMesh host_mesh) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridStoreVertexBufferWithOffset(const Stream stream, const VertexBufferHandle vtxbuf_handle, + const int3 src, const int3 dst, const int num_vertices, + AcMesh* host_mesh) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridStoreMeshWithOffset(const Stream stream, const int3 src, const int3 dst, + const int num_vertices, AcMesh* host_mesh) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridStoreVertexBuffer(const Stream stream, const VertexBufferHandle vtxbuf_handle, + AcMesh* host_mesh) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridStoreMesh(const Stream stream, AcMesh* host_mesh) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridIntegrateSubstep(const Stream stream, const int step_number, const int3 start, const int3 end, + const AcReal dt) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridIntegrateStep(const Stream stream, const AcReal dt) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +/** */ +AcResult +acGridPeriodicBoundcondStep(const Stream stream) +{ + WARNING("Not implemented"); + return AC_FAILURE; +} + +#if 0 +/** */ +AcResult acGridReduceScal(const Stream stream, const ReductionType rtype, + const VertexBufferHandle vtxbuf_handle, AcReal* result); +/** */ +AcResult acGridReduceVec(const Stream stream, const ReductionType rtype, + const VertexBufferHandle vec0, const VertexBufferHandle vec1, + const VertexBufferHandle vec2, AcReal* result); +#endif +/** */ +AcResult +acGridReduceScal(const Stream stream, const ReductionType rtype, + const VertexBufferHandle vtxbuf_handle, AcReal* result) +{ + return 0; +} +/** */ +AcResult +acGridReduceVec(const Stream stream, const ReductionType rtype, const VertexBufferHandle vec0, + const VertexBufferHandle vec1, const VertexBufferHandle vec2, AcReal* result) +{ + return 0; +} diff --git a/src/core/node.cu b/src/core/node.cu index 2fbc008..8d4b48a 100644 --- a/src/core/node.cu +++ b/src/core/node.cu @@ -22,18 +22,6 @@ #include "errchk.h" #include "math_utils.h" // sum for reductions -#define AC_GEN_STR(X) #X -const char* intparam_names[] = {AC_FOR_BUILTIN_INT_PARAM_TYPES(AC_GEN_STR) // - AC_FOR_USER_INT_PARAM_TYPES(AC_GEN_STR)}; -const char* int3param_names[] = {AC_FOR_BUILTIN_INT3_PARAM_TYPES(AC_GEN_STR) // - AC_FOR_USER_INT3_PARAM_TYPES(AC_GEN_STR)}; -const char* realparam_names[] = {AC_FOR_BUILTIN_REAL_PARAM_TYPES(AC_GEN_STR) // - AC_FOR_USER_REAL_PARAM_TYPES(AC_GEN_STR)}; -const char* real3param_names[] = {AC_FOR_BUILTIN_REAL3_PARAM_TYPES(AC_GEN_STR) // - AC_FOR_USER_REAL3_PARAM_TYPES(AC_GEN_STR)}; -const char* vtxbuf_names[] = {AC_FOR_VTXBUF_HANDLES(AC_GEN_STR)}; -#undef AC_GEN_STR - static const int MAX_NUM_DEVICES = 32; static Node node = NULL; @@ -482,10 +470,7 @@ acNodeIntegrate(const Node node, const AcReal dt) static AcResult local_boundcondstep(const Node node, const StreamType stream, const VertexBufferHandle vtxbuf) { - if (num_devices == 1) { - acDeviceBoundcondStep(devices[0], stream, vtxbuf, (int3){0, 0, 0}, subgrid.m); - } - else { + if (num_devices > 1) { // Local boundary conditions for (int i = 0; i < num_devices; ++i) { const int3 d0 = (int3){0, 0, NGHOST}; // DECOMPOSITION OFFSET HERE @@ -493,6 +478,9 @@ local_boundcondstep(const Node node, const StreamType stream, const VertexBuffer acDeviceBoundcondStep(devices[i], stream, vtxbuf, d0, d1); } } + else { + acDeviceBoundcondStep(devices[0], stream, vtxbuf, (int3){0, 0, 0}, subgrid.m); + } return AC_SUCCESS; } @@ -532,9 +520,12 @@ acNodePeriodicBoundcondStep(const Node node, const Stream stream, const VertexBufferHandle vtxbuf_handle) { local_boundcondstep(node, stream, vtxbuf_handle); - global_boundcondstep(node, stream, vtxbuf_handle); acNodeSynchronizeVertexBuffer(node, stream, vtxbuf_handle); + // TODO NOTE GLOBAL BOUNDCONDS NOT DONE HERE IF MORE THAN 1 NODE + global_boundcondstep(node, stream, vtxbuf_handle); + WARNING("Global boundconds should not be done here with multinode"); + return AC_SUCCESS; }