Commit 88095d30 authored by absingh's avatar absingh
Browse files

Merge remote-tracking branch 'origin/master' into FD_solver

parents 5e408377 d298f274
Pipeline #3053 failed with stages
in 6 minutes and 3 seconds
......@@ -19,11 +19,15 @@ set(ENV{HDF5_ROOT} ${HDF5_ROOT})
set(OPENFPM_PDATA_DIR CACHE PATH "OpenFPM_pdata dirs")
set(PETSC_ROOT CACHE PATH "If compiling with linear algebra indicate the PETSC root directory")
set(ENV{PETSC_DIR} ${PETSC_ROOT})
set(HIP_ENABLE CACHE BOOL "Enable HIP compiler")
set(AMD_ARCH_COMPILE "gfx900" CACHE STRING "AMD gpu architecture used to compile kernels")
if (ENABLE_GPU)
set(CUDA_ON_CPU OFF)
enable_language(CUDA)
find_package(CUDA)
set(CUDA_ON_CPU OFF)
if (NOT HIP_ENABLE)
enable_language(CUDA)
find_package(CUDA)
endif()
endif()
set (CMAKE_CXX_STANDARD 14)
......@@ -41,6 +45,16 @@ find_package(MPI REQUIRED)
find_package(HDF5 REQUIRED)
find_package(TinyObjLoader)
find_package(PETSc)
find_package(HIP)
if(HIP_FOUND)
set(DEFINE_HIP_GPU "#define HIP_GPU")
set(DEFINE_CUDIFY_USE_HIP "#define CUDIFY_USE_HIP")
endif()
if(HIP_FOUND)
set(DEFINE_CUDA_GPU "#define CUDA_GPU")
endif()
if(CUDA_FOUND)
set(OPENFPM_INIT_FILE "initialize/initialize_wrapper_cuda.cu")
......
#! /bin/bash
workspace=$1
hostname=$(hostname)
branch=$3
......
......@@ -122,7 +122,10 @@ with_petsc
with_eigen
with_vcdevel
enable_gpu
enable_hip
enable_asan
enable_garbageinj
enable_garbageinjv
'
rm -rf build
......@@ -251,11 +254,25 @@ do
else
conf_options="$conf_options -DCMAKE_CUDA_HOST_COMPILER=$(which $CXX)"
fi
if [ x"$CXXCUDA" == x"" ]; then
conf_options="$conf_options"
else
conf_options="$conf_options -DCMAKE_CUDA_COMPILER=$(which $CXXCUDA)"
fi
conf_options="$conf_options -DENABLE_GPU=ON"
;;
hip)
conf_options="$conf_options -DHIP_ENABLE=ON"
;;
asan)
conf_options="$conf_options -DENABLE_ASAN=ON"
;;
garbageinj)
conf_options="$conf_options -DENABLE_GARBAGE_INJECTOR=ON"
;;
garbageinjv)
conf_options="$conf_options -DENABLE_VCLUSTER_GARBAGE_INJECTOR=ON"
;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
ac_unrecognized_sep=', '
;;
......@@ -573,6 +590,7 @@ cd build
## remove enerything
echo "Calling cmake ../. $conf_options"
printf "cmake ../. $conf_options" > cmake_build_options
rm ../error_code
DYLD_LIBRARY_PATH=$ld_lib_pathopt cmake ../. $conf_options
if [ $? != 0 ]; then
......@@ -601,6 +619,7 @@ clean:
install:
\$(MAKE) -C build \$@
script/install_parallel_debugger
pdata:
\$(MAKE) -C build \$@
......
......@@ -6,12 +6,41 @@ if (CUDA_ON_CPU)
add_definitions(-DCUDA_ON_CPU)
endif()
if (CUDA_FOUND OR CUDA_ON_CPU OR HIP_FOUND)
add_executable(io main.cpp
set(CUDA_SOURCES HDF5_wr/HDF5_writer_cuda.cu)
endif()
if ( HIP_ENABLE AND HIP_FOUND )
list(APPEND HIP_HIPCC_FLAGS ${CMAKE_CXX_FLAGS_DEBUG})
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
list(APPEND HIP_HIPCC_FLAGS -O0)
endif()
set(CMAKE_CXX_COMPILER ${HIP_HIPCC_EXECUTABLE})
list(APPEND HIP_HIPCC_FLAGS -D__NVCC__ -D__HIP__ -DCUDART_VERSION=11000 -D__CUDACC__ -D__CUDACC_VER_MAJOR__=11 -D__CUDACC_VER_MINOR__=0 -D__CUDACC_VER_BUILD__=0)
set_source_files_properties(${CUDA_SOURCES} PROPERTIES LANGUAGE CXX)
hip_add_executable(io main.cpp
MetaParser/MetaParser_unit_test.cpp
${CUDA_SOURCES}
ObjReader/ObjReader_unit_test.cpp)
else()
add_executable(io main.cpp
MetaParser/MetaParser_unit_test.cpp
HDF5_wr/HDF5_writer_cuda.cu
${CUDA_SOURCES}
ObjReader/ObjReader_unit_test.cpp)
endif()
add_dependencies(io ofpmmemory)
add_dependencies(io vcluster)
......@@ -71,7 +100,7 @@ endif()
# will also build with -std=c++11
target_compile_features(io PUBLIC cxx_std_11)
target_link_libraries(io ${MPI_C_LIBRARIES})
target_link_libraries(io ${MPI_CXX_LIBRARIES})
if (TEST_COVERAGE)
target_link_libraries(io -lgcov)
endif()
......
......@@ -9,7 +9,7 @@
*
* @details Can be run in parallel.
*
* @author Justina Stark
* @author Justina Stark & Pietro Incardona
* @date November 2019 - August 2020
*/
#ifndef IMAGE_BASED_RECONSTRUCTION_GETINITIALGRID_HPP
......@@ -18,6 +18,7 @@
#include <iostream>
#include <typeinfo>
#include <cmath>
#include <sys/stat.h>
#include "Vector/vector_dist.hpp"
#include "Grid/grid_dist_id.hpp"
......@@ -26,6 +27,14 @@
#include "level_set/redistancing_Sussman/HelpFunctionsForGrid.hpp"
typedef signed char BYTE;
inline bool exists_test (const std::string& name) {
struct stat buffer;
return (stat (name.c_str(), &buffer) == 0);
}
/**@brief Read the number of pixels per dimension from a csv-file in order to create a grid with the same size.
*
* @param path_to_file Std::string containing the path to the csv file that holds the image/volume size in
......@@ -35,13 +44,15 @@ typedef signed char BYTE;
std::vector<size_t> get_size(const std::string & path_to_file)
{
std::vector<size_t> stack_dimst_1d;
// stream input csv file and error check
std::ifstream file(path_to_file);
if (!file)
{
std::cout << "Error opening file" << std::endl;
exit (EXIT_FAILURE);
// check if file exists and stream input csv file
if(!exists_test(path_to_file)){
std::cout << "------------------------------------------------------------------------" << std::endl;
std::cout << "Error: file " << path_to_file << " does not exist. Aborting..." << std::endl;
std::cout << "------------------------------------------------------------------------" << std::endl;
abort();
}
std::ifstream file(path_to_file);
// get its size
std::streampos fileSize;
......@@ -83,7 +94,14 @@ void load_pixel_onto_grid(grid_type & grid, std::string file_name, std::vector <
constexpr size_t x = 0;
constexpr size_t y = 1;
constexpr size_t z = 2;
// check if file exists and stream input file
if(!exists_test(file_name)){
std::cout << "------------------------------------------------------------------------" << std::endl;
std::cout << "Error: file " << file_name << " does not exist. Aborting..." << std::endl;
std::cout << "------------------------------------------------------------------------" << std::endl;
abort();
}
std::ifstream file_stream (file_name, std::ifstream::binary);
auto & v_cl = create_vcluster();
......@@ -121,17 +139,24 @@ void load_pixel_onto_grid(grid_type & grid, std::string file_name, std::vector <
auto key = dom.get();
auto gkey = grid.getGKey(key);
// In case a patch starts within a group of nodes to which same pixel-value should be assigned, get the
// respective rest-offset
size_t rest_offset = (size_t) (fmod(gkey.get(0), refinement[x])); // get the remainder
// get l as the length of one x-line of the original image stack for the specific patch on the processor
auto & gbox = grid.getLocalGridsInfo();
auto & DomBox = gbox.get(key.getSub()).Dbox;
int l = (size_t) std::round((DomBox.getHigh(0) - DomBox.getLow(0) + 1) / refinement[x]);
auto & gbox = grid.getLocalGridsInfo();
auto & DomBox = gbox.get(key.getSub()).Dbox;
size_t patch_size = DomBox.getHigh(0) - DomBox.getLow(0) + 1;
size_t l = (size_t) ceil( (patch_size + rest_offset) / refinement[x]);
// in case that the grid has a different resolution than the underlying image stack:
// create a key which is used to get the offset for the file reading
// the indices in this key are corrected by the refinement factor
for (size_t d = 0; d < grid_type::dims; d++)
{
gkey.set_d(d, std::round(gkey.get(d) / refinement[d]));
gkey.set_d(d, floor(gkey.get(d) / refinement[d]));
}
// the offset matches the pixel from the image stack to the corresponding current position of the iterator
......@@ -147,10 +172,13 @@ void load_pixel_onto_grid(grid_type & grid, std::string file_name, std::vector <
// run over a whole grid-line in x and assign pixel values from pixel_line to grid nodes
// if the grid is finer in x as the image stack, the same pixel value from pixel_line is
// assigned refinement[x] times
for (size_t i = 0; i < l * refinement[x]; i++)
for (size_t k = 0; k < patch_size; ++k)
{
auto key = dom.get();
grid.template get<Phi_0>(key) = (double) pixel_line[(size_t)floor(i / refinement[x])];
// get the correct index of the pixel to be read from pixel_line by considering a potential rest-offset,
// when the patch divides group of nodes that belong to the same pixel
size_t i = (size_t) floor((k + rest_offset) / refinement[x]);
grid.template get<Phi_0>(key) = (double) pixel_line[i];
++dom;
}
// now one grid line in x is finished and the iterator dom has advanced accordingly s.t. next loop continues
......
/* HIP GPU support */
${DEFINE_HIP_GPU}
/* HIP Cudify GPU support */
${DEFINE_CUDIFY_USE_HIP}
/* Coverty scan */
${DEFINE_COVERTY_SCAN}
......
......@@ -8,7 +8,6 @@
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
// initialization function:
bool init_unit_test()
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment