diff --git a/include/wassail/data/mpirun.hpp b/include/wassail/data/mpirun.hpp index 28b6592..f82fa09 100644 --- a/include/wassail/data/mpirun.hpp +++ b/include/wassail/data/mpirun.hpp @@ -9,8 +9,8 @@ #ifndef _WASSAIL_DATA_MPIRUN_HPP #define _WASSAIL_DATA_MPIRUN_HPP +#include #include -#include #include namespace wassail { @@ -32,7 +32,7 @@ namespace wassail { std::string hostfile; /*!< Path to file containing list of hosts */ - std::vector hostlist; /*!< List of hosts */ + std::list hostlist; /*!< List of hosts */ std::string mpirun_args; /*!< extra mpirun arguments */ @@ -82,7 +82,7 @@ namespace wassail { * \param[in] program MPI program to launch * \param[in] mpi_impl MPI implementation */ - mpirun(uint32_t num_procs, std::vector hostlist, + mpirun(uint32_t num_procs, std::list hostlist, std::string program, mpi_impl_t mpi_impl = mpi_impl_t::OPENMPI) : mpirun(num_procs, 0, hostlist, "", program, "", 60, mpi_impl) {}; @@ -112,7 +112,7 @@ namespace wassail { * \param[in] mpi_impl MPI implementation */ mpirun(uint32_t num_procs, uint32_t per_node, - std::vector hostlist, std::string mpirun_args, + std::list hostlist, std::string mpirun_args, std::string program, std::string program_args, uint8_t timeout, mpi_impl_t mpi_impl = mpi_impl_t::OPENMPI); diff --git a/include/wassail/data/osu_micro_benchmarks.hpp b/include/wassail/data/osu_micro_benchmarks.hpp index 7561de8..1c54c9e 100644 --- a/include/wassail/data/osu_micro_benchmarks.hpp +++ b/include/wassail/data/osu_micro_benchmarks.hpp @@ -73,8 +73,7 @@ namespace wassail { * \param[in] osu_benchmark OSU micro-benchmark to launch * \param[in] mpi_impl MPI implementation */ - osu_micro_benchmarks(uint32_t num_procs, - std::vector hostlist, + osu_micro_benchmarks(uint32_t num_procs, std::list hostlist, osu_benchmark_t osu_benchmark, mpi_impl_t mpi_impl = mpi_impl_t::OPENMPI) : osu_micro_benchmarks(num_procs, 0, hostlist, "", osu_benchmark, 60, @@ -107,7 +106,7 @@ namespace wassail { * \param[in] mpi_impl MPI implementation */ osu_micro_benchmarks(uint32_t num_procs, uint32_t per_node, - std::vector hostlist, + std::list hostlist, std::string mpirun_args, osu_benchmark_t osu_benchmark, uint8_t timeout, mpi_impl_t mpi_impl = mpi_impl_t::OPENMPI) diff --git a/src/data/mpirun.cpp b/src/data/mpirun.cpp index ebe3369..9a37aa1 100644 --- a/src/data/mpirun.cpp +++ b/src/data/mpirun.cpp @@ -8,10 +8,10 @@ #include "internal.hpp" #include +#include #include #include #include -#include #include namespace wassail { @@ -27,7 +27,7 @@ namespace wassail { } mpirun::mpirun(uint32_t num_procs, uint32_t per_node, - std::vector hostlist, std::string mpirun_args, + std::list hostlist, std::string mpirun_args, std::string program, std::string program_args, uint8_t timeout, mpi_impl_t mpi_impl) : mpi_impl(mpi_impl), hostlist(hostlist), mpirun_args(mpirun_args), @@ -65,7 +65,8 @@ namespace wassail { /* create comma separated list */ command += wassail::format( " -hosts {0}", - std::accumulate(hostlist.begin() + 1, hostlist.end(), hostlist[0], + std::accumulate(std::next(hostlist.begin()), hostlist.end(), + hostlist.front(), [](const std::string &a, std::string b) { return a + "," + b; })); @@ -105,7 +106,8 @@ namespace wassail { /* create comma separated list */ command += wassail::format( " -H {0}", - std::accumulate(hostlist.begin() + 1, hostlist.end(), hostlist[0], + std::accumulate(std::next(hostlist.begin()), hostlist.end(), + hostlist.front(), [](const std::string &a, std::string b) { return a + "," + b; })); @@ -153,7 +155,7 @@ namespace wassail { d.hostfile = j.value(json::json_pointer("/configuration/hostfile"), ""); d.hostlist = j.value(json::json_pointer("/configuration/hostlist"), - std::vector({})); + std::list({})); std::string mpi_impl = j.value(json::json_pointer("/configuration/mpi_impl"), ""); diff --git a/src/python/data.cpp b/src/python/data.cpp index f09657f..4ceddfc 100644 --- a/src/python/data.cpp +++ b/src/python/data.cpp @@ -68,10 +68,10 @@ void py_data(py::module &m) { .def(py::init()) .def(py::init()) .def(py::init()) - .def(py::init, std::string>()) + .def(py::init, std::string>()) .def(py::init()) - .def(py::init, std::string, + .def(py::init, std::string, std::string, std::string, uint8_t, wassail::data::mpirun::mpi_impl_t>()) .def("__str__", @@ -103,13 +103,13 @@ void py_data(py::module &m) { .def(py::init()) - .def(py::init, + .def(py::init, wassail::data::osu_micro_benchmarks::osu_benchmark_t, wassail::data::mpirun::mpi_impl_t>()) .def(py::init()) - .def(py::init, std::string, + .def(py::init, std::string, wassail::data::osu_micro_benchmarks::osu_benchmark_t, uint8_t, wassail::data::mpirun::mpi_impl_t>()) .def("__str__", diff --git a/test/data/test_mpirun.cpp b/test/data/test_mpirun.cpp index cc35715..c1425c9 100644 --- a/test/data/test_mpirun.cpp +++ b/test/data/test_mpirun.cpp @@ -9,9 +9,9 @@ #include "3rdparty/catch/catch.hpp" #include "3rdparty/catch/catch_reporter_automake.hpp" +#include #include #include -#include #include /* Some tests may fail if mpi is not setup */ @@ -50,8 +50,8 @@ TEST_CASE("mpirun hostfile usage") { } TEST_CASE("mpirun hostlist usage") { - auto d1 = wassail::data::mpirun( - 2, std::vector({"node1", "node2"}), "a.out"); + auto d1 = wassail::data::mpirun(2, std::list({"node1", "node2"}), + "a.out"); if (getuid() == 0 and d1.allow_run_as_root) { REQUIRE(d1.command == "mpirun -n 2 -H node1,node2 --allow-run-as-root -x " @@ -63,7 +63,7 @@ TEST_CASE("mpirun hostlist usage") { } auto d2 = - wassail::data::mpirun(2, std::vector({"node1", "node2"}), + wassail::data::mpirun(2, std::list({"node1", "node2"}), "a.out", wassail::data::mpirun::mpi_impl_t::MPICH); REQUIRE(d2.command == "MPIEXEC_TIMEOUT=60 mpirun -n 2 -hosts node1,node2 a.out");