diff --git a/baselines/pfsp/lib/Auxiliary.c b/baselines/commons/util.c similarity index 98% rename from baselines/pfsp/lib/Auxiliary.c rename to baselines/commons/util.c index 8c06e3e8acdc102a094a595a924d7a8be766f4d9..5ff388cb4aa709bf02afbe114f3f0e4c49f9cf2b 100644 --- a/baselines/pfsp/lib/Auxiliary.c +++ b/baselines/commons/util.c @@ -1,4 +1,4 @@ -#include "Auxiliary.h" +#include "util.h" // Function to check if all elements in an array of atomic bool are IDLE static bool _allIdle(_Atomic bool arr[], int size) { diff --git a/baselines/commons/util.h b/baselines/commons/util.h index 19c69d374903070b88d890503080f43df8a717b0..8e39a0c87e106c7e37f1e977bad9541f012c703a 100644 --- a/baselines/commons/util.h +++ b/baselines/commons/util.h @@ -1,8 +1,17 @@ #ifndef UTIL_H #define UTIL_H +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdatomic.h> +#include <stdbool.h> #include <stdint.h> +#define BUSY false +#define IDLE true + inline void swap_uint8(uint8_t* a, uint8_t* b) { uint8_t tmp = *b; @@ -17,4 +26,14 @@ inline void swap_int(int* a, int* b) *a = tmp; } +bool allIdle(_Atomic bool arr[], int size, _Atomic bool *flag); + +void permute(int* arr, int n); + +int findMin(int arr[], int size); + +#ifdef __cplusplus +} +#endif + #endif // UTIL_H diff --git a/baselines/nqueens/makefile b/baselines/nqueens/makefile index 3b067145344eb293e58828ab815af78a1a4f168b..2aac5918826f1fd8119e69847511066ca7f4f899 100644 --- a/baselines/nqueens/makefile +++ b/baselines/nqueens/makefile @@ -12,6 +12,7 @@ CUDA_COMMON_OPTS := $(C_COMMON_OPTS) -arch=sm_70 HIP_COMMON_OPTS := $(C_COMMON_OPTS) --offload-arch=gfx906 LIBPATH := lib +COMMONS_PATH := ../commons # Platform-specific flags and libraries ifeq ($(SYSTEM), g5k) @@ -37,6 +38,10 @@ all: nqueens_c.out nqueens_gpu_cuda.out nqueens_multigpu_cuda.out nqueens_gpu_hi $(LIBPATH)/%.o: $(LIBPATH)/%.c $(C_COMPILER) $(C_COMMON_OPTS) -c $< -o $@ +# Pattern rule for C common source files +$(COMMONS_PATH)/%.o: $(COMMONS_PATH)/%.c + $(C_COMPILER) $(C_COMMON_OPTS) -c $< -o $@ + # Build executable for sequential in C nqueens_c.out: nqueens_c.c $(LIBPATH)/NQueens_node.o $(LIBPATH)/Pool.o $(C_COMPILER) $(C_COMMON_OPTS) $^ -o $@ diff --git a/baselines/pfsp/lib/Auxiliary.h b/baselines/pfsp/lib/Auxiliary.h deleted file mode 100644 index 8f18dddb380b311e177f2a5077ced9b5b4a91773..0000000000000000000000000000000000000000 --- a/baselines/pfsp/lib/Auxiliary.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef AUXILIARY_H -#define AUXILIARY_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdbool.h> -#include <stdatomic.h> -#include <stdlib.h> - -#define BUSY false -#define IDLE true - -/****************************************************************************** -Auxiliary functions -******************************************************************************/ - -bool allIdle(_Atomic bool arr[], int size, _Atomic bool *flag); - -void permute(int* arr, int n); - -int findMin(int arr[], int size); - -#ifdef __cplusplus -} -#endif - -#endif // AUXILIARY_H diff --git a/baselines/pfsp/makefile b/baselines/pfsp/makefile index 449c31f2defcea0f0923e2800a1cd96d6c60ca45..a74a994c6004fd1b8801064abc2ed22196815552 100644 --- a/baselines/pfsp/makefile +++ b/baselines/pfsp/makefile @@ -13,6 +13,7 @@ CUDA_COMMON_OPTS := -O3 -arch=sm_86 # TODO: adapt SM automatically, if possible HIP_COMMON_OPTS := $(C_COMMON_OPTS) --offload-arch=gfx906 LIBPATH := lib +COMMONS_PATH := ../commons # Platform-specific flags and libraries ifeq ($(SYSTEM), g5k) @@ -48,6 +49,10 @@ all: $(EXECUTABLES) $(LIBPATH)/%.o: $(LIBPATH)/%.c $(C_COMPILER) $(C_COMMON_OPTS) -c $< -o $@ +# Pattern rule for C common source files +$(COMMONS_PATH)/%.o: $(COMMONS_PATH)/%.c + $(C_COMPILER) $(C_COMMON_OPTS) -c $< -o $@ + # Pattern rule for CUDA library source files $(LIBPATH)/%.o: $(LIBPATH)/%.cu $(CUDA_COMPILER) $(CUDA_COMMON_OPTS) -c $< -o $@ @@ -61,11 +66,11 @@ pfsp_gpu_cuda.out: pfsp_gpu_cuda.c $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_si $(C_COMPILER) $(C_COMMON_OPTS) $^ -o $@ -lm -lcudart $(CUDA_INCLUDE) $(CUDA_LIB) # Build executable for multi-GPU in C+OpenMP+CUDA -pfsp_multigpu_cuda.out: pfsp_multigpu_cuda.c $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_simple.o $(LIBPATH)/c_bound_johnson.o $(LIBPATH)/evaluate.o $(LIBPATH)/PFSP_node.o $(LIBPATH)/Pool_ext.o $(LIBPATH)/Auxiliary.o +pfsp_multigpu_cuda.out: pfsp_multigpu_cuda.c $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_simple.o $(LIBPATH)/c_bound_johnson.o $(LIBPATH)/evaluate.o $(LIBPATH)/PFSP_node.o $(LIBPATH)/Pool_ext.o $(COMMONS_PATH)/util.o $(C_COMPILER) $(C_COMMON_OPTS) -fopenmp $^ -o $@ -lm -lcudart $(CUDA_INCLUDE) $(CUDA_LIB) # Build executable for distributed multi-GPU in C+MPI+OpenMP+CUDA -pfsp_dist_multigpu_cuda.out: pfsp_dist_multigpu_cuda.c $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_simple.o $(LIBPATH)/c_bound_johnson.o $(LIBPATH)/evaluate.o $(LIBPATH)/PFSP_node.o $(LIBPATH)/Pool_ext.o $(LIBPATH)/Auxiliary.o +pfsp_dist_multigpu_cuda.out: pfsp_dist_multigpu_cuda.c $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_simple.o $(LIBPATH)/c_bound_johnson.o $(LIBPATH)/evaluate.o $(LIBPATH)/PFSP_node.o $(LIBPATH)/Pool_ext.o $(COMMONS_PATH)/util.o $(MPI_COMPILER) $(C_COMMON_OPTS) -fopenmp $^ -o $@ -lm -lcudart $(CUDA_INCLUDE) $(CUDA_LIB) $(LIBPATH)/evaluate_hip.o: $(LIBPATH)/evaluate.cu @@ -87,7 +92,7 @@ pfsp_multigpu_hip.o: pfsp_multigpu_cuda.c hipify-perl $< > $<.hip $(HIP_COMPILER) $(HIP_COMMON_OPTS) -fopenmp -c $<.hip -o $@ -pfsp_multigpu_hip.out: pfsp_multigpu_hip.o $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_simple.o $(LIBPATH)/c_bound_johnson.o $(LIBPATH)/PFSP_node.o $(LIBPATH)/Pool_ext.o $(LIBPATH)/Auxiliary.o $(LIBPATH)/evaluate_hip.o +pfsp_multigpu_hip.out: pfsp_multigpu_hip.o $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_simple.o $(LIBPATH)/c_bound_johnson.o $(LIBPATH)/PFSP_node.o $(LIBPATH)/Pool_ext.o $(COMMONS_PATH)/util.o $(LIBPATH)/evaluate_hip.o $(HIP_COMPILER) $(HIP_COMMON_OPTS) -fopenmp $^ -o $@ # Build executable for distributed multi-GPU in C+MPI+OpenMP+HIP @@ -95,11 +100,11 @@ pfsp_dist_multigpu_hip.o: pfsp_dist_multigpu_cuda.c hipify-perl $< > $<.hip $(HIP_COMPILER) $(HIP_COMMON_OPTS) $(MPI_INCLUDE) $(MPI_LIB) -fopenmp -c $<.hip -o $@ -pfsp_dist_multigpu_hip.out: pfsp_dist_multigpu_hip.o $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_simple.o $(LIBPATH)/c_bound_johnson.o $(LIBPATH)/PFSP_node.o $(LIBPATH)/Pool_ext.o $(LIBPATH)/Auxiliary.o $(LIBPATH)/evaluate_hip.o +pfsp_dist_multigpu_hip.out: pfsp_dist_multigpu_hip.o $(LIBPATH)/c_taillard.o $(LIBPATH)/c_bound_simple.o $(LIBPATH)/c_bound_johnson.o $(LIBPATH)/PFSP_node.o $(LIBPATH)/Pool_ext.o $(COMMONS_PATH)/util.o $(LIBPATH)/evaluate_hip.o $(HIP_COMPILER) $(HIP_COMMON_OPTS) $(MPI_INCLUDE) $(MPI_LIB) -lmpi_cxx -lmpi -lopen-pal -fopenmp $^ -o $@ # Utilities .PHONY: clean clean: - rm -f *.out *.o *.hip $(LIBPATH)/*.o $(LIBPATH)/*.hip + rm -f *.out *.o *.hip $(LIBPATH)/*.o $(LIBPATH)/*.hip $(COMMONS_PATH)/*.o diff --git a/baselines/pfsp/pfsp_dist_multigpu_cuda.c b/baselines/pfsp/pfsp_dist_multigpu_cuda.c index 68a0c3520165336db969830cb62ead1aacf7396a..aebaf1ecb4a16bf6f3848ef327731b0345a59624 100644 --- a/baselines/pfsp/pfsp_dist_multigpu_cuda.c +++ b/baselines/pfsp/pfsp_dist_multigpu_cuda.c @@ -23,7 +23,6 @@ #include "lib/c_taillard.h" #include "lib/evaluate.h" #include "lib/Pool_ext.h" -#include "lib/Auxiliary.h" /****************************************************************************** Create new MPI data type diff --git a/baselines/pfsp/pfsp_multigpu_cuda.c b/baselines/pfsp/pfsp_multigpu_cuda.c index 32810e2043fb957ad2b248d6c667dc551b51cd26..0fbcf914a19a82bbda43a0b0c8ccb6de309c1c3f 100644 --- a/baselines/pfsp/pfsp_multigpu_cuda.c +++ b/baselines/pfsp/pfsp_multigpu_cuda.c @@ -22,7 +22,6 @@ #include "lib/c_taillard.h" #include "lib/evaluate.h" #include "lib/Pool_ext.h" -#include "lib/Auxiliary.h" /****************************************************************************** CUDA error checking