|
|
@ -163,12 +163,11 @@ class ParallelDoOp : public framework::OperatorBase {
|
|
|
|
auto &place = places[place_idx];
|
|
|
|
auto &place = places[place_idx];
|
|
|
|
auto *cur_scope = sub_scopes[place_idx];
|
|
|
|
auto *cur_scope = sub_scopes[place_idx];
|
|
|
|
|
|
|
|
|
|
|
|
workers.emplace_back(
|
|
|
|
workers.emplace_back(framework::Async([program, cur_scope, place, block] {
|
|
|
|
framework::Async([program, cur_scope, place, block, place_idx] {
|
|
|
|
framework::Executor executor(place);
|
|
|
|
framework::Executor executor(place);
|
|
|
|
executor.Run(*program, cur_scope, block->ID(),
|
|
|
|
executor.Run(*program, cur_scope, block->ID(),
|
|
|
|
false /*create_local_scope*/);
|
|
|
|
false /*create_local_scope*/);
|
|
|
|
}));
|
|
|
|
}));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (auto &worker : workers) {
|
|
|
|
for (auto &worker : workers) {
|
|
|
|
worker.wait();
|
|
|
|
worker.wait();
|
|
|
@ -239,12 +238,11 @@ class ParallelDoGradOp : public framework::OperatorBase {
|
|
|
|
auto *cur_scope = sub_scopes[i];
|
|
|
|
auto *cur_scope = sub_scopes[i];
|
|
|
|
|
|
|
|
|
|
|
|
// execute
|
|
|
|
// execute
|
|
|
|
workers.emplace_back(
|
|
|
|
workers.emplace_back(framework::Async([program, cur_scope, place, block] {
|
|
|
|
framework::Async([program, cur_scope, place, block, i] {
|
|
|
|
framework::Executor executor(place);
|
|
|
|
framework::Executor executor(place);
|
|
|
|
executor.Run(*program, cur_scope, block->ID(),
|
|
|
|
executor.Run(*program, cur_scope, block->ID(),
|
|
|
|
false /*create_local_scope*/);
|
|
|
|
false /*create_local_scope*/);
|
|
|
|
}));
|
|
|
|
}));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (auto &worker : workers) {
|
|
|
|
for (auto &worker : workers) {
|
|
|
|
worker.wait();
|
|
|
|
worker.wait();
|
|
|
|