From ba8971acf4ab2d1ab3130aa503616e489e614320 Mon Sep 17 00:00:00 2001 From: Hamilton Tobon Date: Thu, 22 Aug 2019 15:11:28 -0500 Subject: [PATCH 1/2] Erasing unneeded variable --- src/cpp/debug.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/cpp/debug.cpp b/src/cpp/debug.cpp index e9e3683..7f208c5 100644 --- a/src/cpp/debug.cpp +++ b/src/cpp/debug.cpp @@ -23,8 +23,6 @@ void write_debug_information(const int step, const size_t num_particles, + "step_" + std::to_string(step), std::ios::out | std::ios::trunc); - int hola = contacts_size; - ++hola; // Write the header file. That is, columns for each data structure. write_header(step, debug_file); From a08a31b6676570b78c893eff01801b2076643b62 Mon Sep 17 00:00:00 2001 From: Hamilton Tobon Date: Sun, 29 Sep 2019 21:45:05 -0500 Subject: [PATCH 2/2] Starting with openacc --- Makefile | 7 +++++++ src/c/functions.c | 3 ++- src/cpp/main.cpp | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c2479af..8e05d26 100644 --- a/Makefile +++ b/Makefile @@ -22,10 +22,12 @@ LDFLAGS = -lm $(EXTRA_LDFLAGS) RM = rm -rf MKDIR = mkdir -p +# Final binary dependencies. COMMON_OBJECT_FILES = $(BUILD_DIR)/config.o $(BUILD_DIR)/csv.o $(BUILD_DIR)/functions.o $(BUILD_DIR)/initialization.o $(BUILD_DIR)/main.o EXTRA_OBJECT_FILES = OBJECT_FILES = $(COMMON_OBJECT_FILES) $(EXTRA_OBJECT_FILES) +# main.cpp dependencies. COMMON_MAIN_DEPENDENCIES = $(SRC_CXX_DIR)/main.cpp $(INC_DIR)/config.h $(INC_DIR)/csv.h $(INC_DIR)/data.h $(INC_DIR)/functions.h $(INC_DIR)/initialization.h EXTRA_MAIN_DEPENDENCIES = MAIN_O_DEPENDENCIES = $(COMMON_MAIN_DEPENDENCIES) $(EXTRA_MAIN_DEPENDENCIES) @@ -45,6 +47,11 @@ ifdef PROFILING EXTRA_LDFLAGS = -lprofiler endif +# If compiling with OpenACC directives +ifdef OPENACC +EXTRA_FLAGS += -fopenacc +endif + ############################################################################### # Main program compilation diff --git a/src/c/functions.c b/src/c/functions.c index 4ce790a..ef5e151 100644 --- a/src/c/functions.c +++ b/src/c/functions.c @@ -54,6 +54,7 @@ inline void compute_acceleration(const size_t particle_index, inline void apply_gravity(const size_t size, const ParticleProperties *particles_properties, Vector *forces) { +#pragma acc parallel loop vector for (size_t i = 0; i < size; ++i) { forces[i].y_component -= (particles_properties[i].mass * 9.81d); } @@ -112,7 +113,7 @@ inline void compute_forces(const double dt, const size_t particles_size, const ParticleProperties *properties, const Contact *contacts, const Vector *velocities, double *normal_forces, double *tangent_forces, Vector *forces) { - +#pragma acc parallel loop vector for (size_t i = 0; i < contacts_size; ++i) { const size_t p1_idx = contacts[i].p1_idx; const size_t p2_idx = contacts[i].p2_idx; diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 66d1164..b8648cd 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -58,6 +58,7 @@ void simulation_step(const size_t particles_size, const double dt) { compute_forces(dt, particles_size, contacts_size, particles, properties, contacts_buffer, velocities, normal_forces, tangent_forces, forces); +#pragma acc parallel loop vector for (size_t part = 0; part < particles_size; ++part) { compute_acceleration(part, properties, forces, accelerations); compute_velocity(dt, part, accelerations, velocities); @@ -139,6 +140,11 @@ int main(int argc, char *argv[]) { } #endif +#pragma acc data copyin(particles[0:num_particles], properties[0:num_particles], \ + contacts_buffer[0:size_triangular_matrix(num_particles)], \ + normal_forces[0:num_particles], tangent_forces[0:num_particles], \ + forces[0:num_particles], accelerations[0:num_particles], \ + velocities[0:num_particles], displacements[0:num_particles]) for (unsigned long step = 1; step <= max_steps; ++step) { #ifdef DEBUG_STEP current_step = step;