Skip to content

Commit

Permalink
Merge pull request #1948 from bradking/parallel-adios-serial-hdf5
Browse files Browse the repository at this point in the history
Allow building ADIOS with MPI using a serial HDF5
  • Loading branch information
Chuck Atkins authored Feb 13, 2020
2 parents 4cd6d90 + 5b2262d commit f391aa9
Show file tree
Hide file tree
Showing 16 changed files with 115 additions and 113 deletions.
14 changes: 3 additions & 11 deletions cmake/DetectOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -155,21 +155,13 @@ endif()
# HDF5
if(ADIOS2_USE_HDF5 STREQUAL AUTO)
find_package(HDF5 COMPONENTS C)
if(HDF5_FOUND AND
((ADIOS2_HAVE_MPI AND HDF5_IS_PARALLEL) OR
(NOT ADIOS2_HAVE_MPI AND NOT HDF5_IS_PARALLEL)))
if(HDF5_FOUND AND (NOT HDF5_IS_PARALLEL OR ADIOS2_HAVE_MPI))
set(ADIOS2_HAVE_HDF5 TRUE)
endif()
elseif(ADIOS2_USE_HDF5)
find_package(HDF5 REQUIRED COMPONENTS C)
if(ADIOS2_HAVE_MPI)
if(NOT HDF5_IS_PARALLEL)
message(FATAL_ERROR "MPI is enabled but serial HDF5 is detected.")
endif()
else()
if(HDF5_IS_PARALLEL)
message(FATAL_ERROR "MPI is disabled but parallel HDF5 is detected.")
endif()
if(HDF5_IS_PARALLEL AND NOT ADIOS2_HAVE_MPI)
message(FATAL_ERROR "MPI is disabled but parallel HDF5 is detected.")
endif()
set(ADIOS2_HAVE_HDF5 TRUE)
endif()
Expand Down
26 changes: 14 additions & 12 deletions examples/heatTransfer/write/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,20 @@ if(ADIOS2_HAVE_HDF5)
${HDF5_C_LIBRARIES} MPI::MPI_C ${CMAKE_THREAD_LIBS_INIT}
)

add_executable(heatTransfer_write_ph5
main.cpp
HeatTransfer.cpp
Settings.cpp
IO_ph5.cpp
)
target_include_directories(heatTransfer_write_ph5
PRIVATE ${HDF5_C_INCLUDE_DIRS}
)
target_link_libraries(heatTransfer_write_ph5
${HDF5_C_LIBRARIES} MPI::MPI_C ${CMAKE_THREAD_LIBS_INIT}
)
if(HDF5_IS_PARALLEL)
add_executable(heatTransfer_write_ph5
main.cpp
HeatTransfer.cpp
Settings.cpp
IO_ph5.cpp
)
target_include_directories(heatTransfer_write_ph5
PRIVATE ${HDF5_C_INCLUDE_DIRS}
)
target_link_libraries(heatTransfer_write_ph5
${HDF5_C_LIBRARIES} MPI::MPI_C ${CMAKE_THREAD_LIBS_INIT}
)
endif()

