message: add runtime mpi buffer switch to vector
diff: @@ -356,7 +356,7 @@ void Vector<ValueType>::compute_dot(const LinOp* b, LinOp* result,
  dense_res.get(), tmp);
  exec->synchronize();
  auto use_host_buffer = exec->get_master() != exec && !mpi::is_gpu_aware();
  - if (use_host_buffer) {
  + if (use_host_buffer || comm.force_host_buffer()) {
  host_reduction_buffer_.init(exec->get_master(), dense_res->get_size());
  host_reduction_buffer_->copy_from(dense_res.get());
  comm.all_reduce(exec->get_master(),
  @@ -391,7 +391,7 @@ void Vector<ValueType>::compute_conj_dot(const LinOp* b, LinOp* result,
  as<Vector>(b)->get_local_vector(), dense_res.get(), tmp);
  exec->synchronize();
  auto use_host_buffer = exec->get_master() != exec && !mpi::is_gpu_aware();
  - if (use_host_buffer) {
  + if (use_host_buffer || comm.force_host_buffer()) {
  host_reduction_buffer_.init(exec->get_master(), dense_res->get_size());
  host_reduction_buffer_->copy_from(dense_res.get());
  comm.all_reduce(exec->get_master(),
  @@ -425,7 +425,7 @@ void Vector<ValueType>::compute_norm2(LinOp* result, array<char>& tmp) const
  dense_res.get(), tmp));
  exec->synchronize();
  auto use_host_buffer = exec->get_master() != exec && !mpi::is_gpu_aware();
  - if (use_host_buffer) {
  + if (use_host_buffer || comm.force_host_buffer()) {
  host_norm_buffer_.init(exec->get_master(), dense_res->get_size());
  host_norm_buffer_->copy_from(dense_res.get());
  comm.all_reduce(exec->get_master(), host_norm_buffer_->get_values(),
  @@ -458,7 +458,7 @@ void Vector<ValueType>::compute_norm1(LinOp* result, array<char>& tmp) const
  this->get_local_vector()->compute_norm1(dense_res.get());
  exec->synchronize();
  auto use_host_buffer = exec->get_master() != exec && !mpi::is_gpu_aware();
  - if (use_host_buffer) {
  + if (use_host_buffer || comm.force_host_buffer()) {
  host_norm_buffer_.init(exec->get_master(), dense_res->get_size());
  host_norm_buffer_->copy_from(dense_res.get());
  comm.all_reduce(exec->get_master(), host_norm_buffer_->get_values(),
  