results_cilk.hpp 683 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef RESULTS_CILK
  2. #define RESULTS_CILK
  3. #include <cilk/cilk.h>
  4. #include <cilk/reducer.h>
  5. #include "results.hpp"
  6. class ResultsReducer{
  7. private:
  8. struct Monoid:cilk::monoid_base<Results>{
  9. static void reduce(Results* left,Results* right);
  10. };
  11. cilk::reducer<Monoid> imp_;
  12. public:
  13. ResultsReducer();
  14. void reset();
  15. Results& get_results();
  16. };
  17. extern ResultsReducer cilk_results;
  18. inline
  19. ResultsReducer::ResultsReducer():imp_(){
  20. }
  21. inline void
  22. ResultsReducer::reset(){
  23. imp_.view().clear();
  24. }
  25. inline void
  26. ResultsReducer::Monoid::reduce(Results* left,Results* right){
  27. left->add(*right);
  28. }
  29. inline Results&
  30. ResultsReducer::get_results(){
  31. return imp_.view();
  32. }
  33. #endif