00001 #define MPI_MODE 1
00002
00003 #include "artdaq/DAQdata/Globals.hh"
00004 #include "proto/TransferTest.hh"
00005 #include "fhiclcpp/make_ParameterSet.h"
00006 #include <mpi.h>
00007 #include <cstdlib>
00008
00009 #include <sys/types.h>
00010 #include <unistd.h>
00011
00012 int main(int argc, char* argv[])
00013 {
00014 artdaq::configureMessageFacility("transfer_driver_mpi");
00015 TLOG_ARB(TLVL_TRACE, "transfer_driver_mpi") << "BEGIN" << TLOG_ENDL;
00016 char envvar[] = "MV2_ENABLE_AFFINITY=0";
00017 if (putenv(envvar) != 0)
00018 {
00019 std::cerr << "Unable to set MV2_ENABLE_AFFINITY environment variable!";
00020 return 1;
00021 }
00022 auto const requested_threading = MPI_THREAD_SERIALIZED;
00023 int provided_threading = -1;
00024 auto rc = MPI_Init_thread(&argc, &argv, requested_threading, &provided_threading);
00025 assert(rc == 0);
00026 assert(requested_threading == provided_threading);
00027 TLOG_ARB(TLVL_TRACE, "transfer_driver_mpi") << "MPI_Init_thread rc=" << std::to_string(rc) << TLOG_ENDL;
00028 rc = MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
00029 assert(rc == 0);
00030 TLOG_ARB(TLVL_TRACE, "transfer_driver_mpi")<< "MPI_Comm_rank rc=" << std::to_string(rc) << TLOG_ENDL;
00031
00032
00033 if (my_rank == 0)
00034 {
00035 std::cout << "argc:" << argc << std::endl;
00036 for (int i = 0; i < argc; ++i)
00037 {
00038 std::cout << "argv[" << i << "]: " << argv[i] << std::endl;
00039 }
00040 }
00041
00042 if (argc != 2)
00043 {
00044 std::cerr << argv[0] << " requires 1 argument, " << argc - 1 << " provided\n";
00045 return 1;
00046 }
00047
00048 cet::filepath_lookup lookup_policy("FHICL_FILE_PATH");
00049 fhicl::ParameterSet ps;
00050
00051 auto fhicl = std::string(argv[1]);
00052 make_ParameterSet(fhicl, lookup_policy, ps);
00053
00054 artdaq::TransferTest theTest(ps,0);
00055
00056
00057
00058
00059
00060
00061
00062 theTest.runTest();
00063
00064 rc = MPI_Finalize();
00065 assert(rc == 0);
00066 TLOG_ARB(TLVL_TRACE, "transfer_driver_mpi") << "END" << TLOG_ENDL;
00067 return 0;
00068 }