if(NOT (HDF5_VERSION VERSION_LESS 1.11))
add_executable(heatTransfer_write_h5mixer
Expand Down
3 changes: 2 additions & 1 deletion source/utils/adios_iotest/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ if(WIN32)
target_link_libraries(adios_iotest getopt)
endif()

if(ADIOS2_HAVE_HDF5)
if(ADIOS2_HAVE_HDF5 AND HDF5_IS_PARALLEL)
target_compile_definitions(adios_iotest PRIVATE ADIOS2_HAVE_HDF5_PARALLEL)
if(HDF5_C_INCLUDE_DIRS)
target_include_directories(adios_iotest PRIVATE ${HDF5_C_INCLUDE_DIRS})
else()
Expand Down
4 changes: 2 additions & 2 deletions source/utils/adios_iotest/ioGroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include "ioGroup.h"
#include "adios2/common/ADIOSConfig.h"

#ifdef ADIOS2_HAVE_HDF5
#ifdef ADIOS2_HAVE_HDF5_PARALLEL
#include "hdf5.h"
#endif

Expand All @@ -20,7 +20,7 @@ std::shared_ptr<ioGroup> createGroup(const std::string &name, IOLib iolib,
case IOLib::ADIOS:
gp = std::make_shared<adiosIOGroup>(name, adiosobj);
break;
#ifdef ADIOS2_HAVE_HDF5
#ifdef ADIOS2_HAVE_HDF5_PARALLEL
case IOLib::HDF5:
gp = std::make_shared<hdf5IOGroup>(name);
break;
Expand Down
6 changes: 3 additions & 3 deletions source/utils/adios_iotest/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ struct option options[] = {{"help", no_argument, NULL, 'h'},
{"strong-scaling", no_argument, NULL, 's'},
{"weak-scaling", no_argument, NULL, 'w'},
{"timer", no_argument, NULL, 't'},
#ifdef ADIOS2_HAVE_HDF5
#ifdef ADIOS2_HAVE_HDF5_PARALLEL
{"hdf5", no_argument, NULL, 'H'},
#endif
{NULL, 0, NULL, 0}};
Expand Down Expand Up @@ -53,7 +53,7 @@ void Settings::displayHelp()
<< " -s OR -w: strong or weak scaling. \n"
<< " Dimensions in config are treated accordingly\n"
<< " -x file ADIOS configuration XML file\n"
#ifdef ADIOS2_HAVE_HDF5
#ifdef ADIOS2_HAVE_HDF5_PARALLEL
<< " --hdf5 Use native Parallel HDF5 instead of ADIOS for I/O\n"
#endif
<< " -v increase verbosity\n"
Expand Down Expand Up @@ -105,7 +105,7 @@ int Settings::processArgs(int argc, char *argv[])
displayHelp();
}
return 1;
#ifdef ADIOS2_HAVE_HDF5
#ifdef ADIOS2_HAVE_HDF5_PARALLEL
case 'H':
iolib = IOLib::HDF5;
break;
Expand Down
2 changes: 1 addition & 1 deletion source/utils/adios_iotest/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
enum class IOLib
{
ADIOS
#ifdef ADIOS2_HAVE_HDF5
#ifdef ADIOS2_HAVE_HDF5_PARALLEL
,
HDF5
#endif
Expand Down
4 changes: 2 additions & 2 deletions source/utils/adios_iotest/stream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include "adiosStream.h"
#include "stream.h"

#ifdef ADIOS2_HAVE_HDF5
#ifdef ADIOS2_HAVE_HDF5_PARALLEL
#include "hdf5Stream.h"
#endif

Expand Down Expand Up @@ -65,7 +65,7 @@ std::shared_ptr<Stream> openStream(const std::string &streamName,
sp = std::make_shared<adiosStream>(s);
break;
}
#ifdef ADIOS2_HAVE_HDF5
#ifdef ADIOS2_HAVE_HDF5_PARALLEL
case IOLib::HDF5:
{
auto s = hdf5Stream(streamName, mode, comm);
Expand Down
2 changes: 1 addition & 1 deletion testing/adios2/engine/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ gtest_add_tests_helper(Common ${test_mpi} "" Engine. .File
EXTRA_ARGS "File" "1"
)

if(ADIOS2_HAVE_HDF5)
if(ADIOS2_HAVE_HDF5 AND HDF5_IS_PARALLEL)
gtest_add_tests_helper(Common ${test_mpi} "" Engine. .HDF5
EXTRA_ARGS "HDF5" "1"
)
Expand Down
17 changes: 12 additions & 5 deletions testing/adios2/engine/hdf5/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,25 @@
# accompanying file Copyright.txt for details.
#------------------------------------------------------------------------------#

gtest_add_tests_helper(WriteReadAsStream ${test_mpi} HDF5 Engine.HDF5. "")
gtest_add_tests_helper(StreamWriteReadHighLevelAPI ${test_mpi}
if(ADIOS2_HAVE_MPI AND HDF5_IS_PARALLEL)
set(hdf5_mpi TRUE)
add_definitions(-DTEST_HDF5_MPI)
else()
set(hdf5_mpi FALSE)
endif()

gtest_add_tests_helper(WriteReadAsStream ${hdf5_mpi} HDF5 Engine.HDF5. "")
gtest_add_tests_helper(StreamWriteReadHighLevelAPI ${hdf5_mpi}
HDF5 Engine.HDF5. ""
)
gtest_add_tests_helper(WriteReadAttributesADIOS2 ${test_mpi}
gtest_add_tests_helper(WriteReadAttributesADIOS2 ${hdf5_mpi}
HDF5 Engine.HDF5. ""
)
gtest_add_tests_helper(WriteMemorySelectionRead ${test_mpi}
gtest_add_tests_helper(WriteMemorySelectionRead ${hdf5_mpi}
HDF5 Engine.HDF5. ""
)

gtest_add_tests_helper(NativeHDF5WriteRead ${test_mpi} "" Engine.HDF5. "")
gtest_add_tests_helper(NativeHDF5WriteRead ${hdf5_mpi} "" Engine.HDF5. "")
if(HDF5_C_INCLUDE_DIRS)
target_include_directories(Test.Engine.HDF5.NativeHDF5WriteRead
PRIVATE ${HDF5_C_INCLUDE_DIRS}
Expand Down
24 changes: 12 additions & 12 deletions testing/adios2/engine/hdf5/TestHDF5StreamWriteReadHighLevelAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ TEST_F(StreamWriteReadHighLevelAPI_HDF5, ADIOS2H5writeRead1D8)
// Number of steps
const size_t NSteps = 3;

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Comm_rank(MPI_COMM_WORLD, &mpiRank);
MPI_Comm_size(MPI_COMM_WORLD, &mpiSize);
#endif

// write test data using H5
{
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::fstream oStream(fname, adios2::fstream::out, MPI_COMM_WORLD,
"HDF5");
#else
Expand Down Expand Up @@ -101,7 +101,7 @@ TEST_F(StreamWriteReadHighLevelAPI_HDF5, ADIOS2H5writeRead1D8)
adios2::fstream iStream;
EXPECT_FALSE(iStream);

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
iStream.open(fname, adios2::fstream::in, MPI_COMM_WORLD, "HDF5");
#else
iStream.open(fname, adios2::fstream::in, "HDF5");
Expand Down Expand Up @@ -272,14 +272,14 @@ TEST_F(StreamWriteReadHighLevelAPI_HDF5, ADIOS2H5writeRead2D2x4)
// Number of steps
const std::size_t NSteps = 3;

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Comm_rank(MPI_COMM_WORLD, &mpiRank);
MPI_Comm_size(MPI_COMM_WORLD, &mpiSize);
#endif

// write test data using ADIOS2
{
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::fstream oStream(fname, adios2::fstream::out, MPI_COMM_WORLD,
"HDF5");
#else
Expand Down Expand Up @@ -316,7 +316,7 @@ TEST_F(StreamWriteReadHighLevelAPI_HDF5, ADIOS2H5writeRead2D2x4)

// READ
{
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::fstream iStream(fname, adios2::fstream::in, MPI_COMM_WORLD,
"HDF5");
#else
Expand Down Expand Up @@ -391,14 +391,14 @@ TEST_F(StreamWriteReadHighLevelAPI_HDF5, ADIOS2H5writeRead2D4x2)
// Number of steps
const std::size_t NSteps = 3;

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Comm_rank(MPI_COMM_WORLD, &mpiRank);
MPI_Comm_size(MPI_COMM_WORLD, &mpiSize);
#endif

// write test data using ADIOS2
{
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::fstream oStream(fname, adios2::fstream::out, MPI_COMM_WORLD,
"HDF5");
#else
Expand Down Expand Up @@ -437,7 +437,7 @@ TEST_F(StreamWriteReadHighLevelAPI_HDF5, ADIOS2H5writeRead2D4x2)
}

{
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::fstream iStream(fname, adios2::fstream::in, MPI_COMM_WORLD,
"HDF5");
#else
Expand Down Expand Up @@ -501,7 +501,7 @@ TEST_F(StreamWriteReadHighLevelAPI_HDF5, DoubleOpenException)
const std::string fname("ADIOS2H5_hl_exception.h5");

{
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::fstream oStream(fname, adios2::fstream::out, MPI_COMM_WORLD,
"HDF5");
EXPECT_THROW(oStream.open("second", adios2::fstream::out,
Expand All @@ -519,15 +519,15 @@ TEST_F(StreamWriteReadHighLevelAPI_HDF5, DoubleOpenException)

int main(int argc, char **argv)
{
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Init(nullptr, nullptr);
#endif

int result;
::testing::InitGoogleTest(&argc, argv);
result = RUN_ALL_TESTS();

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Finalize();
#endif

Expand Down
22 changes: 11 additions & 11 deletions testing/adios2/engine/hdf5/TestHDF5WriteMemorySelectionRead.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,12 +249,12 @@ void HDF5Steps1D(const size_t ghostCells)
// Number of steps
const size_t NSteps = 3;

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Comm_rank(MPI_COMM_WORLD, &mpiRank);
MPI_Comm_size(MPI_COMM_WORLD, &mpiSize);
#endif

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::ADIOS adios(MPI_COMM_WORLD, adios2::DebugON);
#else
adios2::ADIOS adios(true);
Expand Down Expand Up @@ -331,7 +331,7 @@ void HDF5Steps1D(const size_t ghostCells)
}
h5Writer.Close();
}
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Barrier(MPI_COMM_WORLD);
#endif
// Reader
Expand Down Expand Up @@ -485,12 +485,12 @@ void HDF5Steps2D4x2(const size_t ghostCells)
// Number of steps
const size_t NSteps = 3;

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Comm_rank(MPI_COMM_WORLD, &mpiRank);
MPI_Comm_size(MPI_COMM_WORLD, &mpiSize);
#endif

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::ADIOS adios(MPI_COMM_WORLD, adios2::DebugON);
#else
adios2::ADIOS adios(true);
Expand Down Expand Up @@ -567,7 +567,7 @@ void HDF5Steps2D4x2(const size_t ghostCells)
}
h5Writer.Close();
}
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Barrier(MPI_COMM_WORLD);
#endif
// Reader
Expand Down Expand Up @@ -733,12 +733,12 @@ void HDF5Steps3D8x2x4(const size_t ghostCells)
// Number of steps
const size_t NSteps = 3;

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Comm_rank(MPI_COMM_WORLD, &mpiRank);
MPI_Comm_size(MPI_COMM_WORLD, &mpiSize);
#endif

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
adios2::ADIOS adios(MPI_COMM_WORLD, adios2::DebugON);
#else
adios2::ADIOS adios(true);
Expand Down Expand Up @@ -825,7 +825,7 @@ void HDF5Steps3D8x2x4(const size_t ghostCells)
}
h5Writer.Close();
}
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Barrier(MPI_COMM_WORLD);
#endif
// Reader
Expand Down Expand Up @@ -1042,7 +1042,7 @@ INSTANTIATE_TEST_CASE_P(ghostCells, HDF5WriteMemSelReadVector,

int main(int argc, char **argv)
{
#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Init(nullptr, nullptr);
#endif

Expand All @@ -1058,7 +1058,7 @@ int main(int argc, char **argv)

result = RUN_ALL_TESTS();

#ifdef ADIOS2_HAVE_MPI
#ifdef TEST_HDF5_MPI
MPI_Finalize();
#endif

Expand Down
Loading

0 comments on commit f391aa9

Please sign in to comment.