DARMA-tasking-internal / darma-frontend

Header library providing the frontend programming model for the DARMA asynchronous many-task model
Other
7 stars 0 forks source link

Error for capture of access handle collections within create_work_while #29

Closed fnrizzi closed 7 years ago

fnrizzi commented 7 years ago

attached file gives following error:

main.cc.zip

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1: DARMA assertion failed: 1: Expression should be true: false 1: Assertion details: 1: File: /Users/fnrizzi/Desktop/work/atdm/DARMAall/darmaInstDebug/cmake/../include/darma/impl/create_work_while.h 1: Line: 1038 1: DARMA encountered a failing piece of code that should be unreachable, most likely because an earlier error should have been thrown for the same reason. Something went wrong with While-Do capture 1: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1: Assertion failed: ((false) || (( DARMA_ASSERTION_BEGIN, std::cerr << "DARMA assertion failed:" << std::endl << " Expression should be true: " << "false" << std::endl << " Assertion details:" << std::endl << " File: " << FILE << std::endl << " Line: " << LINE << std::endl << " " << "DARMA encountered a failing piece of code that should be unreachable," << " most likely because an earlier error should have been thrown for the same reason. " "Something went wrong with While-Do capture" << std::endl, DARMA_ASSERTION_END ), false)), function do_capture, file /Users/fnrizzi/Desktop/work/atdm/DARMAall/darmaInstDebug/cmake/../include/darma/impl/create_work_while.h, line 1038. 1: ------------- Processor 0 Exiting: Caught Signal ------------

dhollman commented 7 years ago

Still working on a more general fix, but the reason you're seeing this behavior is that your classes have implicitly deleted move constructors. Whenever you define any user-defined constructor that isn't a move constructor, the move constructor gets deleted implicitly. You can fix this by adding

distVectorGhost(distVectorGhost const&) = default;
distVectorGhost(distVectorGhost&&) = default;

to the distVectorGhost class and the analogous thing for the distMatrix class. We should be able to interact long-term with non-move-constructible classes, but I'm still working on a way to do so.

fnrizzi commented 7 years ago

thanks David. so if i do that, it fixes it? the text i send you works like that ?

dhollman commented 7 years ago

yes. I ran it and it worked, although the text you sent me is an infinite loop, so I changed it to converged.set_value(true) inside the loop

fnrizzi commented 7 years ago

thanks for fixing it. i will test it now. I owe you a donut or something else :)