Skip to content

Commit 470e321

Browse files
committed
Added some grb::wait to make nonblocking work
1 parent e9766fc commit 470e321

1 file changed

Lines changed: 13 additions & 9 deletions

File tree

include/graphblas/algorithms/simulated_annealing_re.hpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)