188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
-
+
|
let world = SystemCommunicator::world();
let client = world.process_at_rank(rank);
while let Ok((msg, result_tx)) = rx.recv() {
// send evaluation point
send_msg(&client, &msg);
if let WorkerMsg::Update(_) = msg {
if let WorkerMsg::ApplyUpdate(_) = msg {
// no response expected
continue;
}
let result_tx = result_tx.unwrap();
// wait for response
|
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
|
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
|
-
+
|
.write()
.unwrap()
.compute_update(state, move |update| {
let update = Arc::new(update);
let world = SystemCommunicator::world();
for rank in 1..world.size() as usize {
client_txs[rank - 1]
.send((WorkerMsg::Update(update.clone()), None))
.send((WorkerMsg::ApplyUpdate(update.clone()), None))
.unwrap()
}
let mut problem = problem.write().unwrap();
problem.apply_update(&update)?;
problem.send_update(&update, WorkerUpdateSender(tx))?;
Ok(())
|