It's typically going to perform better if you can find a way to use `call<async>` rather than a blocking `call`, as it saves having to do the return message and thread wakeup. You could potentially do your update to `complete_addr` using `delegate::write<async>` from inside the above `call`.

Even better, you could put a copy of `complete` on each core and update that local copy, then do a `reduce` over all the copies of `complete` to see if any of them were set to false in the iteration. Right now, you're going to be sending a lot of messages just to keep setting that variable to `false` over and over. This reduction would like something like this:

```cpp
bool local_complete;
void sssp() {
  /*...*/
  while (!complete) {
    forall(g, [](SSPVertex& v) {
      /*...*/
      if (sum < ve->dist){ ve->dist = sum; local_complete = false; }
      /*...*/
    });
    complete = reduce<bool,collective_and>(&local_complete);
  }
  /*...*/
}
```

`demos/graph/bfs_spmd` uses a similar idiom. The plan is to be able to associate a kind of "reduction" object with `forall` to make this whole thing a bit more automatic (and modular -- not using static globals like `local_complete`), but for now this is what I'd do.