Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow building ADIOS with MPI using a serial HDF5 #1948

Merged
merged 4 commits into from
Feb 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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