@@ -90,7 +90,9 @@ namespace grb {
9090 std::minstd_rand rng ( seed );
9191 std::exponential_distribution< EnergyType > rand ( 1.0 );
9292
93+ rc = rc ? rc : grb::wait ( energies, states[n_replicas - 1 ] );
9394 for ( size_t i = n_replicas - 1 ; i > 0 ; --i ){
95+ rc = rc ? rc : grb::wait ( states[i-1 ] );
9496 const EnergyType de = ( energies[ i ] - energies[ i-1 ]) * (betas[ i ] - betas[ i-1 ]);
9597
9698 if ( -rand ( rng ) < de ){
@@ -155,9 +157,11 @@ namespace grb {
155157 rng.seed ( seed + s );
156158 const EnergyType myrand = -rand ( rng );
157159
160+ rc = rc ? rc : grb::wait ( energies, states[n_replicas - 1 ] );
158161 for ( size_t si = nprocs ; rc == grb::SUCCESS && si > 0 ; --si ){
159162 if ( si == s + 1 ){
160163 for ( size_t i = n_replicas - 1 ; i > 0 ; --i ){
164+ rc = rc ? rc : grb::wait ( states[i-1 ] );
161165 const EnergyType de = ( energies[ i ] - energies[ i-1 ]) * (betas[ i ] - betas[ i-1 ]);
162166
163167 if ( -rand ( rng ) < de ){
@@ -333,12 +337,12 @@ namespace grb {
333337 for ( size_t j = 0 ; j < n_replicas ; ++j ){
334338
335339 energies[j] += sweep ( states[j], betas[j], sweep_data );
336- rc = rc ? rc : grb::wait< backend >(); // should be done with nonblocking backend, I guess
337-
340+
341+ rc = rc ? rc : grb::wait (energies);
338342 // update_best state and energy
339343 if ( energies[j] < best_energy ){
340344 best_energy = energies[j];
341- best_state = states[j];
345+ rc = rc ? rc : grb::set (best_state, states[j]) ;
342346 }
343347 } // n_replicas
344348
@@ -428,6 +432,7 @@ namespace grb {
428432 grb::RC rc = grb::SUCCESS;
429433 const size_t n = grb::nrows ( A );
430434 const size_t s = spmd<>::pid ();
435+ constexpr grb::Descriptor dense_descr = descr | grb::descriptors::dense;
431436 assert ( n == grb::ncols ( A ) ); // A needs to be square
432437 // assert( grb::is_symmetric( A ) );
433438 (void ) s;
@@ -461,12 +466,12 @@ namespace grb {
461466 for ( size_t i = 0 ; rc == grb::SUCCESS && i < n ; ++i ) {
462467 // find max of neighbors
463468 rc = rc ? rc : grb::set< descr >( frontier, static_cast < AType >( 0 ) );
464- rc = rc ? rc : grb::mxv< descr | grb::descriptors::dense >( frontier, A, w, maxTimesRing );
465- rc = rc ? rc : grb::foldl< descr | grb::descriptors::dense >( frontier, w, gtOp );
469+ rc = rc ? rc : grb::mxv< dense_descr >( frontier, A, w, maxTimesRing );
470+ rc = rc ? rc : grb::foldl< dense_descr >( frontier, w, gtOp );
466471
467472 // is there any new node?
468473 AType succ = static_cast < AType >( 0 );
469- rc = rc ? rc : grb::foldl< descr >( succ, frontier, addMonoid );
474+ rc = rc ? rc : grb::foldl< dense_descr >( succ, frontier, addMonoid );
470475 if ( succ <= 0 ){
471476 break ;
472477 }
@@ -676,7 +681,7 @@ namespace grb {
676681 auto sweep_data = std::tie (
677682 (const decltype (couplings)&) couplings,
678683 (const decltype (local_fields)&) local_fields,
679- (const decltype (masks)&) masks,
684+ (const decltype (masks)&) masks,
680685 h,
681686 rand,
682687 delta,
@@ -734,7 +739,7 @@ namespace grb {
734739#ifndef NDEBUG
735740 const grb::Vector< StateType, backend > old_state = state;
736741#endif
737- rc = rc ? rc : grb::wait< backend > ();
742+ rc = rc ? rc : grb::wait ();
738743 for (const auto &mask : masks ){
739744 // dn = (2*state_slice - 1) * h_slice
740745 rc = rc ? rc : grb::set< descr >( dn, mask, state );
@@ -785,7 +790,6 @@ namespace grb {
785790 // update h
786791 rc = rc ? rc : grb::mxv< descr >( h, couplings, delta, ring );
787792 }
788- rc = rc ? rc : grb::wait< backend >();
789793
790794#ifndef NDEBUG
791795 if ( rc != grb::SUCCESS ){
0 commit comments