Chris, > Apologies that the sample I submitted was grossly inaccurate. I'll be more > thorough in the future with code samples (instead of shooting from the > hip). Thank you for the update - I've been using the official version > 1.0.0 with MPI parcelport. I'll be updating my runtime system build soon!
Thanks for this information. Please let us know if this solves your problem. Regards Hartmut --------------- http://boost-spirit.com http://stellar.cct.lsu.edu > > V/r, > Chris > > > On Tue, May 23, 2017 at 7:37 PM, Hartmut Kaiser <hartmut.kai...@gmail.com> > wrote: > > Ran into an issue where an HPX action that I've been executing under > > hpx::parallel::transform (in lieu of hpx::parallel::for_each) hangs on > the > > hpx::finalize() call. Are there any troubleshooting or debugging > > techniques that could be used to figure out how to resolve this issue? > I'm > > using 1.0.0. > > static void run(const size_t idx) { > > hpx::cout << idx << hpx::endl; > > } > > HPX_PLAIN_ACTION(run, run_action); > > int hpx_main(int argc, char **argv) { > > std::vector<size_t> idx_list; > > // fill idx_list with numbers to print ... > > > > std::vector< hpx::future<void> > futures; > > futures.reserve(idx_list.size()); > > hpx::parallel::transform( > > hpx::parallel::par, > > std::begin(idx_list), > > std::end(idx_list), > > [&localities, &distarr] (idx) { > > auto loc = localities[distarr.get_partition(idx)]; > > return hpx::async<run_action>(loc, idx); > > }); > > hpx::wait_all(futures); > > // printing debug statements after the hpx::wait_all demonstrate the > > hpx::wait_all has completed successfully > > > > hpx::finalize(); > > > > } > >From what I can see you actually never store the futures returned from > async<run_action>() in to the 'futures' vector. > > Also, I'm surprised this code even compiles as the lambda returns a > future<void> which transform will attempt to assign to the current element > (which is a size_t). > > I'd assume the actual code you're running looks like: > > int hpx_main(int argc, char **argv) { > std::vector<size_t> idx_list; > // fill idx_list with numbers to print ... > > std::vector< hpx::future<void> > futures(idx_list.size()); > futures.reserve(idx_list.size()); > > hpx::parallel::transform( > hpx::parallel::par, > std::begin(idx_list), > std::end(idx_list), > std::begin(futures), // <-- is this missing above? > [&localities, &distarr] (idx) { > auto loc = localities[distarr.get_partition(idx)]; > return hpx::async<run_action>(loc, idx); > }); > hpx::wait_all(futures); > > return hpx::finalize(); > } > > In which case I wouldn't see any problems with the code :/ Can you show me > the full code, please (feel free to send it to me privately, if you don't > want to share it on the list). > > Hold on - there is an idea. We just fixed a shutdown problem (hang) which > was occurring under certain circumstances (see https://github.com/STEllAR- > GROUP/hpx/commit/ab353f656a08f3426224b4e86fa9715a52afd8ec), that was about > 10 days ago. What version of HPX do you use? > > Regards Hartmut > --------------- > http://boost-spirit.com > http://stellar.cct.lsu.edu > > > _______________________________________________ > hpx-users mailing list > hpx-users@stellar.cct.lsu.edu > https://mail.cct.lsu.edu/mailman/listinfo/hpx-users _______________________________________________ hpx-users mailing list hpx-users@stellar.cct.lsu.edu https://mail.cct.lsu.edu/mailman/listinfo/hpx-users