From 2545fed27411e7dcde2bb71c5ad1f6cb177e81f4 Mon Sep 17 00:00:00 2001 From: Rafael Ravedutti <rafael.r.ravedutti@fau.de> Date: Tue, 9 Apr 2024 22:44:46 +0200 Subject: [PATCH] More preliminary fixes Signed-off-by: Rafael Ravedutti <rafael.r.ravedutti@fau.de> --- CMakeLists.txt | 20 ++++++++++++---- examples/main.cpp | 14 ++++++++++++ src/pairs/code_gen/cgen.py | 47 ++++---------------------------------- 3 files changed, 35 insertions(+), 46 deletions(-) create mode 100644 examples/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ce1ea95..c8d9555 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,7 @@ option(USE_WALBERLA "USE_WALBERLA" ON) option(USE_MPI "USE_MPI" ON) option(COMPILE_CUDA "COMPILE_CUDA" ON) option(ENABLE_GPU_DIRECT "ENABLE_GPU_DIRECT" ON) +option(GENERATE_WHOLE_PROGRAM "GENERATE_WHOLE_PROGRAM" OFF) if(DEBUG) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG ") @@ -45,6 +46,16 @@ set(RUNTIME_COMMON_FILES set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE STRING "Python executable not set.") +if(NOT GENERATE_WHOLE_PROGRAM) + file( + COPY ${CMAKE_CURRENT_SOURCE_DIR}/examples/main.cpp + DESTINATION ${CMAKE_BINARY_DIR}) + + set(EXEC_FILES ${CMAKE_BINARY_DIR}/main.cpp ${RUNTIME_COMMON_FILES}) +else() + set(EXEC_FILES ${RUNTIME_COMMON_FILES}) +endif() + if(NOT PYTHON_EXECUTABLE) set(PYTHON_EXECUTABLE python3) endif() @@ -62,10 +73,10 @@ execute_process( if(USE_WALBERLA) waLBerla_add_executable( NAME ${CPU_BIN} - FILES ${RUNTIME_COMMON_FILES} ${RUNTIME_CPU_FILES} ${CMAKE_BINARY_DIR}/${CPU_SRC} + FILES ${EXEC_FILES} ${RUNTIME_CPU_FILES} ${CMAKE_BINARY_DIR}/${CPU_SRC} DEPENDS blockforest core pe) else() - add_executable(${CPU_BIN} ${CPU_SRC} ${RUNTIME_COMMON_FILES} ${RUNTIME_CPU_FILES}) + add_executable(${CPU_BIN} ${CPU_SRC} ${EXEC_FILES} ${RUNTIME_CPU_FILES}) endif() add_library(runtime_cpu STATIC runtime/devices/dummy.cpp) @@ -80,6 +91,7 @@ add_custom_command( add_custom_target(gen_cpu DEPENDS ${CMAKE_BINARY_DIR}/${CPU_SRC}) add_dependencies(${CPU_BIN} gen_cpu) + if(COMPILE_CUDA) find_package(CUDA REQUIRED) enable_language(CUDA) @@ -87,10 +99,10 @@ if(COMPILE_CUDA) if(USE_WALBERLA) waLBerla_add_executable( NAME ${GPU_BIN} - FILES ${RUNTIME_COMMON_FILES} + FILES ${EXEC_FILES} DEPENDS blockforest core pe) else() - add_executable(${GPU_BIN} ${GPU_SRC} ${RUNTIME_COMMON_FILES} ${RUNTIME_GPU_FILES}) + add_executable(${GPU_BIN} ${GPU_SRC} ${EXEC_FILES} ${RUNTIME_GPU_FILES}) endif() if(ENABLE_GPU_DIRECT) diff --git a/examples/main.cpp b/examples/main.cpp new file mode 100644 index 0000000..991cbec --- /dev/null +++ b/examples/main.cpp @@ -0,0 +1,14 @@ +#include <iostream> +//--- +#include "md.hpp" + +int main(int argc, char **argv) { + PairsSimulation *ps = new PairsSimulation(); + std::cout << "initialize" << std::endl; + ps->initialize(argc, argv); + std::cout << "do_timestep" << std::endl; + ps->do_timestep(); + std::cout << "end" << std::endl; + ps->end(); + return 0; +} diff --git a/src/pairs/code_gen/cgen.py b/src/pairs/code_gen/cgen.py index 7872eb2..e220678 100644 --- a/src/pairs/code_gen/cgen.py +++ b/src/pairs/code_gen/cgen.py @@ -237,7 +237,6 @@ class CGen: self.print = Printer(self.ref + ext) self.print.start() self.generate_preamble() - self.generate_pairs_object_structure() for kernel in self.sim.kernels(): @@ -269,6 +268,7 @@ class CGen: self.print = Printer(self.ref + ".hpp") self.print.start() + self.generate_preamble() self.generate_pairs_object_structure() self.generate_module_headers() @@ -755,46 +755,7 @@ class CGen: self.print("}") if isinstance(ast_node, ModuleCall): - module = ast_node.module - #device_cond = module.run_on_device and self.target.is_gpu() - - #for var in module.read_only_variables(): - # decl = var.name() - # module_params += f", {decl}" - - #for var in module.write_variables(): - # decl = f"rv_{var.name()}.getDevicePointer()" if device_cond and var.device_flag else f"&{var.name()}" - # module_params += f", {decl}" - - #for array in module.arrays(): - # decl = f"d_{array.name()}" if device_cond else array.name() - # module_params += decl if len(module_params) <= 0 else f", {decl}" - # if array in module.host_references(): - # decl = array.name() - # module_params += f", {decl}" - - #for prop in module.properties(): - # decl = f"d_{prop.name()}" if device_cond else prop.name() - # module_params += f", {decl}" - # if prop in module.host_references(): - # decl = prop.name() - # module_params += f", {decl}" - - #for contact_prop in module.contact_properties(): - # decl = f"d_{contact_prop.name()}" if device_cond else contact_prop.name() - # module_params += f", {decl}" - # if contact_prop in module.host_references(): - # decl = contact_prop.name() - # module_params += f", {decl}" - - #for feature_prop in module.feature_properties(): - # decl = f"d_{feature_prop.name()}" if device_cond else feature_prop.name() - # module_params += f", {decl}" - # if feature_prop in module.host_references(): - # decl = feature_prop.name() - # module_params += f", {decl}" - - self.print(f"{module.name}(pobj);") + self.print(f"{ast_node.module.name}(pobj);") if isinstance(ast_node, Print): self.print(f"PAIRS_DEBUG(\"{ast_node.string}\\n\");") @@ -961,7 +922,9 @@ class CGen: if isinstance(ast_node, Deref): var = self.generate_expression(ast_node.var) - return f"(*{var})" + # Dereferences are ignored for write variables when full objects + # are generated since they can be directly written into + return var if self.generate_full_object_names else f"(*{var})" if isinstance(ast_node, DeviceStaticRef): elem = self.generate_expression(ast_node.elem) -- GitLab