diff --git a/paddle/fluid/framework/attribute.h b/paddle/fluid/framework/attribute.h index 56a4030be3..21bb39b043 100644 --- a/paddle/fluid/framework/attribute.h +++ b/paddle/fluid/framework/attribute.h @@ -60,10 +60,10 @@ struct ExtractAttribute { bool* operator()(Attribute& attr) const { if (attr.type() == typeid(int)) { // NOLINT - int val = boost::get(attr); + int val = BOOST_GET_CONST(int, attr); attr = static_cast(val); } else if (attr.type() == typeid(float)) { // NOLINT - float val = boost::get(attr); + float val = BOOST_GET_CONST(float, attr); attr = static_cast(val); } bool* attr_value = nullptr; @@ -86,10 +86,10 @@ struct ExtractAttribute { int64_t* operator()(Attribute& attr) const { if (attr.type() == typeid(int)) { // NOLINT - int val = boost::get(attr); + int val = BOOST_GET_CONST(int, attr); attr = static_cast(val); } else if (attr.type() == typeid(float)) { // NOLINT - int val = boost::get(attr); + int val = BOOST_GET_CONST(float, attr); attr = static_cast(val); } int64_t* attr_value = nullptr; @@ -112,11 +112,11 @@ struct ExtractAttribute> { std::vector* operator()(Attribute& attr) const { if (attr.type() == typeid(std::vector)) { // NOLINT - std::vector val = boost::get>(attr); + std::vector val = BOOST_GET_CONST(std::vector, attr); std::vector vec(val.begin(), val.end()); attr = vec; } else if (attr.type() == typeid(std::vector)) { // NOLINT - std::vector val = boost::get>(attr); + std::vector val = BOOST_GET_CONST(std::vector, attr); std::vector vec(val.begin(), val.end()); attr = vec; } @@ -140,10 +140,10 @@ struct ExtractAttribute { float* operator()(Attribute& attr) const { if (attr.type() == typeid(int)) { // NOLINT - int val = boost::get(attr); + int val = BOOST_GET_CONST(int, attr); attr = static_cast(val); } else if (attr.type() == typeid(int64_t)) { // NOLINT - int64_t val = boost::get(attr); + int64_t val = BOOST_GET_CONST(int64_t, attr); attr = static_cast(val); } float* attr_value = nullptr; diff --git a/paddle/fluid/framework/details/all_reduce_op_handle.cc b/paddle/fluid/framework/details/all_reduce_op_handle.cc index 1882bd73ad..b279d9ce9a 100644 --- a/paddle/fluid/framework/details/all_reduce_op_handle.cc +++ b/paddle/fluid/framework/details/all_reduce_op_handle.cc @@ -182,7 +182,7 @@ void AllReduceOpHandle::NCCLAllReduceFunc( void AllReduceOpHandle::SyncNCCLAllReduce() { if (FLAGS_sync_nccl_allreduce) { for (auto &p : places_) { - int dev_id = boost::get(p).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, p).device; auto *nccl_ctxs = nccl_ctxs_->GetRunEnvNCCLCtx(run_order_, use_hierarchical_allreduce_); auto &nccl_ctx = nccl_ctxs->at(dev_id); diff --git a/paddle/fluid/framework/details/async_ssa_graph_executor.cc b/paddle/fluid/framework/details/async_ssa_graph_executor.cc index 9511db9068..9615347d54 100644 --- a/paddle/fluid/framework/details/async_ssa_graph_executor.cc +++ b/paddle/fluid/framework/details/async_ssa_graph_executor.cc @@ -54,21 +54,22 @@ void ProcessGraph(std::vector graphs, Scope *scope) { if (node && node->IsOp()) { if (node->Name() == "send") { auto send_var_name = node->Op()->Input("X")[0]; - auto send_varnames = boost::get>( - node->Op()->GetNullableAttr("send_varnames")); - auto epmap = boost::get>( - node->Op()->GetNullableAttr("epmap")); - auto height_section = boost::get>( - node->Op()->GetNullableAttr("sections")); + auto send_varnames = + BOOST_GET_CONST(std::vector, + node->Op()->GetNullableAttr("send_varnames")); + auto epmap = BOOST_GET_CONST(std::vector, + node->Op()->GetNullableAttr("epmap")); + auto height_section = BOOST_GET_CONST( + std::vector, node->Op()->GetNullableAttr("sections")); auto trainer_id = - boost::get(node->Op()->GetNullableAttr("trainer_id")); + BOOST_GET_CONST(int, node->Op()->GetNullableAttr("trainer_id")); auto merge_add = - boost::get(node->Op()->GetNullableAttr("merge_add")); + BOOST_GET_CONST(bool, node->Op()->GetNullableAttr("merge_add")); if (!merge_add) { merge_add = FLAGS_communicator_is_sgd_optimizer; } - auto use_send_handler = - boost::get(node->Op()->GetNullableAttr("use_send_handler")); + auto use_send_handler = BOOST_GET_CONST( + bool, node->Op()->GetNullableAttr("use_send_handler")); send_varname_to_ctx[send_var_name] = operators::distributed::RpcContext( send_var_name, send_varnames, epmap, height_section, trainer_id, merge_add, use_send_handler); @@ -198,16 +199,16 @@ FetchResultType AsyncSSAGraphExecutor::Run( HandleException(); FetchList ret; - auto &val = boost::get(fetch_data); + auto &val = BOOST_GET(FetchList, fetch_data); for (size_t fetch_idx = 0; fetch_idx < fetch_tensors.size(); ++fetch_idx) { if (data_is_lod_tensor(val.at(fetch_idx))) { std::vector lodtensor_ptrs; - lodtensor_ptrs.push_back(&(boost::get(val.at(fetch_idx)))); + lodtensor_ptrs.push_back(&(BOOST_GET(LoDTensor, val.at(fetch_idx)))); LoDTensor var; var.MergeLoDTensor(lodtensor_ptrs, platform::CPUPlace()); ret.emplace_back(var); } else { - auto array = boost::get(val.at(fetch_idx)); + auto array = BOOST_GET(LoDTensorArray, val.at(fetch_idx)); LoDTensorArray item_array; item_array.reserve(array.size()); for (size_t i = 0; i < array.size(); ++i) { diff --git a/paddle/fluid/framework/details/broadcast_op_handle.cc b/paddle/fluid/framework/details/broadcast_op_handle.cc index b3c79b63ce..4c3b0a7c6a 100644 --- a/paddle/fluid/framework/details/broadcast_op_handle.cc +++ b/paddle/fluid/framework/details/broadcast_op_handle.cc @@ -75,7 +75,8 @@ void BroadcastOpHandle::BroadcastOneVar( } else { #if defined(PADDLE_WITH_NCCL) VarHandle *out_handle = nullptr; - int root_id = boost::get(in_tensor.place()).device; + int root_id = + BOOST_GET_CONST(platform::CUDAPlace, in_tensor.place()).device; std::vector> broadcast_calls; int type = platform::ToNCCLDataType(in_tensor.type()); @@ -86,7 +87,7 @@ void BroadcastOpHandle::BroadcastOneVar( ->FindVar(out_var_handle->name()); int dst_id = - boost::get(out_var_handle->place()).device; + BOOST_GET_CONST(platform::CUDAPlace, out_var_handle->place()).device; auto &nccl_ctx = nccl_ctxs_->at(dst_id); diff --git a/paddle/fluid/framework/details/eager_deletion_op_handle.cc b/paddle/fluid/framework/details/eager_deletion_op_handle.cc index 22dab44b22..7735f9720c 100644 --- a/paddle/fluid/framework/details/eager_deletion_op_handle.cc +++ b/paddle/fluid/framework/details/eager_deletion_op_handle.cc @@ -46,7 +46,7 @@ EagerDeletionOpHandle::EagerDeletionOpHandle( platform::DeviceContextPool::Instance().Get(place)); if (dynamic_cast(gc_)) { platform::CUDADeviceGuard guard( - boost::get(place).device); + BOOST_GET_CONST(platform::CUDAPlace, place).device); PADDLE_ENFORCE(cudaEventCreateWithFlags(&event_, cudaEventDisableTiming)); PADDLE_ENFORCE_NOT_NULL(event_); } @@ -62,7 +62,7 @@ EagerDeletionOpHandle::EagerDeletionOpHandle( EagerDeletionOpHandle::~EagerDeletionOpHandle() { #ifdef PADDLE_WITH_CUDA if (event_) { - auto gpu_place = boost::get(dev_ctx_->GetPlace()); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, dev_ctx_->GetPlace()); platform::CUDADeviceGuard guard(gpu_place.device); PADDLE_ENFORCE(cudaEventDestroy(event_)); } @@ -72,7 +72,7 @@ EagerDeletionOpHandle::~EagerDeletionOpHandle() { void EagerDeletionOpHandle::InitCUDA() { #ifdef PADDLE_WITH_CUDA int dev_id = - boost::get(dev_ctxes_.begin()->first).device; + BOOST_GET_CONST(platform::CUDAPlace, dev_ctxes_.begin()->first).device; events_[dev_id] = nullptr; #endif } diff --git a/paddle/fluid/framework/details/fetch_op_handle.cc b/paddle/fluid/framework/details/fetch_op_handle.cc index da93307801..0bd6a79b55 100644 --- a/paddle/fluid/framework/details/fetch_op_handle.cc +++ b/paddle/fluid/framework/details/fetch_op_handle.cc @@ -68,22 +68,22 @@ static void CheckDims(const framework::DDim &tensor_dims, void FetchOpHandle::WaitAndMergeCPUFetchVars() const { if (return_merged_) { if (data_is_lod_tensor(tensors_[0])) { - const auto &tensor_dims = boost::get(tensors_[0]).dims(); + const auto &tensor_dims = BOOST_GET_CONST(LoDTensor, tensors_[0]).dims(); for (size_t i = 1; i < tensors_.size(); i++) { - const auto &ele_dims = boost::get(tensors_[i]).dims(); + const auto &ele_dims = BOOST_GET_CONST(LoDTensor, tensors_[i]).dims(); CheckDims(tensor_dims, ele_dims, offset_); } std::vector tensors_ptr; tensors_ptr.reserve(tensors_.size()); for (auto &t : tensors_) { - tensors_ptr.emplace_back(&boost::get(t)); + tensors_ptr.emplace_back(&BOOST_GET_CONST(LoDTensor, t)); } - auto &val = boost::get(*data_); + auto &val = BOOST_GET(FetchList, *data_); LoDTensor var; var.MergeLoDTensor(tensors_ptr, platform::CPUPlace()); val.at(offset_) = std::move(var); } else { - auto &array = boost::get(tensors_[0]); + auto &array = BOOST_GET_CONST(LoDTensorArray, tensors_[0]); LoDTensorArray tmp_array; tmp_array.reserve(array.size()); for (size_t i = 0; i < array.size(); ++i) { @@ -92,7 +92,7 @@ void FetchOpHandle::WaitAndMergeCPUFetchVars() const { tensors_ptr.reserve(tensors_.size()); tensors_ptr.push_back(&array[i]); for (size_t j = 1; j < tensors_.size(); ++j) { - auto &element = boost::get(tensors_[j]); + auto &element = BOOST_GET_CONST(LoDTensorArray, tensors_[j]); const auto &ele_dims = element[i].dims(); CheckDims(tensor_dims, ele_dims, offset_); tensors_ptr.push_back(&element[i]); @@ -100,11 +100,11 @@ void FetchOpHandle::WaitAndMergeCPUFetchVars() const { tmp_array.emplace_back(); tmp_array.back().MergeLoDTensor(tensors_ptr, platform::CPUPlace()); } - auto &val = boost::get(*data_); + auto &val = BOOST_GET(FetchList, *data_); val.at(offset_) = std::move(tmp_array); } } else { - auto &val = boost::get(*data_); + auto &val = BOOST_GET(FetchUnmergedList, *data_); val.at(offset_) = std::move(tensors_); } } @@ -142,13 +142,13 @@ void FetchOpHandle::RunImpl() { if (var->IsType()) { auto &t = var->Get(); - auto &item = boost::get(tensors_[i]); + auto &item = BOOST_GET(LoDTensor, tensors_[i]); TransData(t, &item); } else { auto &t = var->Get(); LoDTensorArray tmp(t.size()); tensors_[i] = tmp; - auto &item = boost::get(tensors_[i]); + auto &item = BOOST_GET(LoDTensorArray, tensors_[i]); for (size_t j = 0; j < t.size(); ++j) { TransData(t[j], &item[j]); } diff --git a/paddle/fluid/framework/details/multi_devices_helper.h b/paddle/fluid/framework/details/multi_devices_helper.h index 4c344af09f..21e781877a 100644 --- a/paddle/fluid/framework/details/multi_devices_helper.h +++ b/paddle/fluid/framework/details/multi_devices_helper.h @@ -84,7 +84,7 @@ inline bool IsOpRole(const OpDesc &op, OpRole role) { const auto &attrs = op.GetAttrMap(); auto iter = attrs.find(OpProtoAndCheckerMaker::OpRoleAttrName()); if (iter == attrs.end()) return false; - return static_cast(boost::get(iter->second) & + return static_cast(BOOST_GET_CONST(int, iter->second) & static_cast(role)); } @@ -92,13 +92,13 @@ inline std::vector GetOpRoleVarsOrEmpty(const OpDesc &op) { const auto &attrs = op.GetAttrMap(); auto iter = attrs.find(OpProtoAndCheckerMaker::OpRoleVarAttrName()); if (iter == attrs.end()) return {}; - auto &ret = boost::get>(iter->second); + auto &ret = BOOST_GET_CONST(std::vector, iter->second); PADDLE_ENFORCE_EQ( ret.size() % 2, 0, platform::errors::InvalidArgument( "The size of attribute %s must be an even number, but got %d", OpProtoAndCheckerMaker::OpRoleVarAttrName(), ret.size())); - return boost::get>(iter->second); + return BOOST_GET_CONST(std::vector, iter->second); } bool IsDataParallelInferenceGraph(const ir::Graph &graph); diff --git a/paddle/fluid/framework/details/nan_inf_utils_detail.cu b/paddle/fluid/framework/details/nan_inf_utils_detail.cu index f9f91680e3..a46b4d0e5a 100644 --- a/paddle/fluid/framework/details/nan_inf_utils_detail.cu +++ b/paddle/fluid/framework/details/nan_inf_utils_detail.cu @@ -122,7 +122,7 @@ void TensorCheckerVisitor::apply( auto* dev_ctx = reinterpret_cast( platform::DeviceContextPool::Instance().Get(tensor_.place())); - int dev_id = boost::get(tensor_.place()).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, tensor_.place()).device; PADDLE_ENFORCE_EQ( (dev_id >= 0 && dev_id < multi_op_var2gpu_str_mutex().size()), true, platform::errors::OutOfRange("GPU dev_id must >=0 and < dev_count=%d", diff --git a/paddle/fluid/framework/details/nccl_op_handle.h b/paddle/fluid/framework/details/nccl_op_handle.h index 56dacccafa..2d4d4122a3 100644 --- a/paddle/fluid/framework/details/nccl_op_handle.h +++ b/paddle/fluid/framework/details/nccl_op_handle.h @@ -83,7 +83,7 @@ class NCCLOpHandleBase : public OpHandleBase { } for (auto& p : dev_ctxes_) { - int dev_id = boost::get(p.first).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, p.first).device; if (inter_events_.find(dev_id) != inter_events_.end()) { continue; } @@ -104,7 +104,7 @@ class NCCLOpHandleBase : public OpHandleBase { ncclRedOp_t op) { PADDLE_ENFORCE(run_order_ >= 0, "run_order must > 0"); auto flat_nccl_ctxs = nccl_ctxs_->GetFlatCtx(run_order_); - int dev_id = boost::get(place).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, place).device; auto& nccl_ctx = flat_nccl_ctxs->at(dev_id); auto stream = nccl_ctx.stream(); auto comm = nccl_ctx.comm_; @@ -146,7 +146,7 @@ class NCCLOpHandleBase : public OpHandleBase { void InterReduce(platform::Place place, const void* sendbuff, void* recvbuff, size_t count, ncclDataType_t datatype, ncclRedOp_t op) { auto nccl_ctxs = nccl_ctxs_->GetHierarchicalInterCtx(run_order_); - int dev_id = boost::get(place).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, place).device; auto& nccl_ctx = nccl_ctxs->at(dev_id); auto stream = nccl_ctx.stream(); auto comm = nccl_ctx.comm_; @@ -173,7 +173,7 @@ class NCCLOpHandleBase : public OpHandleBase { ncclRedOp_t op) { auto nccl_ctxs = nccl_ctxs_->GetHierarchicalExterCtx(run_order_); PADDLE_ENFORCE(nccl_ctxs_, "can't get exter %d nccl_ctxs", run_order_); - int dev_id = boost::get(place).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, place).device; auto& nccl_ctx = nccl_ctxs->at(dev_id); auto stream = nccl_ctx.stream(); auto comm = nccl_ctx.comm_; @@ -199,7 +199,7 @@ class NCCLOpHandleBase : public OpHandleBase { void InterBroadCast(platform::Place place, void* sendbuff, size_t count, ncclDataType_t datatype, ncclRedOp_t op) { auto nccl_ctxs = nccl_ctxs_->GetHierarchicalInterCtx(run_order_); - int dev_id = boost::get(place).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, place).device; auto& nccl_ctx = nccl_ctxs->at(dev_id); auto stream = nccl_ctx.stream(); auto comm = nccl_ctx.comm_; diff --git a/paddle/fluid/framework/details/op_handle_base.cc b/paddle/fluid/framework/details/op_handle_base.cc index ff8afa4442..39303447d2 100644 --- a/paddle/fluid/framework/details/op_handle_base.cc +++ b/paddle/fluid/framework/details/op_handle_base.cc @@ -45,7 +45,7 @@ OpHandleBase::~OpHandleBase() PADDLE_MAY_THROW { void OpHandleBase::InitCUDA() { #ifdef PADDLE_WITH_CUDA for (auto &p : dev_ctxes_) { - int dev_id = boost::get(p.first).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, p.first).device; PADDLE_ENFORCE(cudaSetDevice(dev_id)); PADDLE_ENFORCE( cudaEventCreateWithFlags(&events_[dev_id], cudaEventDisableTiming)); @@ -55,7 +55,8 @@ void OpHandleBase::InitCUDA() { auto *out_var_handle = dynamic_cast(out_var); if (out_var_handle) { int dev_id = - boost::get(out_var_handle->place()).device; + BOOST_GET_CONST(platform::CUDAPlace, out_var_handle->place()) + .device; out_var_handle->SetGenerateEvent(events_.at(dev_id)); } } @@ -63,7 +64,7 @@ void OpHandleBase::InitCUDA() { PADDLE_ENFORCE_EQ(dev_ctxes_.size(), 1UL, "%s should have only one dev_ctx.", Name()); auto &place = dev_ctxes_.begin()->first; - int dev_id = boost::get(place).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, place).device; for (auto &out_var : outputs_) { auto *out_var_handle = dynamic_cast(out_var); if (out_var_handle) { @@ -192,7 +193,7 @@ void OpHandleBase::RunAndRecordEvent(const std::function &callback) { #ifdef PADDLE_WITH_CUDA if (!events_.empty()) { // Use event for (auto &p : dev_ctxes_) { - auto dev_id = boost::get(p.first).device; + auto dev_id = BOOST_GET_CONST(platform::CUDAPlace, p.first).device; auto *cuda_dev_ctx = static_cast(p.second); VLOG(10) << "cudadevicecontext:" << cuda_dev_ctx << ", dev_id:" << dev_id; PADDLE_ENFORCE_CUDA_SUCCESS( @@ -210,8 +211,8 @@ void OpHandleBase::RunAndRecordEvent(platform::Place p, } else { auto *ctx = dev_ctxes_.at(p); auto *cuda_ctx = static_cast(ctx); - cuda_ctx->RecordEvent(events_.at(boost::get(p).device), - callback); + cuda_ctx->RecordEvent( + events_.at(BOOST_GET_CONST(platform::CUDAPlace, p).device), callback); } #else callback(); diff --git a/paddle/fluid/framework/details/parallel_ssa_graph_executor.cc b/paddle/fluid/framework/details/parallel_ssa_graph_executor.cc index dbc73048c5..e7d466c4af 100644 --- a/paddle/fluid/framework/details/parallel_ssa_graph_executor.cc +++ b/paddle/fluid/framework/details/parallel_ssa_graph_executor.cc @@ -43,7 +43,7 @@ static std::vector> SeparateMultiDevicesGraph( for (auto &op : op_handles) { auto &dev_ctx = op->DeviceContext(); auto &p = dev_ctx.begin()->first; - int dev_id = boost::get(p).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, p).device; auto &dev_dummys = graphs[dev_id]->Get(kGraphDepVars); graphs[dev_id]->AddNode(graph->RemoveNode(op->Node()).release()); @@ -256,13 +256,14 @@ FetchResultType ParallelSSAGraphExecutor::Run( if (!is_valid[scope_idx]) { continue; } - const auto &fetch_list = boost::get(fetch_data[scope_idx]); + const auto &fetch_list = + BOOST_GET_CONST(FetchList, fetch_data[scope_idx]); if (data_is_lod_tensor(fetch_list[fetch_idx])) { lodtensor_ptrs.push_back( - &(boost::get(fetch_list[fetch_idx]))); + &(BOOST_GET_CONST(LoDTensor, fetch_list[fetch_idx]))); } else { lodtensorarray_ptrs.push_back( - &(boost::get(fetch_list[fetch_idx]))); + &(BOOST_GET_CONST(LoDTensorArray, fetch_list[fetch_idx]))); } } if (lodtensor_ptrs.size() != 0) { @@ -295,7 +296,7 @@ FetchResultType ParallelSSAGraphExecutor::Run( continue; } const auto &fetch_list = - boost::get(fetch_data[scope_idx]); + BOOST_GET_CONST(FetchUnmergedList, fetch_data[scope_idx]); PADDLE_ENFORCE_EQ( fetch_list[fetch_idx].size(), 1, platform::errors::Fatal("Each place must have only one fetched " diff --git a/paddle/fluid/framework/details/reduce_op_handle.cc b/paddle/fluid/framework/details/reduce_op_handle.cc index 80c0cda505..d8f8cc994c 100644 --- a/paddle/fluid/framework/details/reduce_op_handle.cc +++ b/paddle/fluid/framework/details/reduce_op_handle.cc @@ -271,13 +271,13 @@ void ReduceOpHandle::RunImpl() { out_var_handle->place(), pre_in.type()); auto out_p = out_var_handle->place(); - int root_id = boost::get(out_p).device; + int root_id = BOOST_GET_CONST(platform::CUDAPlace, out_p).device; std::vector> all_reduce_calls; for (size_t i = 0; i < var_scopes.size(); ++i) { auto &p = in_places[i]; auto &lod_tensor = *lod_tensors[i]; - int dev_id = boost::get(p).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, p).device; auto &nccl_ctx = nccl_ctxs_->at(dev_id); void *buffer = const_cast(lod_tensor.data()); diff --git a/paddle/fluid/framework/details/scale_loss_grad_op_handle.cc b/paddle/fluid/framework/details/scale_loss_grad_op_handle.cc index 517dd5ee26..6e2f2327ab 100644 --- a/paddle/fluid/framework/details/scale_loss_grad_op_handle.cc +++ b/paddle/fluid/framework/details/scale_loss_grad_op_handle.cc @@ -54,7 +54,7 @@ struct ScaleLossGradFunctor { #ifdef PADDLE_WITH_CUDA OutT cast_coeff = static_cast(coeff_); auto stream = static_cast(ctx_)->stream(); - memory::Copy(boost::get(place_), out_data, + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, place_), out_data, platform::CPUPlace(), &cast_coeff, SizeOfType(out_dtype_), stream); VLOG(10) << place_ << "RUN Scale loss grad op"; diff --git a/paddle/fluid/framework/details/share_tensor_buffer_op_handle.cc b/paddle/fluid/framework/details/share_tensor_buffer_op_handle.cc index 01c4dc9733..f06507257f 100644 --- a/paddle/fluid/framework/details/share_tensor_buffer_op_handle.cc +++ b/paddle/fluid/framework/details/share_tensor_buffer_op_handle.cc @@ -66,7 +66,7 @@ void ShareTensorBufferOpHandle::AddReuseVarPair( void ShareTensorBufferOpHandle::InitCUDA() { #ifdef PADDLE_WITH_CUDA int dev_id = - boost::get(dev_ctxes_.begin()->first).device; + BOOST_GET_CONST(platform::CUDAPlace, dev_ctxes_.begin()->first).device; events_[dev_id] = nullptr; #endif } diff --git a/paddle/fluid/framework/details/sparse_all_reduce_op_handle.cc b/paddle/fluid/framework/details/sparse_all_reduce_op_handle.cc index a530c652fe..3f9af1c3a1 100644 --- a/paddle/fluid/framework/details/sparse_all_reduce_op_handle.cc +++ b/paddle/fluid/framework/details/sparse_all_reduce_op_handle.cc @@ -127,7 +127,7 @@ void SparseAllReduceOpHandle::RunImplEncoded() { PADDLE_ENFORCE(in_numel / 2 == static_cast(k)); out_numel = (out_numel == 0) ? static_cast(out.numel()) : out_numel; - int dev_id = boost::get(place).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, place).device; auto *nccl_ctxs = nccl_ctxs_->GetRunEnvNCCLCtx(run_order_, false); auto &nccl_ctx = nccl_ctxs->at(dev_id); auto stream = nccl_ctx.stream(); diff --git a/paddle/fluid/framework/dlpack_tensor_test.cc b/paddle/fluid/framework/dlpack_tensor_test.cc index 35afc7e5f4..4dead063b4 100644 --- a/paddle/fluid/framework/dlpack_tensor_test.cc +++ b/paddle/fluid/framework/dlpack_tensor_test.cc @@ -49,7 +49,7 @@ void TestMain(const platform::Place &place, uint16_t lanes) { CHECK_EQ(0, dl_tensor.ctx.device_id); } else if (platform::is_gpu_place(place)) { CHECK_EQ(kDLGPU, dl_tensor.ctx.device_type); - CHECK_EQ(boost::get(place).device, + CHECK_EQ(BOOST_GET_CONST(platform::CUDAPlace, place).device, dl_tensor.ctx.device_id); } else if (platform::is_cuda_pinned_place(place)) { CHECK_EQ(kDLCPUPinned, dl_tensor.ctx.device_type); diff --git a/paddle/fluid/framework/executor.cc b/paddle/fluid/framework/executor.cc index 93919f6a30..396c2d664f 100644 --- a/paddle/fluid/framework/executor.cc +++ b/paddle/fluid/framework/executor.cc @@ -452,15 +452,15 @@ void Executor::RunPartialPreparedContext(ExecutorPrepareContext* ctx, if (platform::is_gpu_place(place_)) { if (IsFastEagerDeletionModeEnabled()) { gc.reset(new UnsafeFastGPUGarbageCollector( - boost::get(place_), max_memory_size)); + BOOST_GET_CONST(platform::CUDAPlace, place_), max_memory_size)); } else { gc.reset(new DefaultStreamGarbageCollector( - boost::get(place_), max_memory_size)); + BOOST_GET_CONST(platform::CUDAPlace, place_), max_memory_size)); } } else if (platform::is_cpu_place(place_)) { #endif - gc.reset(new CPUGarbageCollector(boost::get(place_), - max_memory_size)); + gc.reset(new CPUGarbageCollector( + BOOST_GET_CONST(platform::CPUPlace, place_), max_memory_size)); #ifdef PADDLE_WITH_CUDA } #endif @@ -522,7 +522,7 @@ void Executor::RunPreparedContext( for (auto* op : global_block.AllOps()) { if (op->Type() == kFeedOpType) { std::string feed_target_name = op->Output("Out")[0]; - int idx = boost::get(op->GetAttr("col")); + int idx = BOOST_GET_CONST(int, op->GetAttr("col")); SetFeedVariable(scope, *(*feed_targets)[feed_target_name], feed_holder_name, idx); } @@ -534,7 +534,7 @@ void Executor::RunPreparedContext( for (auto* op : global_block.AllOps()) { if (op->Type() == kFetchOpType) { std::string fetch_target_name = op->Input("X")[0]; - int idx = boost::get(op->GetAttr("col")); + int idx = BOOST_GET_CONST(int, op->GetAttr("col")); *(*fetch_targets)[fetch_target_name] = GetFetchVariable(*scope, fetch_holder_name, idx); } diff --git a/paddle/fluid/framework/fleet/box_wrapper.cc b/paddle/fluid/framework/fleet/box_wrapper.cc index 344565da94..55512f124b 100644 --- a/paddle/fluid/framework/fleet/box_wrapper.cc +++ b/paddle/fluid/framework/fleet/box_wrapper.cc @@ -151,7 +151,7 @@ void BoxWrapper::PullSparse(const paddle::platform::Place& place, } else if (platform::is_gpu_place(place)) { #if defined(PADDLE_WITH_CUDA) && !defined(_WIN32) VLOG(3) << "Begin copy keys, key_num[" << total_length << "]"; - int device_id = boost::get(place).GetDeviceId(); + int device_id = BOOST_GET_CONST(platform::CUDAPlace, place).GetDeviceId(); LoDTensor& total_keys_tensor = keys_tensor[device_id]; uint64_t* total_keys = reinterpret_cast( total_keys_tensor.mutable_data({total_length, 1}, place)); @@ -224,7 +224,7 @@ void BoxWrapper::PushSparseGrad(const paddle::platform::Place& place, "Warning:: CPUPlace is not supported in PaddleBox now.")); } else if (platform::is_gpu_place(place)) { #if defined(PADDLE_WITH_CUDA) && !defined(_WIN32) - int device_id = boost::get(place).GetDeviceId(); + int device_id = BOOST_GET_CONST(platform::CUDAPlace, place).GetDeviceId(); LoDTensor& cached_total_keys_tensor = keys_tensor[device_id]; uint64_t* total_keys = reinterpret_cast(cached_total_keys_tensor.data()); @@ -236,7 +236,7 @@ void BoxWrapper::PushSparseGrad(const paddle::platform::Place& place, push_boxps_timer.Start(); int ret = boxps_ptr_->PushSparseGPU( total_keys, total_grad_values_gpu, static_cast(total_length), - boost::get(place).GetDeviceId()); + BOOST_GET_CONST(platform::CUDAPlace, place).GetDeviceId()); PADDLE_ENFORCE_EQ(ret, 0, platform::errors::PreconditionNotMet( "PushSparseGPU failed in BoxPS.")); push_boxps_timer.Pause(); diff --git a/paddle/fluid/framework/fleet/box_wrapper.cu b/paddle/fluid/framework/fleet/box_wrapper.cu index 420fbd1316..a24627c068 100644 --- a/paddle/fluid/framework/fleet/box_wrapper.cu +++ b/paddle/fluid/framework/fleet/box_wrapper.cu @@ -116,7 +116,7 @@ void BoxWrapper::CopyForPull(const paddle::platform::Place& place, const int64_t total_length) { auto stream = dynamic_cast( platform::DeviceContextPool::Instance().Get( - boost::get(place))) + BOOST_GET_CONST(platform::CUDAPlace, place))) ->stream(); auto buf_value = memory::AllocShared(place, values.size() * sizeof(float*)); float** gpu_values = reinterpret_cast(buf_value->ptr()); @@ -134,7 +134,7 @@ void BoxWrapper::CopyKeys(const paddle::platform::Place& place, const int64_t* gpu_len, int slot_num, int total_len) { auto stream = dynamic_cast( platform::DeviceContextPool::Instance().Get( - boost::get(place))) + BOOST_GET_CONST(platform::CUDAPlace, place))) ->stream(); CopyKeysKernel<<<(total_len + 512 - 1) / 512, 512, 0, stream>>>( origin_keys, total_keys, gpu_len, slot_num, total_len); @@ -149,7 +149,7 @@ void BoxWrapper::CopyForPush(const paddle::platform::Place& place, const int batch_size) { auto stream = dynamic_cast( platform::DeviceContextPool::Instance().Get( - boost::get(place))) + BOOST_GET_CONST(platform::CUDAPlace, place))) ->stream(); auto slot_lengths_lod = slot_lengths; for (int i = 1; i < slot_lengths_lod.size(); i++) { diff --git a/paddle/fluid/framework/garbage_collector.cc b/paddle/fluid/framework/garbage_collector.cc index f100dc6349..08c3e6d7f5 100644 --- a/paddle/fluid/framework/garbage_collector.cc +++ b/paddle/fluid/framework/garbage_collector.cc @@ -84,7 +84,7 @@ StreamGarbageCollector::StreamGarbageCollector(const platform::CUDAPlace &place, } StreamGarbageCollector::~StreamGarbageCollector() { - auto place = boost::get(this->dev_ctx_->GetPlace()); + auto place = BOOST_GET_CONST(platform::CUDAPlace, this->dev_ctx_->GetPlace()); platform::CUDADeviceGuard guard(place.device); PADDLE_ENFORCE(cudaStreamSynchronize(stream_)); PADDLE_ENFORCE(cudaStreamDestroy(stream_)); diff --git a/paddle/fluid/framework/grad_op_desc_maker.h b/paddle/fluid/framework/grad_op_desc_maker.h index 1c36baf046..368e4c1f90 100644 --- a/paddle/fluid/framework/grad_op_desc_maker.h +++ b/paddle/fluid/framework/grad_op_desc_maker.h @@ -161,7 +161,7 @@ class GradOpDescMakerBase { template inline const T& Attr(const std::string& name) const { - return boost::get(GetAttr(name)); + return BOOST_GET_CONST(T, GetAttr(name)); } std::string ForwardOpType() const { return this->fwd_op_.Type(); } diff --git a/paddle/fluid/framework/ir/conv_bn_fuse_pass.cc b/paddle/fluid/framework/ir/conv_bn_fuse_pass.cc index 372087f0d5..9474ca23a6 100644 --- a/paddle/fluid/framework/ir/conv_bn_fuse_pass.cc +++ b/paddle/fluid/framework/ir/conv_bn_fuse_pass.cc @@ -170,7 +170,8 @@ void ConvBNFusePass::ApplyImpl(ir::Graph* graph) const { eltwise_y_in_tensor->numel(), 0.0f); // update weights and biases - float epsilon = boost::get(batch_norm->Op()->GetAttr("epsilon")); + float epsilon = + BOOST_GET_CONST(float, batch_norm->Op()->GetAttr("epsilon")); recompute_bias_and_weights(scope, conv_weight, *bn_scale, *bn_bias_tensor, *bn_mean, *bn_variance, eltwise_y_in_tensor, epsilon, conv_type()); @@ -275,7 +276,8 @@ void ConvEltwiseAddBNFusePass::ApplyImpl(ir::Graph* graph) const { scope->FindVar(bn_bias->Name())->GetMutable(); // update weights and biases - float epsilon = boost::get(batch_norm->Op()->GetAttr("epsilon")); + float epsilon = + BOOST_GET_CONST(float, batch_norm->Op()->GetAttr("epsilon")); recompute_bias_and_weights(scope, conv_weight, *bn_scale, *bn_bias_tensor, *bn_mean, *bn_variance, eltwise_y_in_tensor, epsilon, conv_type()); diff --git a/paddle/fluid/framework/ir/cudnn_placement_pass_tester.cc b/paddle/fluid/framework/ir/cudnn_placement_pass_tester.cc index 059f5c43a8..2d270f444a 100644 --- a/paddle/fluid/framework/ir/cudnn_placement_pass_tester.cc +++ b/paddle/fluid/framework/ir/cudnn_placement_pass_tester.cc @@ -90,7 +90,7 @@ class PlacementPassTest { if (node->IsOp() && node->Op()) { auto* op = node->Op(); if (op->HasAttr("use_cudnn") && - boost::get(op->GetAttr("use_cudnn"))) { + BOOST_GET_CONST(bool, op->GetAttr("use_cudnn"))) { ++use_cudnn_true_count; } } diff --git a/paddle/fluid/framework/ir/embedding_fc_lstm_fuse_pass.cc b/paddle/fluid/framework/ir/embedding_fc_lstm_fuse_pass.cc index 4df09b828a..85e2f2bad3 100644 --- a/paddle/fluid/framework/ir/embedding_fc_lstm_fuse_pass.cc +++ b/paddle/fluid/framework/ir/embedding_fc_lstm_fuse_pass.cc @@ -192,9 +192,10 @@ static int BuildFusion(Graph* graph, const std::string& name_scope, GET_IR_NODE_FROM_SUBGRAPH(mul, mul, fc_pattern); // TODO(jczaja): Add support for is_sparse / is_distributed - auto is_sparse = boost::get(lookup_table->Op()->GetAttr("is_sparse")); + auto is_sparse = + BOOST_GET_CONST(bool, lookup_table->Op()->GetAttr("is_sparse")); auto is_distributed = - boost::get(lookup_table->Op()->GetAttr("is_distributed")); + BOOST_GET_CONST(bool, lookup_table->Op()->GetAttr("is_distributed")); if (is_sparse == true || is_distributed == true) { return; diff --git a/paddle/fluid/framework/ir/fc_elementwise_layernorm_fuse_pass.cc b/paddle/fluid/framework/ir/fc_elementwise_layernorm_fuse_pass.cc index e2c7606c30..7d78818e6a 100644 --- a/paddle/fluid/framework/ir/fc_elementwise_layernorm_fuse_pass.cc +++ b/paddle/fluid/framework/ir/fc_elementwise_layernorm_fuse_pass.cc @@ -173,7 +173,7 @@ void FCElementwiseLayerNormFusePass::ApplyImpl(ir::Graph *graph) const { } int begin_norm_axis = - boost::get(layer_norm->Op()->GetAttr("begin_norm_axis")); + BOOST_GET_CONST(int, layer_norm->Op()->GetAttr("begin_norm_axis")); auto layer_norm_x_dims = fc_out->Var()->GetShape(); auto layer_norm_x_mat_dims = framework::flatten_to_2d( framework::make_ddim(layer_norm_x_dims), begin_norm_axis); diff --git a/paddle/fluid/framework/ir/fuse_elewise_add_act_pass.cc b/paddle/fluid/framework/ir/fuse_elewise_add_act_pass.cc index 7f9eccf2fd..5c2c574fd6 100644 --- a/paddle/fluid/framework/ir/fuse_elewise_add_act_pass.cc +++ b/paddle/fluid/framework/ir/fuse_elewise_add_act_pass.cc @@ -249,8 +249,8 @@ void FuseElewiseAddActPass::RemoveIntermediateOut(Graph *graph) const { for (auto &cur_node : graph->Nodes()) { if (cur_node->IsVar()) continue; if (cur_node->Name() == "fused_elemwise_activation") { - bool save_intermediate_out = - boost::get(cur_node->Op()->GetAttr("save_intermediate_out")); + bool save_intermediate_out = BOOST_GET_CONST( + bool, cur_node->Op()->GetAttr("save_intermediate_out")); auto intermediate_out_args = cur_node->Op()->Output("IntermediateOut"); PADDLE_ENFORCE( save_intermediate_out && !intermediate_out_args.empty(), diff --git a/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_adam_op_pass.cc b/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_adam_op_pass.cc index 9eb632e7bd..482d8cf3d2 100644 --- a/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_adam_op_pass.cc +++ b/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_adam_op_pass.cc @@ -89,29 +89,35 @@ class FuseAdamOpPass : public FuseOptimizerOpPass { // Check attributions // NOTE: If new attribution is added, the following code maybe need change. - int op_role = boost::get( + int op_role = BOOST_GET_CONST( + int, adam_ops[0]->Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleAttrName())); - float beta1 = boost::get(adam_ops[0]->Op()->GetAttr("beta1")); - float beta2 = boost::get(adam_ops[0]->Op()->GetAttr("beta2")); - float epsilon = boost::get(adam_ops[0]->Op()->GetAttr("epsilon")); - bool lazy_mode = boost::get(adam_ops[0]->Op()->GetAttr("lazy_mode")); - int64_t min_row_size_to_use_multithread = boost::get( - adam_ops[0]->Op()->GetAttr("min_row_size_to_use_multithread")); + float beta1 = BOOST_GET_CONST(float, adam_ops[0]->Op()->GetAttr("beta1")); + float beta2 = BOOST_GET_CONST(float, adam_ops[0]->Op()->GetAttr("beta2")); + float epsilon = + BOOST_GET_CONST(float, adam_ops[0]->Op()->GetAttr("epsilon")); + bool lazy_mode = + BOOST_GET_CONST(bool, adam_ops[0]->Op()->GetAttr("lazy_mode")); + int64_t min_row_size_to_use_multithread = BOOST_GET_CONST( + int64_t, adam_ops[0]->Op()->GetAttr("min_row_size_to_use_multithread")); for (auto &adam_op : adam_ops) { - PADDLE_ENFORCE_EQ(beta1, - boost::get(adam_op->Op()->GetAttr("beta1"))); - PADDLE_ENFORCE_EQ(beta2, - boost::get(adam_op->Op()->GetAttr("beta2"))); - PADDLE_ENFORCE_EQ(epsilon, - boost::get(adam_op->Op()->GetAttr("epsilon"))); - PADDLE_ENFORCE_EQ(lazy_mode, - boost::get(adam_op->Op()->GetAttr("lazy_mode"))); - PADDLE_ENFORCE_EQ(min_row_size_to_use_multithread, - boost::get(adam_op->Op()->GetAttr( - "min_row_size_to_use_multithread"))); - PADDLE_ENFORCE_EQ(op_role, - boost::get(adam_op->Op()->GetAttr( - OpProtoAndCheckerMaker::OpRoleAttrName()))); + PADDLE_ENFORCE_EQ( + beta1, BOOST_GET_CONST(float, adam_op->Op()->GetAttr("beta1"))); + PADDLE_ENFORCE_EQ( + beta2, BOOST_GET_CONST(float, adam_op->Op()->GetAttr("beta2"))); + PADDLE_ENFORCE_EQ( + epsilon, BOOST_GET_CONST(float, adam_op->Op()->GetAttr("epsilon"))); + PADDLE_ENFORCE_EQ( + lazy_mode, + BOOST_GET_CONST(bool, adam_op->Op()->GetAttr("lazy_mode"))); + PADDLE_ENFORCE_EQ( + min_row_size_to_use_multithread, + BOOST_GET_CONST(int64_t, adam_op->Op()->GetAttr( + "min_row_size_to_use_multithread"))); + PADDLE_ENFORCE_EQ( + op_role, + BOOST_GET_CONST(int, adam_op->Op()->GetAttr( + OpProtoAndCheckerMaker::OpRoleAttrName()))); } // NOTE: fused_var is only exist in scope, so the graph doesn't have @@ -178,23 +184,25 @@ class FuseAdamOpPass : public FuseOptimizerOpPass { VLOG(6) << "The number of scale op is " << scale_ops.size() << "."; // Check attributions // NOTE: If new attribution is added, the following code maybe need change. - int op_role = boost::get( + int op_role = BOOST_GET_CONST( + int, scale_ops[0]->Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleAttrName())); - float scale = boost::get(scale_ops[0]->Op()->GetAttr("scale")); - float bias = boost::get(scale_ops[0]->Op()->GetAttr("bias")); + float scale = BOOST_GET_CONST(float, scale_ops[0]->Op()->GetAttr("scale")); + float bias = BOOST_GET_CONST(float, scale_ops[0]->Op()->GetAttr("bias")); bool bias_after_scale = - boost::get(scale_ops[0]->Op()->GetAttr("bias_after_scale")); + BOOST_GET_CONST(bool, scale_ops[0]->Op()->GetAttr("bias_after_scale")); for (auto &scale_op : scale_ops) { - PADDLE_ENFORCE_EQ(scale, - boost::get(scale_op->Op()->GetAttr("scale"))); - PADDLE_ENFORCE_EQ(bias, - boost::get(scale_op->Op()->GetAttr("bias"))); + PADDLE_ENFORCE_EQ( + scale, BOOST_GET_CONST(float, scale_op->Op()->GetAttr("scale"))); + PADDLE_ENFORCE_EQ( + bias, BOOST_GET_CONST(float, scale_op->Op()->GetAttr("bias"))); PADDLE_ENFORCE_EQ( bias_after_scale, - boost::get(scale_op->Op()->GetAttr("bias_after_scale"))); - PADDLE_ENFORCE_EQ(op_role, - boost::get(scale_op->Op()->GetAttr( - OpProtoAndCheckerMaker::OpRoleAttrName()))); + BOOST_GET_CONST(bool, scale_op->Op()->GetAttr("bias_after_scale"))); + PADDLE_ENFORCE_EQ( + op_role, + BOOST_GET_CONST(int, scale_op->Op()->GetAttr( + OpProtoAndCheckerMaker::OpRoleAttrName()))); } // NOTE: fused_var is only exist in scope, so the graph doesn't have diff --git a/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_momentum_op_pass.cc b/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_momentum_op_pass.cc index 8f3a623a98..f70745be1b 100644 --- a/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_momentum_op_pass.cc +++ b/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_momentum_op_pass.cc @@ -41,21 +41,23 @@ class FuseMomentumOpPass : public FuseOptimizerOpPass { // Check attributions // NOTE: If new attribution is added, the following code maybe need change. - int op_role = boost::get(momentum_ops[0]->Op()->GetAttr( - OpProtoAndCheckerMaker::OpRoleAttrName())); - float mu = boost::get(momentum_ops[0]->Op()->GetAttr("mu")); + int op_role = + BOOST_GET_CONST(int, momentum_ops[0]->Op()->GetAttr( + OpProtoAndCheckerMaker::OpRoleAttrName())); + float mu = BOOST_GET_CONST(float, momentum_ops[0]->Op()->GetAttr("mu")); bool use_nesterov = - boost::get(momentum_ops[0]->Op()->GetAttr("use_nesterov")); + BOOST_GET_CONST(bool, momentum_ops[0]->Op()->GetAttr("use_nesterov")); for (auto &momentum_op : momentum_ops) { - PADDLE_ENFORCE_EQ(mu, - boost::get(momentum_op->Op()->GetAttr("mu"))); + PADDLE_ENFORCE_EQ( + mu, BOOST_GET_CONST(float, momentum_op->Op()->GetAttr("mu"))); PADDLE_ENFORCE_EQ( use_nesterov, - boost::get(momentum_op->Op()->GetAttr("use_nesterov"))); - PADDLE_ENFORCE_EQ(op_role, - boost::get(momentum_op->Op()->GetAttr( - OpProtoAndCheckerMaker::OpRoleAttrName()))); + BOOST_GET_CONST(bool, momentum_op->Op()->GetAttr("use_nesterov"))); + PADDLE_ENFORCE_EQ( + op_role, + BOOST_GET_CONST(int, momentum_op->Op()->GetAttr( + OpProtoAndCheckerMaker::OpRoleAttrName()))); } // NOTE: fused_var is only exist in scope, so the graph doesn't have diff --git a/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_sgd_op_pass.cc b/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_sgd_op_pass.cc index 3dd54cbc3c..1504f00b27 100644 --- a/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_sgd_op_pass.cc +++ b/paddle/fluid/framework/ir/fuse_optimizer_ops_pass/fuse_sgd_op_pass.cc @@ -40,7 +40,8 @@ class FuseSgdOpPass : public FuseOptimizerOpPass { // NOTE: fused_var is only exist in scope, so the graph doesn't have // fused_var node. - int op_role = boost::get( + int op_role = BOOST_GET_CONST( + int, sgd_ops[0]->Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleAttrName())); VLOG(6) << "Insert sgd to graph."; // Add fused scale diff --git a/paddle/fluid/framework/ir/fuse_pass_base.cc b/paddle/fluid/framework/ir/fuse_pass_base.cc index 5e2523607d..c7bf53f3d6 100644 --- a/paddle/fluid/framework/ir/fuse_pass_base.cc +++ b/paddle/fluid/framework/ir/fuse_pass_base.cc @@ -45,9 +45,9 @@ FuseOptions FusePassBase::FindFuseOption(const Node& node1, const Node& node2) const { #ifdef PADDLE_WITH_MKLDNN bool node1_mkldnn = node1.Op()->HasAttr("use_mkldnn") && - boost::get(node1.Op()->GetAttr("use_mkldnn")); + BOOST_GET_CONST(bool, node1.Op()->GetAttr("use_mkldnn")); bool node2_mkldnn = node2.Op()->HasAttr("use_mkldnn") && - boost::get(node2.Op()->GetAttr("use_mkldnn")); + BOOST_GET_CONST(bool, node2.Op()->GetAttr("use_mkldnn")); if (node1_mkldnn && node2_mkldnn) return FUSE_MKLDNN; else if (!node1_mkldnn && !node2_mkldnn) diff --git a/paddle/fluid/framework/ir/fusion_group/code_generator_helper.cc b/paddle/fluid/framework/ir/fusion_group/code_generator_helper.cc index 69a78e1c75..726e8cfff3 100644 --- a/paddle/fluid/framework/ir/fusion_group/code_generator_helper.cc +++ b/paddle/fluid/framework/ir/fusion_group/code_generator_helper.cc @@ -83,26 +83,26 @@ static std::string RefineTemplateWithAttr(const std::string& op_type, proto::AttrType attr_type = static_cast(it->second.which() - 1); if (attr_type == proto::AttrType::BOOLEAN) { - bool result = boost::get(attr); + bool result = BOOST_GET(bool, attr); if (result) { ret = "true"; } else { ret = "false"; } } else if (attr_type == proto::AttrType::INT) { - int result = boost::get(attr); + int result = BOOST_GET(int, attr); str_cvt << result; ret = str_cvt.str(); } else if (attr_type == proto::AttrType::LONG) { - int64_t result = boost::get(attr); + int64_t result = BOOST_GET(int64_t, attr); str_cvt << result; ret = str_cvt.str(); } else if (attr_type == proto::AttrType::FLOAT) { - float result = boost::get(attr); + float result = BOOST_GET(float, attr); str_cvt << result; ret = str_cvt.str(); } else if (attr_type == proto::AttrType::STRING) { - std::string result = boost::get(attr); + std::string result = BOOST_GET(std::string, attr); ret = result; } } else { diff --git a/paddle/fluid/framework/ir/fusion_group/fusion_group_pass.cc b/paddle/fluid/framework/ir/fusion_group/fusion_group_pass.cc index 7ac14a698a..d70c81736d 100644 --- a/paddle/fluid/framework/ir/fusion_group/fusion_group_pass.cc +++ b/paddle/fluid/framework/ir/fusion_group/fusion_group_pass.cc @@ -94,7 +94,7 @@ static int ExtractOpRole(fusion_group::SubGraph* subgraph) { for (auto* n : subgraph->Nodes()) { if (n && n->IsOp() && n->Op()) { if (n->Op()->HasAttr(attr_name)) { - op_roles.insert(boost::get(n->Op()->GetAttr(attr_name))); + op_roles.insert(BOOST_GET_CONST(int, n->Op()->GetAttr(attr_name))); } } } diff --git a/paddle/fluid/framework/ir/graph_pattern_detector.cc b/paddle/fluid/framework/ir/graph_pattern_detector.cc index 5dcdc751c8..c45d6b5282 100644 --- a/paddle/fluid/framework/ir/graph_pattern_detector.cc +++ b/paddle/fluid/framework/ir/graph_pattern_detector.cc @@ -2071,7 +2071,8 @@ void patterns::ShuffleChannelPattern::operator()(PDNode *reshape1_in) { auto reshape1_op = pattern->NewNode(reshape1_op_repr())->assert_is_op("reshape2"); reshape1_op->assert_more([&](Node *x) { - return boost::get>(x->Op()->GetAttr("shape")).size() == 5; + return BOOST_GET_CONST(std::vector, x->Op()->GetAttr("shape")) + .size() == 5; }); auto reshape1_out = pattern->NewNode(reshape1_out_repr()) diff --git a/paddle/fluid/framework/ir/graph_pattern_detector.h b/paddle/fluid/framework/ir/graph_pattern_detector.h index 91a086d090..65f7eeebd2 100644 --- a/paddle/fluid/framework/ir/graph_pattern_detector.h +++ b/paddle/fluid/framework/ir/graph_pattern_detector.h @@ -143,7 +143,7 @@ struct PDNode { PDNode* assert_op_attr(const std::string& attr_name, const T& attr) { asserts_.emplace_back([=](Node* x) { return x && x->IsOp() && x->Op()->HasAttr(attr_name) && - boost::get(x->Op()->GetAttr(attr_name)) == attr; + BOOST_GET_CONST(T, x->Op()->GetAttr(attr_name)) == attr; }); return this; } diff --git a/paddle/fluid/framework/ir/graph_viz_pass.cc b/paddle/fluid/framework/ir/graph_viz_pass.cc index fa7263b7e7..7f4519ad99 100644 --- a/paddle/fluid/framework/ir/graph_viz_pass.cc +++ b/paddle/fluid/framework/ir/graph_viz_pass.cc @@ -31,7 +31,8 @@ std::string FormatName(const Node* node) { !node->Op()->HasAttr(OpProtoAndCheckerMaker::OpNamescopeAttrName())) { return node->Name(); } - const std::string full_scope = boost::get( + const std::string full_scope = BOOST_GET_CONST( + std::string, node->Op()->GetAttr(OpProtoAndCheckerMaker::OpNamescopeAttrName())); return string::Sprintf("%s%s", full_scope.c_str(), node->Name().c_str()); } diff --git a/paddle/fluid/framework/ir/is_test_pass_tester.cc b/paddle/fluid/framework/ir/is_test_pass_tester.cc index 3fa543c622..e8104d4a19 100644 --- a/paddle/fluid/framework/ir/is_test_pass_tester.cc +++ b/paddle/fluid/framework/ir/is_test_pass_tester.cc @@ -102,12 +102,12 @@ TEST(IsTestPass, basic) { for (auto* node : graph->Nodes()) { if (node->IsOp()) { auto* op = node->Op(); - auto op_name = boost::get(op->GetAttr("name")); + auto op_name = BOOST_GET_CONST(std::string, op->GetAttr("name")); if (op_name == "conv3") { ASSERT_FALSE(op->HasAttr("is_test")); } else { ASSERT_TRUE(op->HasAttr("is_test")); - EXPECT_TRUE(boost::get(op->GetAttr("is_test"))); + EXPECT_TRUE(BOOST_GET_CONST(bool, op->GetAttr("is_test"))); } } } diff --git a/paddle/fluid/framework/ir/lock_free_optimize_pass.cc b/paddle/fluid/framework/ir/lock_free_optimize_pass.cc index 05d23961a8..a0cb7e9330 100644 --- a/paddle/fluid/framework/ir/lock_free_optimize_pass.cc +++ b/paddle/fluid/framework/ir/lock_free_optimize_pass.cc @@ -170,7 +170,8 @@ ir::Node* LockFreeOptimizePass::CreateNewSGDNode( new_desc.SetInput("Grad", std::vector({grad_node->Name()})); new_desc.SetOutput("ParamOut", old_desc->Output("ParamOut")); - std::vector op_role_vars = boost::get>( + std::vector op_role_vars = BOOST_GET_CONST( + std::vector, new_desc.GetAttr(framework::OpProtoAndCheckerMaker::OpRoleVarAttrName())); // replace the second op role var, because the grad name was // changed in new optimizer diff --git a/paddle/fluid/framework/ir/memory_optimize_pass/test_reference_count_pass_last_lived_ops.cc b/paddle/fluid/framework/ir/memory_optimize_pass/test_reference_count_pass_last_lived_ops.cc index 3ea7ca47ab..9427480852 100644 --- a/paddle/fluid/framework/ir/memory_optimize_pass/test_reference_count_pass_last_lived_ops.cc +++ b/paddle/fluid/framework/ir/memory_optimize_pass/test_reference_count_pass_last_lived_ops.cc @@ -186,12 +186,12 @@ TEST(test_reference_count_pass, test_no_need_buffer_var_shrink) { ReferenceCountPassTestHelper helper(program, use_cuda); ASSERT_TRUE(helper.IsLastLivedOps(x0, {"scale"})); ASSERT_EQ( - boost::get(helper.LastLivedOps(x0)[0]->Attrs().at("scale")), + BOOST_GET_CONST(float, helper.LastLivedOps(x0)[0]->Attrs().at("scale")), 1.0f); ASSERT_TRUE(helper.IsLastLivedOps(x1, {"scale"})); ASSERT_EQ( - boost::get(helper.LastLivedOps(x1)[0]->Attrs().at("scale")), + BOOST_GET_CONST(float, helper.LastLivedOps(x1)[0]->Attrs().at("scale")), 3.0f); ASSERT_TRUE(helper.IsLastLivedOps(x2, {"elementwise_mul"})); diff --git a/paddle/fluid/framework/ir/mkldnn/conv_activation_mkldnn_fuse_pass.cc b/paddle/fluid/framework/ir/mkldnn/conv_activation_mkldnn_fuse_pass.cc index 8bc9072948..1199174289 100644 --- a/paddle/fluid/framework/ir/mkldnn/conv_activation_mkldnn_fuse_pass.cc +++ b/paddle/fluid/framework/ir/mkldnn/conv_activation_mkldnn_fuse_pass.cc @@ -58,8 +58,9 @@ void ConvActivationFusePass::ApplyImpl(ir::Graph* graph) const { // MKLDNN ops use alpha and beta as activation parameters but paddle ops are // not generalized if (activation_type() == "relu6") { - desc->SetAttr("fuse_alpha", - boost::get(activation->Op()->GetAttr("threshold"))); + desc->SetAttr( + "fuse_alpha", + BOOST_GET_CONST(float, activation->Op()->GetAttr("threshold"))); } else if (activation_type() == "swish") { // paddle uses beta but mkldnn uses alpha for swish desc->SetAttr("fuse_alpha", diff --git a/paddle/fluid/framework/ir/mkldnn/conv_activation_mkldnn_fuse_pass_tester.cc b/paddle/fluid/framework/ir/mkldnn/conv_activation_mkldnn_fuse_pass_tester.cc index f4155568cf..923f53bb88 100644 --- a/paddle/fluid/framework/ir/mkldnn/conv_activation_mkldnn_fuse_pass_tester.cc +++ b/paddle/fluid/framework/ir/mkldnn/conv_activation_mkldnn_fuse_pass_tester.cc @@ -114,8 +114,8 @@ void MainTest(std::string activation) { if (node->IsOp() && node->Op()->Type() == "conv2d") { auto* op = node->Op(); ASSERT_TRUE(op->HasAttr("use_mkldnn")); - EXPECT_TRUE(boost::get(op->GetAttr("use_mkldnn"))); - auto op_name = boost::get(op->GetAttr("name")); + EXPECT_TRUE(BOOST_GET_CONST(bool, op->GetAttr("use_mkldnn"))); + auto op_name = BOOST_GET_CONST(std::string, op->GetAttr("name")); if (op->GetAttrIfExists("fuse_activation") == activation) { ++conv_activation_count; } diff --git a/paddle/fluid/framework/ir/mkldnn/conv_bias_mkldnn_fuse_pass_tester.cc b/paddle/fluid/framework/ir/mkldnn/conv_bias_mkldnn_fuse_pass_tester.cc index 6ebe642a7d..88aac001a9 100644 --- a/paddle/fluid/framework/ir/mkldnn/conv_bias_mkldnn_fuse_pass_tester.cc +++ b/paddle/fluid/framework/ir/mkldnn/conv_bias_mkldnn_fuse_pass_tester.cc @@ -118,14 +118,14 @@ void MainTest(bool convWithExistingBias) { if (node->IsOp() && node->Op()->Type() == "conv2d") { auto* op = node->Op(); ASSERT_TRUE(op->HasAttr("use_mkldnn")); - EXPECT_TRUE(boost::get(op->GetAttr("use_mkldnn"))); + EXPECT_TRUE(BOOST_GET_CONST(bool, op->GetAttr("use_mkldnn"))); // check if "conv" convolution is fused - auto op_name = boost::get(op->GetAttr("name")); + auto op_name = BOOST_GET_CONST(std::string, op->GetAttr("name")); if (op_name == "conv") { auto input_names = op->InputNames(); ASSERT_TRUE(std::find(input_names.begin(), input_names.end(), "Bias") != input_names.end()); - auto bias = boost::get>(op->Input("Bias")); + auto bias = op->Input("Bias"); if (bias.size()) { ++conv_bias_count; } diff --git a/paddle/fluid/framework/ir/mkldnn/conv_concat_relu_mkldnn_fuse_pass_tester.cc b/paddle/fluid/framework/ir/mkldnn/conv_concat_relu_mkldnn_fuse_pass_tester.cc index ee00a39596..6b648608ca 100644 --- a/paddle/fluid/framework/ir/mkldnn/conv_concat_relu_mkldnn_fuse_pass_tester.cc +++ b/paddle/fluid/framework/ir/mkldnn/conv_concat_relu_mkldnn_fuse_pass_tester.cc @@ -111,7 +111,8 @@ void MainTest(const ProgramDesc& prog, bool fuse_relu) { if (op->Type() == "conv2d") { ASSERT_TRUE(op->HasAttr("fuse_activation")); bool fuse_relu_attr = - (boost::get(op->GetAttr("fuse_activation")) == "relu"); + (BOOST_GET_CONST(std::string, op->GetAttr("fuse_activation")) == + "relu"); EXPECT_EQ(fuse_relu, fuse_relu_attr); } else if (op->Type() == "relu") { relu_count++; diff --git a/paddle/fluid/framework/ir/mkldnn/conv_elementwise_add_mkldnn_fuse_pass.cc b/paddle/fluid/framework/ir/mkldnn/conv_elementwise_add_mkldnn_fuse_pass.cc index 3e4e1d8929..af2b1308e0 100644 --- a/paddle/fluid/framework/ir/mkldnn/conv_elementwise_add_mkldnn_fuse_pass.cc +++ b/paddle/fluid/framework/ir/mkldnn/conv_elementwise_add_mkldnn_fuse_pass.cc @@ -73,7 +73,7 @@ bool IsReachable(ir::Graph* graph, Node* from, Node* to) { template boost::optional HasAttribute(const Node& op, const std::string& attr) { if (op.Op()->HasAttr(attr)) - return boost::get(op.Op()->GetAttr(attr)); + return BOOST_GET_CONST(T, op.Op()->GetAttr(attr)); else return boost::none; } diff --git a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_pass.cc b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_pass.cc index 1750c3fdc4..c23807d399 100644 --- a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_pass.cc +++ b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_pass.cc @@ -282,8 +282,10 @@ void CPUQuantizePass::QuantizeConv(Graph* graph, // change threshold in bounded ReLu if (conv_op->Op()->GetAttrIfExists("fuse_activation") == "relu6") { - float scale_out = boost::get(conv_op->Op()->GetAttr("Scale_out")); - float threshold = boost::get(conv_op->Op()->GetAttr("fuse_alpha")); + float scale_out = + BOOST_GET_CONST(float, conv_op->Op()->GetAttr("Scale_out")); + float threshold = + BOOST_GET_CONST(float, conv_op->Op()->GetAttr("fuse_alpha")); conv_op->Op()->SetAttr("fuse_alpha", scale_out * threshold); } diff --git a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_pass_tester.cc b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_pass_tester.cc index c6264d503a..67a9957cb0 100644 --- a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_pass_tester.cc +++ b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_pass_tester.cc @@ -179,14 +179,14 @@ void MainTest(const ProgramDesc& prog, int conv_count, int pool_count, auto* op = node->Op(); if (op->Type() == "conv2d") { conv2d_nodes_count++; - auto op_name = boost::get(op->GetAttr("name")); - EXPECT_EQ(boost::get(op->GetAttr("Scale_in")), scale) + auto op_name = BOOST_GET_CONST(std::string, op->GetAttr("name")); + EXPECT_EQ(BOOST_GET_CONST(float, op->GetAttr("Scale_in")), scale) << "Scale_in for node '" + op_name + "'."; - EXPECT_EQ(boost::get(op->GetAttr("Scale_out")), scale) + EXPECT_EQ(BOOST_GET_CONST(float, op->GetAttr("Scale_out")), scale) << "Scale_out for node '" + op_name + "'."; - EXPECT_EQ( - boost::get>(op->GetAttr("Scale_weights"))[0], - scale) + EXPECT_EQ(BOOST_GET_CONST(std::vector, + op->GetAttr("Scale_weights"))[0], + scale) << "Scale_weights for node '" + op_name + "'."; } else if (op->Type() == "pool2d") { pool2d_nodes_count++; @@ -340,14 +340,14 @@ void MainTestTranspose(const ProgramDesc& prog, int conv_count, transpose_nodes_count++; } else if (op->Type() == "conv2d") { conv_nodes_count++; - auto op_name = boost::get(op->GetAttr("name")); - EXPECT_EQ(boost::get(op->GetAttr("Scale_in")), scale) + auto op_name = BOOST_GET_CONST(std::string, op->GetAttr("name")); + EXPECT_EQ(BOOST_GET_CONST(float, op->GetAttr("Scale_in")), scale) << "Scale_in for node '" + op_name + "'."; - EXPECT_EQ(boost::get(op->GetAttr("Scale_out")), scale) + EXPECT_EQ(BOOST_GET_CONST(float, op->GetAttr("Scale_out")), scale) << "Scale_out for node '" + op_name + "'."; - EXPECT_EQ( - boost::get>(op->GetAttr("Scale_weights"))[0], - scale) + EXPECT_EQ(BOOST_GET_CONST(std::vector, + op->GetAttr("Scale_weights"))[0], + scale) << "Scale_weights for node '" + op_name + "'."; } else if (op->Type() == "quantize") { quantize_nodes_count++; @@ -436,14 +436,14 @@ void MainTestReshape(const ProgramDesc& prog, int transpose_count, reshape_nodes_count++; } else if (op->Type() == "quantize") { quantize_nodes_count++; - quant_scale = boost::get(op->GetAttr("Scale")); + quant_scale = BOOST_GET_CONST(float, op->GetAttr("Scale")); EXPECT_EQ(quant_scale, scale) << "Scale for node '" + op->Type() + "'."; } else if (op->Type() == "dequantize") { dequantize_nodes_count++; auto op_name = op->GetAttrIfExists("name"); VLOG(3) << op_name << "\n"; if (op_name != "Dequantize1") { - dequant_scale = boost::get(op->GetAttr("Scale")); + dequant_scale = BOOST_GET_CONST(float, op->GetAttr("Scale")); EXPECT_EQ(dequant_scale, scale) << "Scale for node '" + op->Type() + "'."; } @@ -530,12 +530,12 @@ void MainTestMatmul(const ProgramDesc& prog, int matmul_count, int quant_count, auto* op = node->Op(); if (op->Type() == "matmul") { matmul_nodes_count++; - auto op_name = boost::get(op->GetAttr("name")); - EXPECT_EQ(boost::get(op->GetAttr("Scale_x")), scale) + auto op_name = BOOST_GET_CONST(std::string, op->GetAttr("name")); + EXPECT_EQ(BOOST_GET_CONST(float, op->GetAttr("Scale_x")), scale) << "Scale_x for node '" + op_name + "'."; - EXPECT_EQ(boost::get(op->GetAttr("Scale_y")), scale) + EXPECT_EQ(BOOST_GET_CONST(float, op->GetAttr("Scale_y")), scale) << "Scale_y for node '" + op_name + "'."; - EXPECT_EQ(boost::get(op->GetAttr("Scale_out")), scale) + EXPECT_EQ(BOOST_GET_CONST(float, op->GetAttr("Scale_out")), scale) << "Scale_out for node '" + op_name + "'."; } else if (op->Type() == "quantize") { quantize_nodes_count++; diff --git a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_placement_pass_tester.cc b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_placement_pass_tester.cc index 479d3087ba..027d3e2861 100644 --- a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_placement_pass_tester.cc +++ b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_placement_pass_tester.cc @@ -102,7 +102,7 @@ void MainTest(std::initializer_list quantize_enabled_op_types, if (node->IsOp()) { auto* op = node->Op(); if (op->HasAttr("use_quantizer") && - boost::get(op->GetAttr("use_quantizer"))) { + BOOST_GET_CONST(bool, op->GetAttr("use_quantizer"))) { ++use_quantizer_true_count; } } @@ -122,7 +122,7 @@ void DefaultAttrTest(unsigned expected_use_quantizer_true_count) { if (node->IsOp()) { auto* op = node->Op(); if (op->HasAttr("use_quantizer") && - boost::get(op->GetAttr("use_quantizer"))) { + BOOST_GET_CONST(bool, op->GetAttr("use_quantizer"))) { ++use_quantizer_true_count; } } diff --git a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_squash_pass.cc b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_squash_pass.cc index 6283b65be9..130ba44ff6 100644 --- a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_squash_pass.cc +++ b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_squash_pass.cc @@ -69,8 +69,10 @@ void CPUQuantizeSquashPass::DequantQuantSquash( GET_IR_NODE_FROM_SUBGRAPH(next_op, next_op, squash_pattern); auto* next_op_desc = next_op->Op(); - float dequant_scale = boost::get(dequant_op->Op()->GetAttr("Scale")); - float quant_scale = boost::get(quant_op->Op()->GetAttr("Scale")); + float dequant_scale = + BOOST_GET_CONST(float, dequant_op->Op()->GetAttr("Scale")); + float quant_scale = + BOOST_GET_CONST(float, quant_op->Op()->GetAttr("Scale")); PADDLE_ENFORCE_NE( nodes_keep_counter->find(dequant_out), nodes_keep_counter->end(), platform::errors::NotFound("The dequant output node is not found")); @@ -155,7 +157,7 @@ void CPUQuantizeSquashPass::OpRequantSquash(Graph* graph) const { "should have requantize input as output")); float requant_scale_out = - boost::get(requant_op->Op()->GetAttr("Scale_out")); + BOOST_GET_CONST(float, requant_op->Op()->GetAttr("Scale_out")); any_op->Op()->SetAttr("Scale_out", requant_scale_out); any_op->Op()->SetOutput(any_op_output_name, std::vector({requant_out->Name()})); diff --git a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_squash_pass_tester.cc b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_squash_pass_tester.cc index d10494aabf..9b827fdf6f 100644 --- a/paddle/fluid/framework/ir/mkldnn/cpu_quantize_squash_pass_tester.cc +++ b/paddle/fluid/framework/ir/mkldnn/cpu_quantize_squash_pass_tester.cc @@ -386,8 +386,8 @@ void EqualScaleTest(const ProgramDesc& prog, const std::string& op_name, for (auto* node : graph->Nodes()) { if (node->IsOp() && - boost::get(node->Op()->GetAttr("name")) == op_name) { - float op_scale = boost::get(node->Op()->GetAttr(scale_name)); + BOOST_GET_CONST(std::string, node->Op()->GetAttr("name")) == op_name) { + float op_scale = BOOST_GET_CONST(float, node->Op()->GetAttr(scale_name)); EXPECT_EQ(op_scale, scale); } } @@ -403,9 +403,11 @@ void CheckRequantScalesTest(const ProgramDesc& prog, float scale_in, for (auto* node : graph->Nodes()) { if (node->IsOp() && node->Op()->Type() == "requantize") { - float op_scale_in = boost::get(node->Op()->GetAttr("Scale_in")); + float op_scale_in = + BOOST_GET_CONST(float, node->Op()->GetAttr("Scale_in")); EXPECT_EQ(op_scale_in, scale_in); - float op_scale_out = boost::get(node->Op()->GetAttr("Scale_out")); + float op_scale_out = + BOOST_GET_CONST(float, node->Op()->GetAttr("Scale_out")); EXPECT_EQ(op_scale_out, scale_out); } } diff --git a/paddle/fluid/framework/ir/mkldnn/depthwise_conv_mkldnn_pass_tester.cc b/paddle/fluid/framework/ir/mkldnn/depthwise_conv_mkldnn_pass_tester.cc index f2dfbc84a5..a37565236c 100644 --- a/paddle/fluid/framework/ir/mkldnn/depthwise_conv_mkldnn_pass_tester.cc +++ b/paddle/fluid/framework/ir/mkldnn/depthwise_conv_mkldnn_pass_tester.cc @@ -95,12 +95,12 @@ TEST(DepthwiseConvMKLDNNPass, basic) { if (node->IsOp()) { auto* op = node->Op(); if (op->Type() == "conv2d") { - if (boost::get(op->GetAttr("use_mkldnn"))) + if (BOOST_GET_CONST(bool, op->GetAttr("use_mkldnn"))) after.mkldnn_conv_nodes++; else after.other_conv_nodes++; } else if (op->Type() == "depthwise_conv2d") { - if (boost::get(op->GetAttr("use_mkldnn"))) + if (BOOST_GET_CONST(bool, op->GetAttr("use_mkldnn"))) after.mkldnn_depthwise_conv_nodes++; else after.other_depthwise_conv_nodes++; diff --git a/paddle/fluid/framework/ir/mkldnn/matmul_transpose_reshape_fuse_pass.cc b/paddle/fluid/framework/ir/mkldnn/matmul_transpose_reshape_fuse_pass.cc index d088696853..37c14e1d8e 100644 --- a/paddle/fluid/framework/ir/mkldnn/matmul_transpose_reshape_fuse_pass.cc +++ b/paddle/fluid/framework/ir/mkldnn/matmul_transpose_reshape_fuse_pass.cc @@ -46,9 +46,9 @@ void MatmulTransposeReshapeMKLDNNPass::ApplyImpl(ir::Graph *graph) const { GET_IR_NODE_FROM_SUBGRAPH(reshape_out, reshape_out, mtrp); GET_IR_NODE_FROM_SUBGRAPH(reshape_out_xshape, reshape_out_xshape, mtrp); auto reshape_shape = - boost::get>(reshape_op->Op()->GetAttr("shape")); + BOOST_GET_CONST(std::vector, reshape_op->Op()->GetAttr("shape")); auto transpose_axis = - boost::get>(transpose_op->Op()->GetAttr("axis")); + BOOST_GET_CONST(std::vector, transpose_op->Op()->GetAttr("axis")); auto reshape_out_size = reshape_shape.size(); auto transpose_out_size = transpose_axis.size(); diff --git a/paddle/fluid/framework/ir/mkldnn/mkldnn_inplace_pass.cc b/paddle/fluid/framework/ir/mkldnn/mkldnn_inplace_pass.cc index 59e7337169..d7ab51fa73 100644 --- a/paddle/fluid/framework/ir/mkldnn/mkldnn_inplace_pass.cc +++ b/paddle/fluid/framework/ir/mkldnn/mkldnn_inplace_pass.cc @@ -51,7 +51,8 @@ void MKLDNNInPlacePass::ApplyImpl(ir::Graph* graph) const { GET_IR_NODE_FROM_SUBGRAPH(next_op_out, next_op_out, mkldnn_inplace); if ((current_op->Op()->HasAttr("use_mkldnn") == false) || - (boost::get(current_op->Op()->GetAttr("use_mkldnn")) == false)) { + (BOOST_GET_CONST(bool, current_op->Op()->GetAttr("use_mkldnn")) == + false)) { VLOG(3) << "do not perform mkl-dnn inplace: use_mkldnn missing or set to " "false"; return; diff --git a/paddle/fluid/framework/ir/mkldnn/mkldnn_placement_pass_tester.cc b/paddle/fluid/framework/ir/mkldnn/mkldnn_placement_pass_tester.cc index 8b767ad42d..4012e04f7d 100644 --- a/paddle/fluid/framework/ir/mkldnn/mkldnn_placement_pass_tester.cc +++ b/paddle/fluid/framework/ir/mkldnn/mkldnn_placement_pass_tester.cc @@ -111,7 +111,7 @@ class PlacementPassTest { if (node->IsOp()) { auto* op = node->Op(); if (op->HasAttr("use_mkldnn") && - boost::get(op->GetAttr("use_mkldnn"))) { + BOOST_GET_CONST(bool, op->GetAttr("use_mkldnn"))) { ++use_mkldnn_true_count; } } diff --git a/paddle/fluid/framework/ir/multi_batch_merge_pass.cc b/paddle/fluid/framework/ir/multi_batch_merge_pass.cc index b075cde321..d67f2274eb 100644 --- a/paddle/fluid/framework/ir/multi_batch_merge_pass.cc +++ b/paddle/fluid/framework/ir/multi_batch_merge_pass.cc @@ -86,8 +86,9 @@ void BatchMergePass::ApplyImpl(ir::Graph* graph) const { for (auto node : nodes) { if (!node->IsOp()) continue; PADDLE_ENFORCE(node->Op(), "must find opdesc"); - int op_role = boost::get(node->Op()->GetAttr( - framework::OpProtoAndCheckerMaker::OpRoleAttrName())); + int op_role = BOOST_GET_CONST( + int, node->Op()->GetAttr( + framework::OpProtoAndCheckerMaker::OpRoleAttrName())); if ((op_role == static_cast(framework::OpRole::kForward)) || (op_role & static_cast(framework::OpRole::kBackward)) || (op_role & static_cast(framework::OpRole::kLoss))) { @@ -98,7 +99,8 @@ void BatchMergePass::ApplyImpl(ir::Graph* graph) const { optimize_ops.push_back(node); auto op_role_var = node->Op()->GetNullableAttr( OpProtoAndCheckerMaker::OpRoleVarAttrName()); - auto op_role_vars = boost::get>(op_role_var); + auto op_role_vars = + BOOST_GET_CONST(std::vector, op_role_var); for (size_t i = 0; i < op_role_vars.size(); i += 2) { grad_names.insert(op_role_vars[i + 1]); gradname2paramname[op_role_vars[i + 1]] = op_role_vars[i]; diff --git a/paddle/fluid/framework/ir/multi_devices_graph_pass/multi_devices_graph_pass.cc b/paddle/fluid/framework/ir/multi_devices_graph_pass/multi_devices_graph_pass.cc index a6a8e346c7..e6455a32d1 100644 --- a/paddle/fluid/framework/ir/multi_devices_graph_pass/multi_devices_graph_pass.cc +++ b/paddle/fluid/framework/ir/multi_devices_graph_pass/multi_devices_graph_pass.cc @@ -50,8 +50,8 @@ typedef std::vector GraphOps; const char kGraphOps[] = "ops"; bool OpHaveRole(const ir::Node &node, const framework::OpRole &role) { - return boost::get( - node.Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleAttrName())) == + return BOOST_GET_CONST(int, node.Op()->GetAttr( + OpProtoAndCheckerMaker::OpRoleAttrName())) == static_cast(role); } @@ -580,8 +580,8 @@ details::VarHandle *MultiDevSSAGraphBuilderBase::CreateReduceOp( bool MultiDevSSAGraphBuilderBase::IsScaleLossOp(ir::Node *node) const { return !loss_var_name_.empty() && node->Op() && - boost::get( - node->Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleAttrName())) == + BOOST_GET_CONST(int, node->Op()->GetAttr( + OpProtoAndCheckerMaker::OpRoleAttrName())) == (static_cast(OpRole::kBackward) | static_cast(OpRole::kLoss)); } @@ -635,7 +635,8 @@ int BalanceVarSSAGraphBuilder::GetOpDeviceID(ir::Node *node) const { if (!OpHaveRole(*node, framework::OpRole::kOptimize)) { return -1; } - auto param_grad = boost::get>( + auto param_grad = BOOST_GET_CONST( + std::vector, node->Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleVarAttrName())); PADDLE_ENFORCE_EQ(param_grad.size(), 2U); @@ -729,7 +730,8 @@ int ReduceSSAGraphBuilder::GetOpDeviceID( return -1; } - auto param_grad = boost::get>( + auto param_grad = BOOST_GET_CONST( + std::vector, node->Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleVarAttrName())); PADDLE_ENFORCE_EQ(param_grad.size(), 2U); @@ -776,10 +778,10 @@ std::vector ReduceSSAGraphBuilder::SortForReduceMode( // This op runs on all devices, and its output may have parameter's // gradients. sorted_ops.emplace_back(node); - bool is_bk_op = - static_cast(boost::get(node->Op()->GetAttr( - OpProtoAndCheckerMaker::OpRoleAttrName())) & - static_cast(OpRole::kBackward)); + bool is_bk_op = static_cast( + BOOST_GET_CONST(int, node->Op()->GetAttr( + OpProtoAndCheckerMaker::OpRoleAttrName())) & + static_cast(OpRole::kBackward)); if (!is_bk_op) continue; // Currently, we assume that once gradient is generated, it can be // broadcast, and each gradient is only broadcast once. @@ -820,8 +822,9 @@ bool DistSSAGraphBuilder::DealWithSpecialOp(ir::Graph *result, "Can not schedule the RPC operator to the right place."); if (node->Op()->Type() == "recv") { auto recv_vars_attr = - boost::get>(node->Op()->GetNullableAttr( - OpProtoAndCheckerMaker::OpRoleVarAttrName())); + BOOST_GET_CONST(std::vector, + node->Op()->GetNullableAttr( + OpProtoAndCheckerMaker::OpRoleVarAttrName())); PADDLE_ENFORCE(recv_vars_attr.size() == 2UL); // [parameter, gradient] if (recv_vars_attr[0].find(".block") == std::string::npos) { bcast_var_name_set_[op_dev_id].emplace(recv_vars_attr[0]); @@ -885,7 +888,8 @@ int DistSSAGraphBuilder::CreateRPCOp(ir::Graph *result, ir::Node *node) const { for (ir::Node *n : node->inputs) { input_var_names.push_back(n->Name()); } - auto send_param_grad = boost::get>( + auto send_param_grad = BOOST_GET_CONST( + std::vector, node->Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleVarAttrName())); PADDLE_ENFORCE_EQ(send_param_grad.size(), 2U); op_dev_id = GetAppropriateDeviceID({send_param_grad[1]}); @@ -901,7 +905,8 @@ int DistSSAGraphBuilder::CreateRPCOp(ir::Graph *result, ir::Node *node) const { for (ir::Node *n : node->outputs) { output_var_names.push_back(n->Name()); } - auto recv_param_grad = boost::get>( + auto recv_param_grad = BOOST_GET_CONST( + std::vector, node->Op()->GetAttr(OpProtoAndCheckerMaker::OpRoleVarAttrName())); if (recv_param_grad.size() == 2U) { op_dev_id = GetVarDeviceID(recv_param_grad[1]); diff --git a/paddle/fluid/framework/ir/multihead_matmul_fuse_pass.cc b/paddle/fluid/framework/ir/multihead_matmul_fuse_pass.cc index 1ea6a69d72..85d20a7b9a 100644 --- a/paddle/fluid/framework/ir/multihead_matmul_fuse_pass.cc +++ b/paddle/fluid/framework/ir/multihead_matmul_fuse_pass.cc @@ -55,10 +55,10 @@ static int BuildFusion(Graph* graph, const std::string& name_scope) { Node* mul1_out, Node* mul2_out, Node* eltadd0_b, Node* eltadd1_b, Node* eltadd2_b, Node* eltadd_qk_b, Node* reshape2, Node* reshape2_qkv_out, Node* scale, Node* scale_out) { - auto scale_attr = boost::get(scale->Op()->GetAttr("scale")); - // auto scale_bias = boost::get(scale->Op()->GetAttr("bias")); + auto scale_attr = BOOST_GET_CONST(float, scale->Op()->GetAttr("scale")); + // auto scale_bias = BOOST_GET_CONST(float, scale->Op()->GetAttr("bias")); // bool after_scale = - // boost::get(scale->Op()->GetAttr("bias_after_scale")); + // BOOST_GET_CONST(bool, scale->Op()->GetAttr("bias_after_scale")); // create multihead OpDesc multihead_op_desc; @@ -78,7 +78,7 @@ static int BuildFusion(Graph* graph, const std::string& name_scope) { auto reshape_desc = reshape2->Op(); int head_number = - boost::get>(reshape_desc->GetAttr("shape")).at(2); + BOOST_GET_CONST(std::vector, reshape_desc->GetAttr("shape")).at(2); ReplaceOutputVar(mul0, mul0_out, q_var_node); ReplaceOutputVar(mul1, mul1_out, k_var_node); @@ -444,7 +444,7 @@ static int BuildFusionV2(Graph* graph, const std::string& name_scope, Node* mul1_out, Node* mul2_out, Node* mul0_w, Node* mul1_w, Node* mul2_w, Node* eltadd0_b, Node* eltadd1_b, Node* eltadd2_b, Node* eltadd_qk_b, Node* reshape2, Node* reshape2_qkv_out, Node* scale, Node* scale_out) { - auto scale_attr = boost::get(scale->Op()->GetAttr("scale")); + auto scale_attr = BOOST_GET_CONST(float, scale->Op()->GetAttr("scale")); // mul (B * S * Hidden) x (Hidden * 3 * N * H) = (B * S * 3 * N * H) // bias (B * S * 3 * N * H) + bias (3 * N * H) @@ -524,7 +524,7 @@ static int BuildFusionV2(Graph* graph, const std::string& name_scope, auto reshape_desc = reshape2->Op(); int head_number = - boost::get>(reshape_desc->GetAttr("shape")).at(2); + BOOST_GET_CONST(std::vector, reshape_desc->GetAttr("shape")).at(2); OpDesc multihead_op_desc; multihead_op_desc.SetType("multihead_matmul"); diff --git a/paddle/fluid/framework/ir/quant_conv2d_dequant_fuse_pass.cc b/paddle/fluid/framework/ir/quant_conv2d_dequant_fuse_pass.cc index d0ca452238..0c266fbc20 100644 --- a/paddle/fluid/framework/ir/quant_conv2d_dequant_fuse_pass.cc +++ b/paddle/fluid/framework/ir/quant_conv2d_dequant_fuse_pass.cc @@ -93,7 +93,8 @@ void RunQuantDequant(ir::Graph* graph, Scope* scope, int times, } } - int bit_length = boost::get(quant_op->Op()->GetAttr("bit_length")); + int bit_length = + BOOST_GET_CONST(int, quant_op->Op()->GetAttr("bit_length")); int range = ((1 << (bit_length - 1)) - 1); // Prepare input scale std::string input_scale_var_name = quant_op->Op()->Input("InScale").front(); @@ -125,9 +126,9 @@ void RunQuantDequant(ir::Graph* graph, Scope* scope, int times, delete_nodes.insert( nodes[i * kNumFields + kDequantOpWeightScaleOffset]); } else { - float max_range = boost::get( - nodes[i * kNumFields + kDequantOpOffset]->Op()->GetAttr( - "max_range")); + float max_range = BOOST_GET_CONST( + float, nodes[i * kNumFields + kDequantOpOffset]->Op()->GetAttr( + "max_range")); weight_scale.push_back((range * range) / max_range); } diff --git a/paddle/fluid/framework/ir/repeated_fc_relu_fuse_pass.cc b/paddle/fluid/framework/ir/repeated_fc_relu_fuse_pass.cc index 655ee65134..dddb2affbb 100644 --- a/paddle/fluid/framework/ir/repeated_fc_relu_fuse_pass.cc +++ b/paddle/fluid/framework/ir/repeated_fc_relu_fuse_pass.cc @@ -42,7 +42,7 @@ static bool IsOutputOfFC(Node* n) { static bool IsFCWithAct(Node* n, const std::string& act_type = "relu") { if (n && n->IsOp() && n->Op() && n->Op()->Type() == "fc" && n->inputs.size() == 3U && n->outputs.size() == 1U) { - return boost::get(n->Op()->GetAttr("activation_type")) == + return BOOST_GET_CONST(std::string, n->Op()->GetAttr("activation_type")) == act_type; } return false; diff --git a/paddle/fluid/framework/ir/seqpool_concat_fuse_pass.cc b/paddle/fluid/framework/ir/seqpool_concat_fuse_pass.cc index 5e81322ff2..ea376b371f 100644 --- a/paddle/fluid/framework/ir/seqpool_concat_fuse_pass.cc +++ b/paddle/fluid/framework/ir/seqpool_concat_fuse_pass.cc @@ -43,7 +43,7 @@ PDNode* BuildSeqPoolConcatPattern(PDPattern* pattern, bool this_is_seqpool_op = x && x->IsOp() && x->Op()->Type() == "sequence_pool" && x->Op()->HasAttr("pooltype") && - boost::get(x->Op()->GetAttr("pooltype")) == type && + BOOST_GET_CONST(std::string, x->Op()->GetAttr("pooltype")) == type && x->outputs.size() == 2; // seqpool should only have 2 outputs bool satisfied_all = this_is_seqpool_op; if (this_is_seqpool_op) { diff --git a/paddle/fluid/framework/ir/shuffle_channel_detect_pass.cc b/paddle/fluid/framework/ir/shuffle_channel_detect_pass.cc index e55783637a..92d2a6acbb 100644 --- a/paddle/fluid/framework/ir/shuffle_channel_detect_pass.cc +++ b/paddle/fluid/framework/ir/shuffle_channel_detect_pass.cc @@ -55,9 +55,9 @@ void ShuffleChannelDetectPass::ApplyImpl(ir::Graph* graph) const { std::string output_name = reshape2_out->Name(); auto reshape1_shape = - boost::get>(reshape1_desc->GetAttr("shape")); + BOOST_GET_CONST(std::vector, reshape1_desc->GetAttr("shape")); auto reshape2_shape = - boost::get>(reshape2_desc->GetAttr("shape")); + BOOST_GET_CONST(std::vector, reshape2_desc->GetAttr("shape")); int i_c = reshape1_shape[2]; int o_c = reshape2_shape[1]; diff --git a/paddle/fluid/framework/ir/simplify_with_basic_ops_pass.cc b/paddle/fluid/framework/ir/simplify_with_basic_ops_pass.cc index 61784f8c66..2e5c18d335 100644 --- a/paddle/fluid/framework/ir/simplify_with_basic_ops_pass.cc +++ b/paddle/fluid/framework/ir/simplify_with_basic_ops_pass.cc @@ -53,10 +53,10 @@ bool SimplifyWithBasicOpsPass::SimplifyDropout( // dropout_op is INT. if (dropout_op_desc->HasAttr("is_test")) { if (dropout_op_desc->GetAttrType("is_test") == proto::AttrType::BOOLEAN) { - is_test = boost::get(dropout_op_desc->GetAttr("is_test")); + is_test = BOOST_GET_CONST(bool, dropout_op_desc->GetAttr("is_test")); } else if (dropout_op_desc->GetAttrType("is_test") == proto::AttrType::INT) { - is_test = boost::get(dropout_op_desc->GetAttr("is_test")) == 0 + is_test = BOOST_GET_CONST(int, dropout_op_desc->GetAttr("is_test")) == 0 ? false : true; } @@ -74,12 +74,14 @@ bool SimplifyWithBasicOpsPass::SimplifyDropout( if (dropout_op_desc->HasAttr("dropout_implementation")) { if (dropout_op_desc->GetAttrType("dropout_implementation") == proto::AttrType::BOOLEAN) { - upscale_in_train = - boost::get(dropout_op_desc->GetAttr("dropout_implementation")); + upscale_in_train = BOOST_GET_CONST( + bool, dropout_op_desc->GetAttr("dropout_implementation")); } else if (dropout_op_desc->GetAttrType("dropout_implementation") == proto::AttrType::STRING) { - upscale_in_train = boost::get(dropout_op_desc->GetAttr( - "dropout_implementation")) == "upscale_in_train"; + upscale_in_train = + BOOST_GET_CONST(std::string, + dropout_op_desc->GetAttr("dropout_implementation")) == + "upscale_in_train"; } } @@ -129,7 +131,7 @@ bool SimplifyWithBasicOpsPass::SimplifyDropout( // \|/ // dropout_x -> scale_op -> dropout_out -> next_op -> next_out float scale = - 1.0f - boost::get(dropout_op_desc->GetAttr("dropout_prob")); + 1.0f - BOOST_GET_CONST(float, dropout_op_desc->GetAttr("dropout_prob")); framework::OpDesc new_op_desc; new_op_desc.SetType("scale"); diff --git a/paddle/fluid/framework/ir/sync_batch_norm_pass_tester.cc b/paddle/fluid/framework/ir/sync_batch_norm_pass_tester.cc index 90d214116d..eb640d2ce7 100644 --- a/paddle/fluid/framework/ir/sync_batch_norm_pass_tester.cc +++ b/paddle/fluid/framework/ir/sync_batch_norm_pass_tester.cc @@ -65,7 +65,7 @@ TEST(IsTestPass, basic) { for (auto* node : graph->Nodes()) { if (node->IsOp()) { auto* op = node->Op(); - auto op_name = boost::get(op->GetAttr("name")); + auto op_name = BOOST_GET_CONST(std::string, op->GetAttr("name")); if (op_name == "bn") { ASSERT_EQ(op->Type(), "sync_batch_norm"); } diff --git a/paddle/fluid/framework/ir/transpose_flatten_concat_fuse_pass.cc b/paddle/fluid/framework/ir/transpose_flatten_concat_fuse_pass.cc index a984a4942b..90ffaada05 100644 --- a/paddle/fluid/framework/ir/transpose_flatten_concat_fuse_pass.cc +++ b/paddle/fluid/framework/ir/transpose_flatten_concat_fuse_pass.cc @@ -75,11 +75,11 @@ void RunTransposeFlattenConcatFuse(ir::Graph *graph, int times) { Node *concat_op = subgraph.at(pattern.GetPDNode("concat")); Node *concat_out = subgraph.at(pattern.GetPDNode("concat_out")); std::vector input_names; - std::vector trans_axis = boost::get>( - nodes[kTransOffset]->Op()->GetAttr("axis")); + std::vector trans_axis = BOOST_GET_CONST( + std::vector, nodes[kTransOffset]->Op()->GetAttr("axis")); int flatten_axis = - boost::get(nodes[kFlattenOffset]->Op()->GetAttr("axis")); - int concat_axis = boost::get(concat_op->Op()->GetAttr("axis")); + BOOST_GET_CONST(int, nodes[kFlattenOffset]->Op()->GetAttr("axis")); + int concat_axis = BOOST_GET_CONST(int, concat_op->Op()->GetAttr("axis")); std::string output_name = concat_out->Name(); for (int i = 0; i < times; i++) { diff --git a/paddle/fluid/framework/mixed_vector.h b/paddle/fluid/framework/mixed_vector.h index 01ba743b06..185ebbcd3c 100644 --- a/paddle/fluid/framework/mixed_vector.h +++ b/paddle/fluid/framework/mixed_vector.h @@ -197,7 +197,7 @@ class Vector { return gpu_ == nullptr ? boost::none : boost::optional( - boost::get(gpu_->place())); + BOOST_GET_CONST(platform::CUDAPlace, gpu_->place())); } private: @@ -386,7 +386,7 @@ class Vector { std::lock_guard guard(mtx); auto cuda_place = m_.Data().CUDAPlace(); if (cuda_place == boost::none || - cuda_place == boost::get(place)) { + cuda_place == BOOST_GET(platform::CUDAPlace, place)) { return m_.Data().CUDAData(place); } } @@ -402,7 +402,7 @@ class Vector { std::lock_guard guard(mtx); auto cuda_place = m_.Data().CUDAPlace(); if (cuda_place == boost::none || - cuda_place == boost::get(place)) { + cuda_place == BOOST_GET(platform::CUDAPlace, place)) { return m_.MutableData()->CUDAMutableData(place); } } diff --git a/paddle/fluid/framework/no_need_buffer_vars_inference_test.cc b/paddle/fluid/framework/no_need_buffer_vars_inference_test.cc index 0838d43eb5..a92d52fd2e 100644 --- a/paddle/fluid/framework/no_need_buffer_vars_inference_test.cc +++ b/paddle/fluid/framework/no_need_buffer_vars_inference_test.cc @@ -30,7 +30,7 @@ TEST(test_no_need_buffer_vars_inference, test_static_graph) { ASSERT_TRUE(ctx.HasOutput("Out")); ASSERT_FALSE(ctx.HasOutput("X")); - ASSERT_TRUE(boost::get(ctx.GetAttr("is_test"))); + ASSERT_TRUE(BOOST_GET_CONST(bool, ctx.GetAttr("is_test"))); } TEST(test_no_need_buffer_vars_inference, test_dygraph) { @@ -45,7 +45,7 @@ TEST(test_no_need_buffer_vars_inference, test_dygraph) { ASSERT_TRUE(ctx.HasOutput("Out")); ASSERT_FALSE(ctx.HasOutput("X")); - ASSERT_TRUE(boost::get(ctx.GetAttr("is_test"))); + ASSERT_TRUE(BOOST_GET_CONST(bool, ctx.GetAttr("is_test"))); } DECLARE_NO_NEED_BUFFER_VARS_INFERER(TestNoNeedBufferVarsInferer, "X1", "X2"); diff --git a/paddle/fluid/framework/op_call_stack.cc b/paddle/fluid/framework/op_call_stack.cc index c3c56210b6..fdbcf74d64 100644 --- a/paddle/fluid/framework/op_call_stack.cc +++ b/paddle/fluid/framework/op_call_stack.cc @@ -30,7 +30,7 @@ void InsertCallStackInfo(const std::string &type, const AttributeMap &attrs, const std::vector *callstack = nullptr; auto iter = attrs.find(OpProtoAndCheckerMaker::OpCreationCallstackAttrName()); if (iter != attrs.end()) { - callstack = &boost::get>(iter->second); + callstack = &BOOST_GET_CONST(std::vector, iter->second); if (callstack->empty()) callstack = nullptr; } diff --git a/paddle/fluid/framework/op_desc.cc b/paddle/fluid/framework/op_desc.cc index ae33c993ef..22c82de57c 100644 --- a/paddle/fluid/framework/op_desc.cc +++ b/paddle/fluid/framework/op_desc.cc @@ -422,7 +422,7 @@ void OpDesc::SetAttr(const std::string &name, const Attribute &v) { // here if we meet this issue proto::AttrType attr_type = static_cast(v.which() - 1); if (attr_type == proto::AttrType::INTS && - boost::get>(v).size() == 0u) { + BOOST_GET_CONST(std::vector, v).size() == 0u) { // Find current attr via attr name and set the correct attribute value const proto::OpProto::Attr &attr = GetProtoAttr(name); switch (attr.type()) { @@ -472,7 +472,7 @@ void OpDesc::SetAttr(const std::string &name, const Attribute &v) { // In order to set bool attr properly if (attr_type == proto::AttrType::INT && HasProtoAttr(name) && GetProtoAttr(name).type() == proto::AttrType::BOOLEAN) { - this->attrs_[name] = static_cast(boost::get(v)); + this->attrs_[name] = static_cast(BOOST_GET_CONST(int, v)); need_update_ = true; return; } @@ -529,7 +529,7 @@ Attribute OpDesc::GetNullableAttr(const std::string &name) const { std::vector OpDesc::GetBlocksAttrIds(const std::string &name) const { auto it = attrs_.find(name); PADDLE_ENFORCE(it != attrs_.end(), "Attribute %s is not found", name); - auto blocks = boost::get>(it->second); + auto blocks = BOOST_GET_CONST(std::vector, it->second); std::vector ids; for (auto n : blocks) { @@ -542,7 +542,7 @@ std::vector OpDesc::GetBlocksAttrIds(const std::string &name) const { int OpDesc::GetBlockAttrId(const std::string &name) const { auto it = attrs_.find(name); PADDLE_ENFORCE(it != attrs_.end(), "Attribute %s is not found", name); - return boost::get(it->second)->ID(); + return BOOST_GET_CONST(BlockDesc *, it->second)->ID(); } const std::unordered_map &OpDesc::GetAttrMap() const { @@ -564,7 +564,7 @@ void OpDesc::RenameOutput(const std::string &old_name, auto it = attrs_.find(framework::OpProtoAndCheckerMaker::OpRoleVarAttrName()); if (it != attrs_.end()) { - auto &op_vars = boost::get>(it->second); + auto &op_vars = BOOST_GET(std::vector, it->second); std::replace(op_vars.begin(), op_vars.end(), old_name, new_name); } @@ -579,7 +579,7 @@ void OpDesc::RenameInput(const std::string &old_name, auto it = attrs_.find(framework::OpProtoAndCheckerMaker::OpRoleVarAttrName()); if (it != attrs_.end()) { - auto &op_vars = boost::get>(it->second); + auto &op_vars = BOOST_GET(std::vector, it->second); std::replace(op_vars.begin(), op_vars.end(), old_name, new_name); } diff --git a/paddle/fluid/framework/op_desc.h b/paddle/fluid/framework/op_desc.h index ebdb538696..2183ff251e 100644 --- a/paddle/fluid/framework/op_desc.h +++ b/paddle/fluid/framework/op_desc.h @@ -85,7 +85,7 @@ class OpDesc { T GetAttrIfExists(const std::string &name) const { T result{}; if (HasAttr(name)) { - result = boost::get(GetAttr(name)); + result = BOOST_GET_CONST(T, GetAttr(name)); } return result; } diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index 874d6a2bb0..5f9be4f2cb 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -161,7 +161,7 @@ void OperatorBase::Run(const Scope& scope, const platform::Place& place) { #ifndef PADDLE_WITH_CUDA PADDLE_THROW("Cannot run operator on place %s", place); #else - auto dev_id = boost::get(place).device; + auto dev_id = BOOST_GET_CONST(platform::CUDAPlace, place).device; platform::SetDeviceId(dev_id); #endif } diff --git a/paddle/fluid/framework/operator.h b/paddle/fluid/framework/operator.h index cfb114c9ea..8cff646186 100644 --- a/paddle/fluid/framework/operator.h +++ b/paddle/fluid/framework/operator.h @@ -157,7 +157,7 @@ class OperatorBase { inline const T& Attr(const std::string& name) const { PADDLE_ENFORCE(attrs_.find(name) != attrs_.end(), "%s should be in AttributeMap", name); - return boost::get(attrs_.at(name)); + return BOOST_GET_CONST(T, attrs_.at(name)); } const AttributeMap& Attrs() const { return attrs_; } @@ -256,7 +256,7 @@ class ExecutionContext { template inline const T& Attr(const std::string& name) const { - return boost::get(GetAttr(name)); + return BOOST_GET_CONST(T, GetAttr(name)); } virtual const Attribute& GetAttr(const std::string& name) const { diff --git a/paddle/fluid/framework/operator_test.cc b/paddle/fluid/framework/operator_test.cc index 3c1fb819da..b3ad316c96 100644 --- a/paddle/fluid/framework/operator_test.cc +++ b/paddle/fluid/framework/operator_test.cc @@ -533,7 +533,7 @@ TEST(ExecutionContextAttrAndInOut, new_api) { ASSERT_EQ(exe_context.OutputSize("output"), 1u); auto attr_map = exe_context.Attrs(); - ASSERT_EQ(boost::get(attr_map["scale"]), 3.14f); + ASSERT_EQ(BOOST_GET(float, attr_map["scale"]), 3.14f); ASSERT_EQ(exe_context.Type(), "test_operator"); } diff --git a/paddle/fluid/framework/parallel_executor.cc b/paddle/fluid/framework/parallel_executor.cc index 738a636569..ea36e83038 100644 --- a/paddle/fluid/framework/parallel_executor.cc +++ b/paddle/fluid/framework/parallel_executor.cc @@ -363,17 +363,17 @@ ir::Graph *ParallelExecutorPrivate::ApplyMemoryOptimizePass(ir::Graph *graph) { if (platform::is_gpu_place(place)) { if (IsFastEagerDeletionModeEnabled()) { gc.reset(new UnsafeFastGPUGarbageCollector( - boost::get(place), max_memory_size)); + BOOST_GET_CONST(platform::CUDAPlace, place), max_memory_size)); } else { gc.reset(new StreamGarbageCollector( - boost::get(place), max_memory_size)); + BOOST_GET_CONST(platform::CUDAPlace, place), max_memory_size)); } VLOG(10) << "Created " << i << "-th GarbageCollector at " << place; } else { #endif if (platform::is_cpu_place(place)) { - gc.reset(new CPUGarbageCollector(boost::get(place), - max_memory_size)); + gc.reset(new CPUGarbageCollector( + BOOST_GET_CONST(platform::CPUPlace, place), max_memory_size)); VLOG(10) << "Created GarbageCollector at " << place; } else { PADDLE_THROW(platform::errors::PreconditionNotMet( diff --git a/paddle/fluid/framework/program_desc.cc b/paddle/fluid/framework/program_desc.cc index 787c1f5f63..d37a16a3e7 100644 --- a/paddle/fluid/framework/program_desc.cc +++ b/paddle/fluid/framework/program_desc.cc @@ -135,7 +135,7 @@ const std::vector ProgramDesc::GetFeedTargetNames() { std::vector feed_target_names; for (auto *op : global_block.AllOps()) { if (op->Type() == kFeedOpType) { - size_t col = boost::get(op->GetAttr("col")); + size_t col = BOOST_GET_CONST(int, op->GetAttr("col")); if (col >= feed_target_names.size()) { feed_target_names.resize(col + 1); } @@ -152,7 +152,7 @@ const std::vector ProgramDesc::GetFetchTargetNames() { std::vector fetch_target_names; for (auto *op : global_block.AllOps()) { if (op->Type() == kFetchOpType) { - size_t col = boost::get(op->GetAttr("col")); + size_t col = BOOST_GET_CONST(int, op->GetAttr("col")); if (col >= fetch_target_names.size()) { fetch_target_names.resize(col + 1); } diff --git a/paddle/fluid/framework/prune.cc b/paddle/fluid/framework/prune.cc index f5e20e041e..919378c929 100644 --- a/paddle/fluid/framework/prune.cc +++ b/paddle/fluid/framework/prune.cc @@ -405,8 +405,8 @@ std::tuple> PruneBackward( for (size_t i = 0; i < origin_clone.Size(); i++) { auto block_ops = origin_clone.Block(i).AllOps(); for (auto op : block_ops) { - int op_role = boost::get( - op->GetAttr(OpProtoAndCheckerMaker::OpRoleAttrName())); + int op_role = BOOST_GET_MUTABLE( + int, op->GetAttr(OpProtoAndCheckerMaker::OpRoleAttrName())); if (op_role == (static_cast(OpRole::kBackward) | static_cast(OpRole::kLoss))) { op->SetIsTarget(false); diff --git a/paddle/fluid/framework/tensor_util.cc b/paddle/fluid/framework/tensor_util.cc index 75d3597bab..853abda734 100644 --- a/paddle/fluid/framework/tensor_util.cc +++ b/paddle/fluid/framework/tensor_util.cc @@ -51,36 +51,36 @@ void TensorCopy(const Tensor& src, const platform::Place& dst_place, auto size = src.numel() * SizeOfType(src.type()); if (platform::is_cpu_place(src_place) && platform::is_cpu_place(dst_place)) { - memory::Copy(boost::get(dst_place), dst_ptr, - boost::get(src_place), src_ptr, size); + memory::Copy(BOOST_GET_CONST(platform::CPUPlace, dst_place), dst_ptr, + BOOST_GET_CONST(platform::CPUPlace, src_place), src_ptr, size); } #ifdef PADDLE_WITH_CUDA else if (platform::is_gpu_place(src_place) && // NOLINT platform::is_cpu_place(dst_place)) { - auto src_gpu_place = boost::get(src_place); - auto dst_cpu_place = boost::get(dst_place); + auto src_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, src_place); + auto dst_cpu_place = BOOST_GET_CONST(platform::CPUPlace, dst_place); auto ctx_place = ctx.GetPlace(); PADDLE_ENFORCE_EQ(platform::is_gpu_place(ctx_place), true); - auto ctx_gpu_place = boost::get(ctx_place); + auto ctx_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, ctx_place); PADDLE_ENFORCE_EQ(src_gpu_place, ctx_gpu_place); auto stream = reinterpret_cast(ctx).stream(); memory::Copy(dst_cpu_place, dst_ptr, src_gpu_place, src_ptr, size, stream); } else if (platform::is_cpu_place(src_place) && platform::is_gpu_place(dst_place)) { - auto src_cpu_place = boost::get(src_place); - auto dst_gpu_place = boost::get(dst_place); + auto src_cpu_place = BOOST_GET_CONST(platform::CPUPlace, src_place); + auto dst_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, dst_place); auto ctx_place = ctx.GetPlace(); PADDLE_ENFORCE_EQ(platform::is_gpu_place(ctx_place), true); - auto ctx_gpu_place = boost::get(ctx_place); + auto ctx_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, ctx_place); PADDLE_ENFORCE_EQ(dst_gpu_place, ctx_gpu_place); auto stream = reinterpret_cast(ctx).stream(); memory::Copy(dst_gpu_place, dst_ptr, src_cpu_place, src_ptr, size, stream); } else if (platform::is_gpu_place(src_place) && platform::is_gpu_place(dst_place)) { - auto src_gpu_place = boost::get(src_place); - auto dst_gpu_place = boost::get(dst_place); + auto src_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, src_place); + auto dst_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, dst_place); auto ctx_place = ctx.GetPlace(); PADDLE_ENFORCE_EQ(platform::is_gpu_place(ctx_place), true); auto stream = @@ -144,29 +144,30 @@ void TensorCopySync(const Tensor& src, const platform::Place& dst_place, auto size = src.numel() * SizeOfType(src.type()); if (platform::is_cpu_place(src_place) && platform::is_cpu_place(dst_place)) { - memory::Copy(boost::get(dst_place), dst_ptr, - boost::get(src_place), src_ptr, size); + memory::Copy(BOOST_GET_CONST(platform::CPUPlace, dst_place), dst_ptr, + BOOST_GET_CONST(platform::CPUPlace, src_place), src_ptr, size); } #ifdef PADDLE_WITH_CUDA else if (platform::is_gpu_place(src_place) && // NOLINT platform::is_cpu_place(dst_place)) { - auto src_gpu_place = boost::get(src_place); - auto dst_cpu_place = boost::get(dst_place); + auto src_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, src_place); + auto dst_cpu_place = BOOST_GET_CONST(platform::CPUPlace, dst_place); memory::Copy(dst_cpu_place, dst_ptr, src_gpu_place, src_ptr, size, nullptr); } else if (platform::is_cpu_place(src_place) && platform::is_gpu_place(dst_place)) { - auto src_cpu_place = boost::get(src_place); - auto dst_gpu_place = boost::get(dst_place); + auto src_cpu_place = BOOST_GET_CONST(platform::CPUPlace, src_place); + auto dst_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, dst_place); memory::Copy(dst_gpu_place, dst_ptr, src_cpu_place, src_ptr, size, nullptr); } else if (platform::is_gpu_place(src_place) && platform::is_gpu_place(dst_place)) { - auto src_gpu_place = boost::get(src_place); - auto dst_gpu_place = boost::get(dst_place); + auto src_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, src_place); + auto dst_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, dst_place); memory::Copy(dst_gpu_place, dst_ptr, src_gpu_place, src_ptr, size, nullptr); } else if (platform::is_cuda_pinned_place(src_place) && platform::is_gpu_place(dst_place)) { - auto src_pinned_place = boost::get(src_place); - auto dst_gpu_place = boost::get(dst_place); + auto src_pinned_place = + BOOST_GET_CONST(platform::CUDAPinnedPlace, src_place); + auto dst_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, dst_place); memory::Copy(dst_gpu_place, dst_ptr, src_pinned_place, src_ptr, size, nullptr); } else { @@ -419,7 +420,7 @@ void TensorToStream(std::ostream& os, const Tensor& tensor, while (size != 0) { size_t size_to_write = std::min(kBufSize, static_cast(size)); memory::Copy(cpu, buf.get(), - boost::get(tensor.place()), + BOOST_GET_CONST(platform::CUDAPlace, tensor.place()), reinterpret_cast(data), size_to_write, gpu_dev_ctx.stream()); gpu_dev_ctx.Wait(); diff --git a/paddle/fluid/framework/tensor_util.h b/paddle/fluid/framework/tensor_util.h index 65003d9a35..c71327da64 100644 --- a/paddle/fluid/framework/tensor_util.h +++ b/paddle/fluid/framework/tensor_util.h @@ -94,14 +94,14 @@ void TensorFromArray(const T* src, const size_t& array_size, auto size = array_size * sizeof(T); if (platform::is_cpu_place(dst_place)) { - memory::Copy(boost::get(dst_place), dst_ptr, src_place, - src_ptr, size); + memory::Copy(BOOST_GET_CONST(platform::CPUPlace, dst_place), dst_ptr, + src_place, src_ptr, size); } #ifdef PADDLE_WITH_CUDA else if (platform::is_gpu_place(dst_place)) { // NOLINT memory::Copy( - boost::get(dst_place), dst_ptr, src_place, src_ptr, - size, + BOOST_GET_CONST(platform::CUDAPlace, dst_place), dst_ptr, src_place, + src_ptr, size, reinterpret_cast(ctx).stream()); } #endif @@ -117,14 +117,14 @@ void TensorFromVector(const std::vector& src, auto size = src.size() * sizeof(T); if (platform::is_cpu_place(dst_place)) { - memory::Copy(boost::get(dst_place), dst_ptr, src_place, - src_ptr, size); + memory::Copy(BOOST_GET_CONST(platform::CPUPlace, dst_place), dst_ptr, + src_place, src_ptr, size); } #ifdef PADDLE_WITH_CUDA else if (platform::is_gpu_place(dst_place)) { // NOLINT memory::Copy( - boost::get(dst_place), dst_ptr, src_place, src_ptr, - size, + BOOST_GET_CONST(platform::CUDAPlace, dst_place), dst_ptr, src_place, + src_ptr, size, reinterpret_cast(ctx).stream()); } #endif @@ -154,12 +154,13 @@ void TensorToVector(const Tensor& src, const platform::DeviceContext& ctx, if (platform::is_cpu_place(src.place())) { memory::Copy(dst_place, dst_ptr, - boost::get(src.place()), src_ptr, size); + BOOST_GET_CONST(platform::CPUPlace, src.place()), src_ptr, + size); } #ifdef PADDLE_WITH_CUDA else if (platform::is_gpu_place(src.place())) { // NOLINT memory::Copy( - dst_place, dst_ptr, boost::get(src.place()), + dst_place, dst_ptr, BOOST_GET_CONST(platform::CUDAPlace, src.place()), src_ptr, size, reinterpret_cast(ctx).stream()); } @@ -177,8 +178,8 @@ void TensorToVector(const Tensor& src, std::vector* dst) { PADDLE_ENFORCE_EQ(platform::is_cpu_place(src.place()), true); - memory::Copy(dst_place, dst_ptr, boost::get(src.place()), - src_ptr, size); + memory::Copy(dst_place, dst_ptr, + BOOST_GET_CONST(platform::CPUPlace, src.place()), src_ptr, size); } std::ostream& operator<<(std::ostream& os, const Tensor& t); diff --git a/paddle/fluid/framework/tuple_test.cc b/paddle/fluid/framework/tuple_test.cc index 810900f161..cfdd4dc56e 100644 --- a/paddle/fluid/framework/tuple_test.cc +++ b/paddle/fluid/framework/tuple_test.cc @@ -25,9 +25,9 @@ TEST(Tuple, Make) { paddle::framework::Tuple* tuple = paddle::framework::make_tuple(element_type); - EXPECT_EQ(boost::get(tuple->get(0)), 12); - EXPECT_EQ(boost::get(tuple->get(1)), 12.0f); - EXPECT_EQ(boost::get(tuple->get(2)), "ElementVar"); + EXPECT_EQ(BOOST_GET(int, tuple->get(0)), 12); + EXPECT_EQ(BOOST_GET(float, tuple->get(1)), 12.0f); + EXPECT_EQ(BOOST_GET(std::string, tuple->get(2)), "ElementVar"); delete tuple; } diff --git a/paddle/fluid/imperative/dygraph_grad_maker.h b/paddle/fluid/imperative/dygraph_grad_maker.h index 757f419369..a7bb47d40d 100644 --- a/paddle/fluid/imperative/dygraph_grad_maker.h +++ b/paddle/fluid/imperative/dygraph_grad_maker.h @@ -123,7 +123,7 @@ class GradOpBaseMakerBase { template inline const T& Attr(const std::string& name) const { - return boost::get(GetAttr(name)); + return BOOST_GET_CONST(T, GetAttr(name)); } const std::string& ForwardOpType() const { return type_; } diff --git a/paddle/fluid/imperative/nccl_context.cc b/paddle/fluid/imperative/nccl_context.cc index e9987c762b..115078e7ea 100644 --- a/paddle/fluid/imperative/nccl_context.cc +++ b/paddle/fluid/imperative/nccl_context.cc @@ -123,7 +123,7 @@ void NCCLParallelContext::Init() { } else { BcastNCCLId(&nccl_id, 0); } - int gpu_id = boost::get(place_).device; + int gpu_id = BOOST_GET_CONST(platform::CUDAPlace, place_).device; VLOG(0) << "init nccl context nranks: " << strategy_.nranks_ << " local rank: " << strategy_.local_rank_ << " gpu id: " << gpu_id; diff --git a/paddle/fluid/imperative/op_base.h b/paddle/fluid/imperative/op_base.h index fa0e66ee1e..a4b57c404c 100644 --- a/paddle/fluid/imperative/op_base.h +++ b/paddle/fluid/imperative/op_base.h @@ -120,7 +120,7 @@ class OpBase { template inline const T& Attr(const std::string& name) const { - return boost::get(GetAttr(name)); + return BOOST_GET_CONST(T, GetAttr(name)); } size_t id() const { return id_; } diff --git a/paddle/fluid/imperative/tests/test_layer.cc b/paddle/fluid/imperative/tests/test_layer.cc index a28916b59c..a231e16100 100644 --- a/paddle/fluid/imperative/tests/test_layer.cc +++ b/paddle/fluid/imperative/tests/test_layer.cc @@ -362,7 +362,7 @@ TEST(test_layer, test_dygraph_execution_context) { ASSERT_EQ(dy_exe_context.InputName("X"), "vin"); ASSERT_EQ(dy_exe_context.HasAttr("axis"), true); auto attr_map = dy_exe_context.Attrs(); - ASSERT_EQ(boost::get(attr_map["axis"]), 1); + ASSERT_EQ(BOOST_GET(int, attr_map["axis"]), 1); ASSERT_EQ(dy_exe_context.OutputSize("Out"), 1u); ASSERT_EQ(dy_exe_context.HasOutput("Out"), true); } diff --git a/paddle/fluid/inference/analysis/ir_passes/subgraph_util.cc b/paddle/fluid/inference/analysis/ir_passes/subgraph_util.cc index 22f17d440e..b3bfafb0a1 100644 --- a/paddle/fluid/inference/analysis/ir_passes/subgraph_util.cc +++ b/paddle/fluid/inference/analysis/ir_passes/subgraph_util.cc @@ -177,9 +177,9 @@ void RenameAndGetOutputs( auto out_var_name = op_desc.Output("Output").front(); auto filter_shape = in_vars[filter_var_name]->Var()->GetShape(); const std::vector strides = - boost::get>(op_desc.GetAttr("strides")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("strides")); const std::vector paddings = - boost::get>(op_desc.GetAttr("paddings")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("paddings")); if (same_hierarchy_conv2d_num_map[input_var_name] > 0) { (*output_names_with_id) .insert(out_var_name + std::to_string(var2id[out_var_name])); diff --git a/paddle/fluid/inference/api/analysis_predictor.cc b/paddle/fluid/inference/api/analysis_predictor.cc index 56eb65178d..bbe5596e19 100644 --- a/paddle/fluid/inference/api/analysis_predictor.cc +++ b/paddle/fluid/inference/api/analysis_predictor.cc @@ -109,7 +109,7 @@ bool PaddleTensorToLoDTensor(const PaddleTensor &pt, framework::LoDTensor *t, platform::DeviceContextPool &pool = platform::DeviceContextPool::Instance(); auto *dev_ctx = static_cast(pool.Get(place)); - auto dst_gpu_place = boost::get(place); + auto dst_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, place); memory::Copy(dst_gpu_place, static_cast(input_ptr), platform::CPUPlace(), pt.data.data(), pt.data.length(), dev_ctx->stream()); @@ -366,7 +366,7 @@ bool AnalysisPredictor::SetFeed(const std::vector &inputs, } idx = feed_names_[name]; } else { - idx = boost::get(feeds_[i]->GetAttr("col")); + idx = BOOST_GET_CONST(int, feeds_[i]->GetAttr("col")); } framework::SetFeedVariable(scope, *input, "feed", idx); } @@ -398,11 +398,11 @@ bool AnalysisPredictor::GetFetch(std::vector *outputs, VLOG(3) << "Predictor::get_fetch"; outputs->resize(fetches_.size()); for (size_t i = 0; i < fetches_.size(); ++i) { - int idx = boost::get(fetches_[i]->GetAttr("col")); + int idx = BOOST_GET_CONST(int, fetches_[i]->GetAttr("col")); PADDLE_ENFORCE((size_t)idx == i); framework::FetchType &fetch_var = framework::GetFetchVariable(*scope, "fetch", idx); - auto &fetch = boost::get(fetch_var); + auto &fetch = BOOST_GET(framework::LoDTensor, fetch_var); auto type = fetch.type(); auto output = &(outputs->at(i)); output->name = fetches_[idx]->Input("X")[0]; @@ -619,7 +619,7 @@ void AnalysisPredictor::PrepareFeedFetch() { CreateFeedFetchVar(sub_scope_); for (auto *op : inference_program_->Block(0).AllOps()) { if (op->Type() == "feed") { - int idx = boost::get(op->GetAttr("col")); + int idx = BOOST_GET_CONST(int, op->GetAttr("col")); if (feeds_.size() <= static_cast(idx)) { feeds_.resize(idx + 1); } @@ -627,7 +627,7 @@ void AnalysisPredictor::PrepareFeedFetch() { feed_names_[op->Output("Out")[0]] = idx; idx2feeds_[idx] = op->Output("Out")[0]; } else if (op->Type() == "fetch") { - int idx = boost::get(op->GetAttr("col")); + int idx = BOOST_GET_CONST(int, op->GetAttr("col")); if (fetches_.size() <= static_cast(idx)) { fetches_.resize(idx + 1); } @@ -683,7 +683,7 @@ std::unique_ptr AnalysisPredictor::GetInputTensor( if (platform::is_cpu_place(place_)) { res->SetPlace(PaddlePlace::kCPU); } else { - auto gpu_place = boost::get(place_); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, place_); res->SetPlace(PaddlePlace::kGPU, gpu_place.GetDeviceId()); } @@ -700,7 +700,7 @@ std::unique_ptr AnalysisPredictor::GetOutputTensor( if (platform::is_cpu_place(place_)) { res->SetPlace(PaddlePlace::kCPU); } else { - auto gpu_place = boost::get(place_); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, place_); res->SetPlace(PaddlePlace::kGPU, gpu_place.GetDeviceId()); } return res; @@ -834,7 +834,7 @@ bool AnalysisPredictor::SaveTrtCalibToDisk() { for (auto &op_desc : block.AllOps()) { if (op_desc->Type() == "tensorrt_engine") { std::string engine_name = - boost::get(op_desc->GetAttr("engine_key")); + BOOST_GET_CONST(std::string, op_desc->GetAttr("engine_key")); if (!Singleton::Global().Has(engine_name)) { LOG(ERROR) << "You should run the predictor(with trt) on the real data " "to generate calibration info"; diff --git a/paddle/fluid/inference/api/api_impl.cc b/paddle/fluid/inference/api/api_impl.cc index 529d641d46..3d5b40c93d 100644 --- a/paddle/fluid/inference/api/api_impl.cc +++ b/paddle/fluid/inference/api/api_impl.cc @@ -46,14 +46,14 @@ std::string num2str(T a) { void NativePaddlePredictor::PrepareFeedFetch() { for (auto *op : inference_program_->Block(0).AllOps()) { if (op->Type() == "feed") { - int idx = boost::get(op->GetAttr("col")); + int idx = BOOST_GET_CONST(int, op->GetAttr("col")); if (feeds_.size() <= static_cast(idx)) { feeds_.resize(idx + 1); } feeds_[idx] = op; feed_names_[op->Output("Out")[0]] = idx; } else if (op->Type() == "fetch") { - int idx = boost::get(op->GetAttr("col")); + int idx = BOOST_GET_CONST(int, op->GetAttr("col")); if (fetchs_.size() <= static_cast(idx)) { fetchs_.resize(idx + 1); } @@ -234,7 +234,7 @@ bool NativePaddlePredictor::SetFeed(const std::vector &inputs, platform::DeviceContextPool::Instance(); auto *dev_ctx = static_cast(pool.Get(place_)); - auto dst_gpu_place = boost::get(place_); + auto dst_gpu_place = BOOST_GET_CONST(platform::CUDAPlace, place_); memory::Copy(dst_gpu_place, static_cast(input_ptr), platform::CPUPlace(), inputs[i].data.data(), inputs[i].data.length(), dev_ctx->stream()); @@ -253,7 +253,7 @@ bool NativePaddlePredictor::SetFeed(const std::vector &inputs, if (config_.specify_input_name) { idx = feed_names_[inputs[i].name]; } else { - idx = boost::get(feeds_[i]->GetAttr("col")); + idx = BOOST_GET_CONST(int, feeds_[i]->GetAttr("col")); } framework::SetFeedVariable(scope, input, "feed", idx); } @@ -284,11 +284,11 @@ bool NativePaddlePredictor::GetFetch(std::vector *outputs, VLOG(3) << "Predictor::get_fetch"; outputs->resize(fetchs_.size()); for (size_t i = 0; i < fetchs_.size(); ++i) { - int idx = boost::get(fetchs_[i]->GetAttr("col")); + int idx = BOOST_GET_CONST(int, fetchs_[i]->GetAttr("col")); PADDLE_ENFORCE((size_t)idx == i); framework::FetchType &fetch_var = framework::GetFetchVariable(*scope, "fetch", idx); - auto fetch = boost::get(fetch_var); + auto fetch = BOOST_GET_CONST(framework::LoDTensor, fetch_var); auto type = fetch.type(); auto output = &(outputs->at(i)); output->name = fetchs_[idx]->Input("X")[0]; diff --git a/paddle/fluid/inference/api/api_impl_tester.cc b/paddle/fluid/inference/api/api_impl_tester.cc index 86f8de9708..45e55e95a2 100644 --- a/paddle/fluid/inference/api/api_impl_tester.cc +++ b/paddle/fluid/inference/api/api_impl_tester.cc @@ -108,7 +108,7 @@ void MainWord2Vec(bool use_gpu) { TestInference(config.model_dir, cpu_feeds, cpu_fetchs1); - auto output1_tensor = boost::get(output1); + auto output1_tensor = BOOST_GET(paddle::framework::LoDTensor, output1); float* lod_data = output1_tensor.data(); for (int i = 0; i < output1_tensor.numel(); ++i) { EXPECT_LT(lod_data[i] - data[i], ACC_DIFF); @@ -155,7 +155,7 @@ void MainImageClassification(bool use_gpu) { size_t len = outputs[0].data.length(); float* data = static_cast(outputs[0].data.data()); float* lod_data = - boost::get(output1).data(); + BOOST_GET(paddle::framework::LoDTensor, output1).data(); for (size_t j = 0; j < len / sizeof(float); ++j) { EXPECT_NEAR(lod_data[j], data[j], ACC_DIFF); } @@ -209,7 +209,7 @@ void MainThreadsWord2Vec(bool use_gpu) { } // check outputs correctness - auto ref_tensor = boost::get(refs[tid]); + auto ref_tensor = BOOST_GET(paddle::framework::LoDTensor, refs[tid]); float* ref_data = ref_tensor.data(); EXPECT_EQ(ref_tensor.numel(), static_cast(len / sizeof(float))); for (int i = 0; i < ref_tensor.numel(); ++i) { @@ -262,7 +262,7 @@ void MainThreadsImageClassification(bool use_gpu) { ASSERT_EQ(local_outputs.size(), 1UL); const size_t len = local_outputs[0].data.length(); float* data = static_cast(local_outputs[0].data.data()); - auto ref_tensor = boost::get(refs[tid]); + auto ref_tensor = BOOST_GET(paddle::framework::LoDTensor, refs[tid]); float* ref_data = ref_tensor.data(); EXPECT_EQ((size_t)ref_tensor.numel(), len / sizeof(float)); for (int i = 0; i < ref_tensor.numel(); ++i) { diff --git a/paddle/fluid/inference/api/details/zero_copy_tensor.cc b/paddle/fluid/inference/api/details/zero_copy_tensor.cc index 444ac5b031..6078198da9 100644 --- a/paddle/fluid/inference/api/details/zero_copy_tensor.cc +++ b/paddle/fluid/inference/api/details/zero_copy_tensor.cc @@ -133,7 +133,7 @@ void ZeroCopyTensor::copy_to_cpu(T *data) { } else { #ifdef PADDLE_WITH_CUDA platform::DeviceContextPool &pool = platform::DeviceContextPool::Instance(); - auto gpu_place = boost::get(t_place); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, t_place); auto *dev_ctx = static_cast(pool.Get(gpu_place)); memory::Copy(platform::CPUPlace(), static_cast(data), gpu_place, diff --git a/paddle/fluid/inference/api/mkldnn_quantizer.cc b/paddle/fluid/inference/api/mkldnn_quantizer.cc index dc8559e324..0dddbf1587 100644 --- a/paddle/fluid/inference/api/mkldnn_quantizer.cc +++ b/paddle/fluid/inference/api/mkldnn_quantizer.cc @@ -51,7 +51,7 @@ bool AnalysisPredictor::MkldnnQuantizer::CalculateScales() { std::map> gathered_data; for (const auto* op : predictor_.inference_program_->Block(0).AllOps()) { if (op->HasAttr("use_quantizer") && - boost::get(op->GetAttr("use_quantizer"))) { + BOOST_GET_CONST(bool, op->GetAttr("use_quantizer"))) { const VariableNameMap& connections_in = op->Inputs(); const VariableNameMap& connections_out = op->Outputs(); diff --git a/paddle/fluid/inference/lite/tensor_utils.cc b/paddle/fluid/inference/lite/tensor_utils.cc index 6138e64e2d..ead52ff35b 100644 --- a/paddle/fluid/inference/lite/tensor_utils.cc +++ b/paddle/fluid/inference/lite/tensor_utils.cc @@ -118,7 +118,7 @@ void MemoryCopyAsync(const platform::Place& dst_place, void* dst_data, LOG(FATAL) << "lite::MemoryCopy CPU->GPU is not yet implemented."; } else if (platform::is_gpu_place(dst_place) && platform::is_gpu_place(src_place)) { - auto gpu_place = boost::get(src_place); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, src_place); memory::Copy( gpu_place, dst_data, gpu_place, src_data, size, static_cast(ctx).stream()); diff --git a/paddle/fluid/inference/tensorrt/convert/activation_op.cc b/paddle/fluid/inference/tensorrt/convert/activation_op.cc index 8f9f157950..1a428e205c 100644 --- a/paddle/fluid/inference/tensorrt/convert/activation_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/activation_op.cc @@ -58,7 +58,7 @@ class ActivationOpConverter : public OpConverter { RreplenishLayerAndOutput(layer, op_type_, {output_name}, test_mode); if (op_desc.HasAttr("out_scale")) { #if IS_TRT_VERSION_GE(5130) - float out_scale = boost::get(op_desc.GetAttr("out_scale")); + float out_scale = BOOST_GET_CONST(float, op_desc.GetAttr("out_scale")); engine_->SetTensorDynamicRange(layer->getOutput(0), out_scale); #endif } diff --git a/paddle/fluid/inference/tensorrt/convert/batch_norm_op.cc b/paddle/fluid/inference/tensorrt/convert/batch_norm_op.cc index 99b9f5746b..f67370b338 100644 --- a/paddle/fluid/inference/tensorrt/convert/batch_norm_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/batch_norm_op.cc @@ -64,7 +64,7 @@ class BatchNormOpConverter : public OpConverter { auto* Mean_v = scope.FindVar(op_desc.Input("Mean").front()); auto* Scale_v = scope.FindVar(op_desc.Input("Scale").front()); auto* Variance_v = scope.FindVar(op_desc.Input("Variance").front()); - const float eps = boost::get(op_desc.GetAttr("epsilon")); + const float eps = BOOST_GET_CONST(float, op_desc.GetAttr("epsilon")); PADDLE_ENFORCE_NOT_NULL( Bias_v, diff --git a/paddle/fluid/inference/tensorrt/convert/concat_op.cc b/paddle/fluid/inference/tensorrt/convert/concat_op.cc index 1793920f0a..28afb87a89 100644 --- a/paddle/fluid/inference/tensorrt/convert/concat_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/concat_op.cc @@ -33,7 +33,7 @@ class ConcatOpConverter : public OpConverter { for (auto& input_name : op_desc.Input("X")) { itensors.push_back(engine_->GetITensor(input_name)); } - int axis = boost::get(op_desc.GetAttr("axis")); + int axis = BOOST_GET_CONST(int, op_desc.GetAttr("axis")); PADDLE_ENFORCE(axis > 0, "The axis attr of Concat op should be large than 0 for trt"); diff --git a/paddle/fluid/inference/tensorrt/convert/conv2d_op.cc b/paddle/fluid/inference/tensorrt/convert/conv2d_op.cc index e14034b152..9077348233 100644 --- a/paddle/fluid/inference/tensorrt/convert/conv2d_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/conv2d_op.cc @@ -47,14 +47,14 @@ void ConvertConv2d(TensorRTEngine* engine, const framework::proto::OpDesc& op, "Can not find %s presistale var in scope.", filter_var_name)); auto* Y_t = Y_v->GetMutable(); float* weight_data = nullptr; - bool enable_int8 = boost::get(op_desc.HasAttr("enable_int8")); + bool enable_int8 = op_desc.HasAttr("enable_int8"); if (enable_int8) { #if IS_TRT_VERSION_GE(5000) CHECK(op_desc.HasAttr("Input_scale")); - float in_scale = boost::get(op_desc.GetAttr("Input_scale")); + float in_scale = BOOST_GET_CONST(float, op_desc.GetAttr("Input_scale")); auto weight_scale = - boost::get>(op_desc.GetAttr("weight_scale")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("weight_scale")); weight_data = engine->GetWeightCPUData(op_desc.Input("Filter").front(), Y_t, true, weight_scale); engine->SetTensorDynamicRange(X, in_scale); @@ -73,13 +73,13 @@ void ConvertConv2d(TensorRTEngine* engine, const framework::proto::OpDesc& op, const int n_input = Y_t->dims()[1]; const int filter_h = Y_t->dims()[2]; const int filter_w = Y_t->dims()[3]; - const int groups = boost::get(op_desc.GetAttr("groups")); + const int groups = BOOST_GET_CONST(int, op_desc.GetAttr("groups")); const std::vector dilations = - boost::get>(op_desc.GetAttr("dilations")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("dilations")); const std::vector strides = - boost::get>(op_desc.GetAttr("strides")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("strides")); const std::vector paddings = - boost::get>(op_desc.GetAttr("paddings")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("paddings")); nvinfer1::DimsHW nv_ksize(filter_h, filter_w); nvinfer1::DimsHW nv_dilations(dilations[0], dilations[1]); diff --git a/paddle/fluid/inference/tensorrt/convert/dropout_op.cc b/paddle/fluid/inference/tensorrt/convert/dropout_op.cc index cd28c6d98a..0541d89170 100644 --- a/paddle/fluid/inference/tensorrt/convert/dropout_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/dropout_op.cc @@ -29,12 +29,13 @@ class DropoutOpConverter : public OpConverter { framework::OpDesc op_desc(op, nullptr); // Declare inputs auto* input1 = engine_->GetITensor(op_desc.Input("X")[0]); - float dropout_prob = boost::get(op_desc.GetAttr("dropout_prob")); + float dropout_prob = + BOOST_GET_CONST(float, op_desc.GetAttr("dropout_prob")); std::string downgrade_in_infer = ""; if (op_desc.HasAttr("dropout_implementation")) { - downgrade_in_infer = - boost::get(op_desc.GetAttr("dropout_implementation")); + downgrade_in_infer = BOOST_GET_CONST( + std::string, op_desc.GetAttr("dropout_implementation")); } if (!downgrade_in_infer.empty() && diff --git a/paddle/fluid/inference/tensorrt/convert/elementwise_op.cc b/paddle/fluid/inference/tensorrt/convert/elementwise_op.cc index 3f739d0fe9..c4f0855dbb 100644 --- a/paddle/fluid/inference/tensorrt/convert/elementwise_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/elementwise_op.cc @@ -82,7 +82,7 @@ class ElementwiseWeightOpConverter : public OpConverter { if (op_desc.HasAttr("enable_int8")) { #if IS_TRT_VERSION_GE(5000) CHECK(op_desc.HasAttr("X_scale")); - float x_scale = boost::get(op_desc.GetAttr("X_scale")); + float x_scale = BOOST_GET_CONST(float, op_desc.GetAttr("X_scale")); engine_->SetTensorDynamicRange(X, x_scale); #endif } @@ -188,7 +188,7 @@ class ElementwiseTensorOpConverter : public OpConverter { nvinfer1::Dims dims_x = X->getDimensions(); nvinfer1::Dims dims_y = Y->getDimensions(); - int axis = boost::get(op_desc.GetAttr("axis")); + int axis = BOOST_GET_CONST(int, op_desc.GetAttr("axis")); auto output_name = op_desc.Output("Out")[0]; auto common_func = [&](nvinfer1::ILayer* layer) { @@ -197,8 +197,8 @@ class ElementwiseTensorOpConverter : public OpConverter { #if IS_TRT_VERSION_GE(5000) CHECK(op_desc.HasAttr("X_scale")); CHECK(op_desc.HasAttr("Y_scale")); - float x_scale = boost::get(op_desc.GetAttr("X_scale")); - float y_scale = boost::get(op_desc.GetAttr("Y_scale")); + float x_scale = BOOST_GET_CONST(float, op_desc.GetAttr("X_scale")); + float y_scale = BOOST_GET_CONST(float, op_desc.GetAttr("Y_scale")); engine_->SetTensorDynamicRange(X, x_scale); engine_->SetTensorDynamicRange(Y, y_scale); #endif diff --git a/paddle/fluid/inference/tensorrt/convert/emb_eltwise_layernorm.cc b/paddle/fluid/inference/tensorrt/convert/emb_eltwise_layernorm.cc index 253f5a80db..8c0f1896ed 100644 --- a/paddle/fluid/inference/tensorrt/convert/emb_eltwise_layernorm.cc +++ b/paddle/fluid/inference/tensorrt/convert/emb_eltwise_layernorm.cc @@ -79,7 +79,7 @@ class EmbEltwiseLayerNormOpConverter : public OpConverter { get_persistable_data(op_desc.Input("Scale").front(), &scale_dims); int64_t bias_size = framework::product(bias_dims); int64_t scale_size = framework::product(scale_dims); - float eps = boost::get(op_desc.GetAttr("epsilon")); + float eps = BOOST_GET_CONST(float, op_desc.GetAttr("epsilon")); nvinfer1::ILayer* layer = nullptr; if (engine_->with_dynamic_shape()) { diff --git a/paddle/fluid/inference/tensorrt/convert/fc_op.cc b/paddle/fluid/inference/tensorrt/convert/fc_op.cc index fea1f1ffaa..511dd9d54f 100644 --- a/paddle/fluid/inference/tensorrt/convert/fc_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/fc_op.cc @@ -46,24 +46,25 @@ class FcOpConverter : public OpConverter { auto* Y_t = Y_v->GetMutable(); const int x_num_col_dims = op_desc.HasAttr("x_num_col_dims") - ? boost::get(op_desc.GetAttr("x_num_col_dims")) + ? BOOST_GET_CONST(int, op_desc.GetAttr("x_num_col_dims")) : (op_desc.HasAttr("in_num_col_dims") - ? boost::get(op_desc.GetAttr("in_num_col_dims")) + ? BOOST_GET_CONST(int, op_desc.GetAttr("in_num_col_dims")) : 1); const std::string activation_type = op_desc.HasAttr("activation_type") - ? boost::get(op_desc.GetAttr("activation_type")) + ? BOOST_GET_CONST(std::string, op_desc.GetAttr("activation_type")) : ""; // This may trigger a GPU->CPU copy, because TRT's weight can only be // assigned from CPU memory, which can't be avoided. float* weight_data = nullptr; - bool enable_int8 = boost::get(op_desc.HasAttr("enable_int8")); + bool enable_int8 = op_desc.HasAttr("enable_int8"); if (enable_int8) { #if IS_TRT_VERSION_GE(5000) CHECK(op_desc.HasAttr(i_name + "_scale")); - float in_scale = boost::get(op_desc.GetAttr(i_name + "_scale")); + float in_scale = + BOOST_GET_CONST(float, op_desc.GetAttr(i_name + "_scale")); auto weight_scale = - boost::get>(op_desc.GetAttr("weight_scale")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("weight_scale")); weight_data = engine_->GetWeightCPUData(op_desc.Input(w_name).front(), Y_t, true, weight_scale); engine_->SetTensorDynamicRange(X, in_scale); diff --git a/paddle/fluid/inference/tensorrt/convert/hard_sigmoid_op.cc b/paddle/fluid/inference/tensorrt/convert/hard_sigmoid_op.cc index 301b4140ac..529c845a12 100644 --- a/paddle/fluid/inference/tensorrt/convert/hard_sigmoid_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/hard_sigmoid_op.cc @@ -31,8 +31,8 @@ class HardSigmoidOpConverter : public OpConverter { framework::OpDesc op_desc(op, nullptr); // Declare inputs auto* input = engine_->GetITensor(op_desc.Input("X")[0]); - float slope = boost::get(op_desc.GetAttr("slope")); - float offset = boost::get(op_desc.GetAttr("offset")); + float slope = BOOST_GET_CONST(float, op_desc.GetAttr("slope")); + float offset = BOOST_GET_CONST(float, op_desc.GetAttr("offset")); auto* layer = TRT_ENGINE_ADD_LAYER(engine_, Activation, *input, nvinfer1::ActivationType::kHARD_SIGMOID); layer->setAlpha(slope); diff --git a/paddle/fluid/inference/tensorrt/convert/hard_swish_op.cc b/paddle/fluid/inference/tensorrt/convert/hard_swish_op.cc index 809dc415c3..39820068ca 100644 --- a/paddle/fluid/inference/tensorrt/convert/hard_swish_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/hard_swish_op.cc @@ -45,13 +45,13 @@ class HardSwishOpConverter : public OpConverter { const float threshold = op_desc.HasAttr("threshold") - ? boost::get(op_desc.GetAttr("threshold")) + ? BOOST_GET_CONST(float, op_desc.GetAttr("threshold")) : 6.0f; const float scale = op_desc.HasAttr("scale") - ? boost::get(op_desc.GetAttr("scale")) + ? BOOST_GET_CONST(float, op_desc.GetAttr("scale")) : 6.0f; const float offset = op_desc.HasAttr("offset") - ? boost::get(op_desc.GetAttr("offset")) + ? BOOST_GET_CONST(float, op_desc.GetAttr("offset")) : 3.0f; nvinfer1::ILayer* layer = nullptr; diff --git a/paddle/fluid/inference/tensorrt/convert/instance_norm_op.cc b/paddle/fluid/inference/tensorrt/convert/instance_norm_op.cc index 2b6cbb904a..8a0b50f474 100644 --- a/paddle/fluid/inference/tensorrt/convert/instance_norm_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/instance_norm_op.cc @@ -28,7 +28,7 @@ class InstanceNormOpConverter : public OpConverter { framework::OpDesc op_desc(op, nullptr); auto* input = engine_->GetITensor(op_desc.Input("X")[0]); - float eps = boost::get(op_desc.GetAttr("epsilon")); + float eps = BOOST_GET_CONST(float, op_desc.GetAttr("epsilon")); auto* scale_var = scope.FindVar(op_desc.Input("Scale")[0]); auto* bias_var = scope.FindVar(op_desc.Input("Bias")[0]); diff --git a/paddle/fluid/inference/tensorrt/convert/layer_norm_op.cc b/paddle/fluid/inference/tensorrt/convert/layer_norm_op.cc index 7d714da439..c1f266bacf 100644 --- a/paddle/fluid/inference/tensorrt/convert/layer_norm_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/layer_norm_op.cc @@ -50,10 +50,10 @@ class LayerNormOpConverter : public OpConverter { auto* Scale_v = scope.FindVar(op_desc.Input("Scale").front()); const int begin_norm_axis = op_desc.HasAttr("begin_norm_axis") - ? boost::get(op_desc.GetAttr("begin_norm_axis")) + ? BOOST_GET_CONST(int, op_desc.GetAttr("begin_norm_axis")) : 1; const float eps = op_desc.HasAttr("epsilon") - ? boost::get(op_desc.GetAttr("epsilon")) + ? BOOST_GET_CONST(float, op_desc.GetAttr("epsilon")) : 1e-5f; PADDLE_ENFORCE_NOT_NULL( Bias_v, platform::errors::InvalidArgument( diff --git a/paddle/fluid/inference/tensorrt/convert/leaky_relu_op.cc b/paddle/fluid/inference/tensorrt/convert/leaky_relu_op.cc index 0b26496a94..29826909c3 100644 --- a/paddle/fluid/inference/tensorrt/convert/leaky_relu_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/leaky_relu_op.cc @@ -42,7 +42,7 @@ class LeakyReluOpConverter : public OpConverter { "outputs. Expected 1, but received %d", output_num)); // Get attrs - float alpha = boost::get(op_desc.GetAttr("alpha")); + float alpha = BOOST_GET_CONST(float, op_desc.GetAttr("alpha")); nvinfer1::ILayer* output_layer = nullptr; #if IS_TRT_VERSION_GE(5100) @@ -51,10 +51,10 @@ class LeakyReluOpConverter : public OpConverter { layer->setAlpha(alpha); output_layer = layer; - bool enable_int8 = boost::get(op_desc.HasAttr("enable_int8")); + bool enable_int8 = op_desc.HasAttr("enable_int8"); if (enable_int8) { CHECK(op_desc.HasAttr("X_scale")); - float in_scale = boost::get(op_desc.GetAttr("X_scale")); + float in_scale = BOOST_GET_CONST(float, op_desc.GetAttr("X_scale")); engine_->SetTensorDynamicRange(input, in_scale); } #else diff --git a/paddle/fluid/inference/tensorrt/convert/multihead_matmul_op.cc b/paddle/fluid/inference/tensorrt/convert/multihead_matmul_op.cc index 91c0c56ec5..a19d91f36e 100644 --- a/paddle/fluid/inference/tensorrt/convert/multihead_matmul_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/multihead_matmul_op.cc @@ -81,9 +81,9 @@ class MultiheadMatMulOpConverter : public OpConverter { weight.get(), bias.get()); auto* fc_out = fc_layer->getOutput(0); // add qkv to context - int head_number = boost::get(op_desc.GetAttr("head_number")); + int head_number = BOOST_GET_CONST(int, op_desc.GetAttr("head_number")); int head_size = all_head_size / head_number; - float scale = boost::get(op_desc.GetAttr("alpha")); + float scale = BOOST_GET_CONST(float, op_desc.GetAttr("alpha")); std::vector plugin_inputs; plugin_inputs.push_back(fc_out); diff --git a/paddle/fluid/inference/tensorrt/convert/pad_op.cc b/paddle/fluid/inference/tensorrt/convert/pad_op.cc index bcd2166728..a1b0f3b431 100644 --- a/paddle/fluid/inference/tensorrt/convert/pad_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/pad_op.cc @@ -32,8 +32,9 @@ class PadOpConverter : public OpConverter { auto* input = engine_->GetITensor(op_desc.Input("X")[0]); const std::vector paddings = - boost::get>(op_desc.GetAttr("paddings")); - const float pad_value = boost::get(op_desc.GetAttr("pad_value")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("paddings")); + const float pad_value = + BOOST_GET_CONST(float, op_desc.GetAttr("pad_value")); nvinfer1::Dims input_shape = input->getDimensions(); int nbDims = input_shape.nbDims; diff --git a/paddle/fluid/inference/tensorrt/convert/pool2d_op.cc b/paddle/fluid/inference/tensorrt/convert/pool2d_op.cc index e7605cceb7..864e440920 100644 --- a/paddle/fluid/inference/tensorrt/convert/pool2d_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/pool2d_op.cc @@ -69,19 +69,20 @@ class Pool2dOpConverter : public OpConverter { nvinfer1::Dims input_shape = input1->getDimensions(); int input_dims = input_shape.nbDims; - bool global_pooling = boost::get(op_desc.GetAttr("global_pooling")); + bool global_pooling = + BOOST_GET_CONST(bool, op_desc.GetAttr("global_pooling")); std::string pool_type = - boost::get(op_desc.GetAttr("pooling_type")); + BOOST_GET_CONST(std::string, op_desc.GetAttr("pooling_type")); std::vector ksize = - boost::get>(op_desc.GetAttr("ksize")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("ksize")); std::vector strides = - boost::get>(op_desc.GetAttr("strides")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("strides")); std::vector paddings = - boost::get>(op_desc.GetAttr("paddings")); - bool ceil_mode = boost::get(op_desc.GetAttr("ceil_mode")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("paddings")); + bool ceil_mode = BOOST_GET_CONST(bool, op_desc.GetAttr("ceil_mode")); bool adaptive = false; if (op_desc.HasAttr("adaptive")) - adaptive = boost::get(op_desc.GetAttr("adaptive")); + adaptive = BOOST_GET_CONST(bool, op_desc.GetAttr("adaptive")); nvinfer1::PoolingType nv_pool_type = nvinfer1::PoolingType::kMAX; plugin::PoolPlugin::PoolType plugin_pool_type = @@ -107,7 +108,7 @@ class Pool2dOpConverter : public OpConverter { if (op_desc.HasAttr("enable_int8")) { #if IS_TRT_VERSION_GE(5000) CHECK(op_desc.HasAttr("X_scale")); - float input_scale = boost::get(op_desc.GetAttr("X_scale")); + float input_scale = BOOST_GET_CONST(float, op_desc.GetAttr("X_scale")); engine_->SetTensorDynamicRange(input1, input_scale); #endif } diff --git a/paddle/fluid/inference/tensorrt/convert/prelu_op.cc b/paddle/fluid/inference/tensorrt/convert/prelu_op.cc index 5c0aa07192..0de93624f1 100644 --- a/paddle/fluid/inference/tensorrt/convert/prelu_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/prelu_op.cc @@ -45,7 +45,7 @@ class PReluOpConverter : public OpConverter { "Expected 1, received %d.", output_num)); // Get attrs - std::string mode = boost::get(op_desc.GetAttr("mode")); + std::string mode = BOOST_GET_CONST(std::string, op_desc.GetAttr("mode")); // auto* alpha_var = scope.FindVar(op_desc.Input("Alpha")[0]); PADDLE_ENFORCE_NOT_NULL( diff --git a/paddle/fluid/inference/tensorrt/convert/scale_op.cc b/paddle/fluid/inference/tensorrt/convert/scale_op.cc index 21513105b2..19e1895635 100644 --- a/paddle/fluid/inference/tensorrt/convert/scale_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/scale_op.cc @@ -35,9 +35,9 @@ class ScaleOpConverter : public OpConverter { auto input = engine_->GetITensor(input_name); bool bias_after_scale = - boost::get(op_desc.GetAttr("bias_after_scale")); - float bias = boost::get(op_desc.GetAttr("bias")); - float scale = boost::get(op_desc.GetAttr("scale")); + BOOST_GET_CONST(bool, op_desc.GetAttr("bias_after_scale")); + float bias = BOOST_GET_CONST(float, op_desc.GetAttr("bias")); + float scale = BOOST_GET_CONST(float, op_desc.GetAttr("scale")); auto create_weights = [&](float data, std::string type) -> float* { std::unique_ptr tmp_tensor(new framework::Tensor()); tmp_tensor->Resize({1}); diff --git a/paddle/fluid/inference/tensorrt/convert/shuffle_channel_op.cc b/paddle/fluid/inference/tensorrt/convert/shuffle_channel_op.cc index 5e7fad6132..326915dfff 100644 --- a/paddle/fluid/inference/tensorrt/convert/shuffle_channel_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/shuffle_channel_op.cc @@ -38,7 +38,7 @@ class ShuffleChannelOpConverter : public OpConverter { int c = input_dims.d[0]; int h = input_dims.d[1]; int w = input_dims.d[2]; - int group = boost::get(op_desc.GetAttr("group")); + int group = BOOST_GET_CONST(int, op_desc.GetAttr("group")); if (engine_->with_dynamic_shape()) { PADDLE_THROW(platform::errors::Fatal( diff --git a/paddle/fluid/inference/tensorrt/convert/skip_layernorm.cc b/paddle/fluid/inference/tensorrt/convert/skip_layernorm.cc index 9d416b8cc5..9ac6b92af8 100644 --- a/paddle/fluid/inference/tensorrt/convert/skip_layernorm.cc +++ b/paddle/fluid/inference/tensorrt/convert/skip_layernorm.cc @@ -47,7 +47,7 @@ class SkipLayerNormOpConverter : public OpConverter { framework::DDim bias_dims, scale_dims; auto* bias = get_persistable_data("Bias", &bias_dims); auto* scale = get_persistable_data("Scale", &scale_dims); - float eps = boost::get(op_desc.GetAttr("epsilon")); + float eps = BOOST_GET_CONST(float, op_desc.GetAttr("epsilon")); int bias_size = framework::product(bias_dims); int scale_size = framework::product(scale_dims); diff --git a/paddle/fluid/inference/tensorrt/convert/slice_op.cc b/paddle/fluid/inference/tensorrt/convert/slice_op.cc index 5ba01f0744..2a76317eea 100644 --- a/paddle/fluid/inference/tensorrt/convert/slice_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/slice_op.cc @@ -32,11 +32,11 @@ class SliceOpConverter : public OpConverter { auto* input = engine_->GetITensor(op_desc.Input("Input")[0]); std::vector axes = - boost::get>(op_desc.GetAttr("axes")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("axes")); std::vector starts = - boost::get>(op_desc.GetAttr("starts")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("starts")); std::vector ends = - boost::get>(op_desc.GetAttr("ends")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("ends")); nvinfer1::ILayer* layer = nullptr; if (engine_->with_dynamic_shape()) { diff --git a/paddle/fluid/inference/tensorrt/convert/split_op.cc b/paddle/fluid/inference/tensorrt/convert/split_op.cc index 90136c7d5d..d202bf865e 100644 --- a/paddle/fluid/inference/tensorrt/convert/split_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/split_op.cc @@ -38,7 +38,7 @@ class SplitOpConverter : public OpConverter { "Invalid input X's size of split TRT converter. " "Expected 1, received %d.", input_num)); - int axis = boost::get(op_desc.GetAttr("axis")); + int axis = BOOST_GET_CONST(int, op_desc.GetAttr("axis")); // split on batch is not supported in TensorRT PADDLE_ENFORCE_NE( axis, 0, @@ -46,10 +46,10 @@ class SplitOpConverter : public OpConverter { "Invalid split axis. Split on batch is not supported in TensorRT")); std::vector output_lengths = - boost::get>(op_desc.GetAttr("sections")); + BOOST_GET_CONST(std::vector, op_desc.GetAttr("sections")); int num = 0; if (op_desc.HasAttr("num")) { - num = boost::get(op_desc.GetAttr("num")); + num = BOOST_GET_CONST(int, op_desc.GetAttr("num")); } if (engine_->with_dynamic_shape()) { diff --git a/paddle/fluid/inference/tensorrt/convert/swish_op.cc b/paddle/fluid/inference/tensorrt/convert/swish_op.cc index e69676a787..4b3e1c9e70 100644 --- a/paddle/fluid/inference/tensorrt/convert/swish_op.cc +++ b/paddle/fluid/inference/tensorrt/convert/swish_op.cc @@ -34,7 +34,7 @@ class SwishOpConverter : public OpConverter { size_t output_num = op_desc.Output("Out").size(); PADDLE_ENFORCE(output_num == 1); // Get attrs - float beta = boost::get(op_desc.GetAttr("beta")); + float beta = BOOST_GET_CONST(float, op_desc.GetAttr("beta")); nvinfer1::ILayer* layer = nullptr; if (engine_->with_dynamic_shape()) { diff --git a/paddle/fluid/inference/tensorrt/op_teller.cc b/paddle/fluid/inference/tensorrt/op_teller.cc index fe393bf90f..3ad46d36de 100644 --- a/paddle/fluid/inference/tensorrt/op_teller.cc +++ b/paddle/fluid/inference/tensorrt/op_teller.cc @@ -83,7 +83,7 @@ bool OpTeller::Tell(const std::string& op_type, const framework::OpDesc& desc, bool use_no_calib_int8) { // do not support the op which is labeled the `skip_quant` if ((desc.HasAttr("namescope") && - boost::get(desc.GetAttr("op_namescope")) == + BOOST_GET_CONST(std::string, desc.GetAttr("op_namescope")) == "/skip_quant_2/") || desc.HasAttr("skip_quant")) return false; @@ -92,7 +92,7 @@ bool OpTeller::Tell(const std::string& op_type, const framework::OpDesc& desc, if (op_type == "pool2d" || op_type == "conv2d" || op_type == "depthwise_conv2d" || op_type == "conv2d_transpose") { std::vector paddings = - boost::get>(desc.GetAttr("paddings")); + BOOST_GET_CONST(std::vector, desc.GetAttr("paddings")); if (paddings.size() > 2) return false; } if ((*teller)(op_type, desc, use_no_calib_int8)) return true; diff --git a/paddle/fluid/inference/tests/book/test_inference_fit_a_line.cc b/paddle/fluid/inference/tests/book/test_inference_fit_a_line.cc index c605e8f2f9..52ef648913 100644 --- a/paddle/fluid/inference/tests/book/test_inference_fit_a_line.cc +++ b/paddle/fluid/inference/tests/book/test_inference_fit_a_line.cc @@ -77,8 +77,8 @@ TEST(inference, fit_a_line) { for (int i = 0; i < num_threads; ++i) { CheckError( - boost::get(*cpu_fetchs1[i][0]), - boost::get(*cpu_fetchs2[i][0])); + BOOST_GET(paddle::framework::LoDTensor, *cpu_fetchs1[i][0]), + BOOST_GET(paddle::framework::LoDTensor, *cpu_fetchs2[i][0])); delete cpu_fetchs2[i][0]; } #endif diff --git a/paddle/fluid/inference/tests/book/test_inference_image_classification.cc b/paddle/fluid/inference/tests/book/test_inference_image_classification.cc index c6c5b1cada..c0f1010624 100644 --- a/paddle/fluid/inference/tests/book/test_inference_image_classification.cc +++ b/paddle/fluid/inference/tests/book/test_inference_image_classification.cc @@ -60,7 +60,7 @@ TEST(inference, image_classification) { LOG(INFO) << "Batch size is " << FLAGS_batch_size; TestInference( dirname, cpu_feeds, cpu_fetchs1, FLAGS_repeat, is_combined); - LOG(INFO) << boost::get(output1).dims(); + LOG(INFO) << BOOST_GET(paddle::framework::LoDTensor, output1).dims(); } #ifdef PADDLE_WITH_CUDA @@ -73,11 +73,11 @@ TEST(inference, image_classification) { LOG(INFO) << "Batch size is " << FLAGS_batch_size; TestInference( dirname, cpu_feeds, cpu_fetchs2, FLAGS_repeat, is_combined); - LOG(INFO) << boost::get(output2).dims(); + LOG(INFO) << BOOST_GET(paddle::framework::LoDTensor, output2).dims(); if (!FLAGS_skip_cpu) { - CheckError(boost::get(output1), - boost::get(output2)); + CheckError(BOOST_GET(paddle::framework::LoDTensor, output1), + BOOST_GET(paddle::framework::LoDTensor, output2)); } // float16 inference requires cuda GPUs with >= 5.3 compute capability @@ -93,8 +93,8 @@ TEST(inference, image_classification) { TestInference( FLAGS_fp16_dirname, cpu_feeds, cpu_fetchs3, FLAGS_repeat); - CheckError(boost::get(output2), - boost::get(output3)); + CheckError(BOOST_GET(paddle::framework::LoDTensor, output2), + BOOST_GET(paddle::framework::LoDTensor, output3)); } #endif } diff --git a/paddle/fluid/inference/tests/book/test_inference_label_semantic_roles.cc b/paddle/fluid/inference/tests/book/test_inference_label_semantic_roles.cc index 18163985e1..c5bb24860e 100644 --- a/paddle/fluid/inference/tests/book/test_inference_label_semantic_roles.cc +++ b/paddle/fluid/inference/tests/book/test_inference_label_semantic_roles.cc @@ -69,7 +69,7 @@ TEST(inference, label_semantic_roles) { // Run inference on CPU TestInference(dirname, cpu_feeds, cpu_fetchs1); - auto output1_tensor = boost::get(output1); + auto output1_tensor = BOOST_GET(paddle::framework::LoDTensor, output1); LOG(INFO) << output1_tensor.lod(); LOG(INFO) << output1_tensor.dims(); @@ -80,7 +80,7 @@ TEST(inference, label_semantic_roles) { // Run inference on CUDA GPU TestInference(dirname, cpu_feeds, cpu_fetchs2); - auto output2_tensor = boost::get(output2); + auto output2_tensor = BOOST_GET(paddle::framework::LoDTensor, output2); LOG(INFO) << output2_tensor.lod(); LOG(INFO) << output2_tensor.dims(); diff --git a/paddle/fluid/inference/tests/book/test_inference_nlp.cc b/paddle/fluid/inference/tests/book/test_inference_nlp.cc index 39ca328b9a..76d5063dba 100644 --- a/paddle/fluid/inference/tests/book/test_inference_nlp.cc +++ b/paddle/fluid/inference/tests/book/test_inference_nlp.cc @@ -129,7 +129,7 @@ void ThreadRunInfer( for (auto* op : inference_program->Block(0).AllOps()) { if (op->Type() == "feed") { std::string feed_target_name = op->Output("Out")[0]; - int idx = boost::get(op->GetAttr("col")); + int idx = BOOST_GET_CONST(int, op->GetAttr("col")); paddle::framework::SetFeedVariable(scope, *feed_targets[feed_target_name], "feed", idx); } @@ -148,10 +148,10 @@ void ThreadRunInfer( for (auto* op : inference_program->Block(0).AllOps()) { if (op->Type() == "fetch") { std::string fetch_target_name = op->Input("X")[0]; - int idx = boost::get(op->GetAttr("col")); + int idx = BOOST_GET_CONST(int, op->GetAttr("col")); *fetch_targets[fetch_target_name] = - boost::get( - paddle::framework::GetFetchVariable(*scope, "fetch", idx)); + BOOST_GET(paddle::framework::LoDTensor, + paddle::framework::GetFetchVariable(*scope, "fetch", idx)); } } diff --git a/paddle/fluid/inference/tests/book/test_inference_recognize_digits.cc b/paddle/fluid/inference/tests/book/test_inference_recognize_digits.cc index da417b8dee..423cfa2f50 100644 --- a/paddle/fluid/inference/tests/book/test_inference_recognize_digits.cc +++ b/paddle/fluid/inference/tests/book/test_inference_recognize_digits.cc @@ -49,7 +49,7 @@ TEST(inference, recognize_digits) { LOG(INFO) << "--- CPU Runs: is_combined=" << is_combined << " ---"; TestInference(dirname, cpu_feeds, cpu_fetchs1, FLAGS_repeat, is_combined); - auto output1_tensor = boost::get(output1); + auto output1_tensor = BOOST_GET(paddle::framework::LoDTensor, output1); LOG(INFO) << output1_tensor.dims(); #ifdef PADDLE_WITH_CUDA @@ -61,7 +61,7 @@ TEST(inference, recognize_digits) { LOG(INFO) << "--- GPU Runs: is_combined=" << is_combined << " ---"; TestInference(dirname, cpu_feeds, cpu_fetchs2, FLAGS_repeat, is_combined); - auto output2_tensor = boost::get(output2); + auto output2_tensor = BOOST_GET(paddle::framework::LoDTensor, output2); LOG(INFO) << output2_tensor.dims(); CheckError(output1_tensor, output2_tensor); diff --git a/paddle/fluid/inference/tests/book/test_inference_recommender_system.cc b/paddle/fluid/inference/tests/book/test_inference_recommender_system.cc index acec418f0e..0315f797b7 100644 --- a/paddle/fluid/inference/tests/book/test_inference_recommender_system.cc +++ b/paddle/fluid/inference/tests/book/test_inference_recommender_system.cc @@ -71,7 +71,7 @@ TEST(inference, recommender_system) { // Run inference on CPU TestInference(dirname, cpu_feeds, cpu_fetchs1); - auto output1_tensor = boost::get(output1); + auto output1_tensor = BOOST_GET(paddle::framework::LoDTensor, output1); LOG(INFO) << output1_tensor.dims(); #ifdef PADDLE_WITH_CUDA @@ -81,7 +81,7 @@ TEST(inference, recommender_system) { // Run inference on CUDA GPU TestInference(dirname, cpu_feeds, cpu_fetchs2); - auto output2_tensor = boost::get(output2); + auto output2_tensor = BOOST_GET(paddle::framework::LoDTensor, output2); LOG(INFO) << output2_tensor.dims(); CheckError(output1_tensor, output2_tensor); diff --git a/paddle/fluid/inference/tests/book/test_inference_rnn_encoder_decoder.cc b/paddle/fluid/inference/tests/book/test_inference_rnn_encoder_decoder.cc index efe9f0a8db..9a6ed68641 100644 --- a/paddle/fluid/inference/tests/book/test_inference_rnn_encoder_decoder.cc +++ b/paddle/fluid/inference/tests/book/test_inference_rnn_encoder_decoder.cc @@ -47,7 +47,7 @@ TEST(inference, rnn_encoder_decoder) { // Run inference on CPU TestInference(dirname, cpu_feeds, cpu_fetchs1); - auto output1_tensor = boost::get(output1); + auto output1_tensor = BOOST_GET(paddle::framework::LoDTensor, output1); LOG(INFO) << output1_tensor.lod(); LOG(INFO) << output1_tensor.dims(); @@ -58,7 +58,7 @@ TEST(inference, rnn_encoder_decoder) { // Run inference on CUDA GPU TestInference(dirname, cpu_feeds, cpu_fetchs2); - auto output2_tensor = boost::get(output2); + auto output2_tensor = BOOST_GET(paddle::framework::LoDTensor, output2); LOG(INFO) << output2_tensor.lod(); LOG(INFO) << output2_tensor.dims(); diff --git a/paddle/fluid/inference/tests/book/test_inference_understand_sentiment.cc b/paddle/fluid/inference/tests/book/test_inference_understand_sentiment.cc index f05e14afa8..cd86838ad1 100644 --- a/paddle/fluid/inference/tests/book/test_inference_understand_sentiment.cc +++ b/paddle/fluid/inference/tests/book/test_inference_understand_sentiment.cc @@ -45,7 +45,7 @@ TEST(inference, understand_sentiment) { // Run inference on CPU TestInference(dirname, cpu_feeds, cpu_fetchs1); - auto output1_tensor = boost::get(output1); + auto output1_tensor = BOOST_GET(paddle::framework::LoDTensor, output1); LOG(INFO) << output1_tensor.lod(); LOG(INFO) << output1_tensor.dims(); @@ -56,7 +56,7 @@ TEST(inference, understand_sentiment) { // Run inference on CUDA GPU TestInference(dirname, cpu_feeds, cpu_fetchs2); - auto output2_tensor = boost::get(output2); + auto output2_tensor = BOOST_GET(paddle::framework::LoDTensor, output2); LOG(INFO) << output2_tensor.lod(); LOG(INFO) << output2_tensor.dims(); diff --git a/paddle/fluid/inference/tests/book/test_inference_word2vec.cc b/paddle/fluid/inference/tests/book/test_inference_word2vec.cc index 0c61623a40..3faca4126b 100644 --- a/paddle/fluid/inference/tests/book/test_inference_word2vec.cc +++ b/paddle/fluid/inference/tests/book/test_inference_word2vec.cc @@ -50,7 +50,7 @@ TEST(inference, word2vec) { // Run inference on CPU TestInference(dirname, cpu_feeds, cpu_fetchs1); - auto output1_tensor = boost::get(output1); + auto output1_tensor = BOOST_GET(paddle::framework::LoDTensor, output1); LOG(INFO) << output1_tensor.lod(); LOG(INFO) << output1_tensor.dims(); @@ -61,7 +61,7 @@ TEST(inference, word2vec) { // Run inference on CUDA GPU TestInference(dirname, cpu_feeds, cpu_fetchs2); - auto output2_tensor = boost::get(output2); + auto output2_tensor = BOOST_GET(paddle::framework::LoDTensor, output2); LOG(INFO) << output2_tensor.lod(); LOG(INFO) << output2_tensor.dims(); diff --git a/paddle/fluid/memory/allocation/cuda_allocator.cc b/paddle/fluid/memory/allocation/cuda_allocator.cc index 56a2ebb355..39d33cf20b 100644 --- a/paddle/fluid/memory/allocation/cuda_allocator.cc +++ b/paddle/fluid/memory/allocation/cuda_allocator.cc @@ -26,7 +26,7 @@ namespace allocation { bool CUDAAllocator::IsAllocThreadSafe() const { return true; } void CUDAAllocator::FreeImpl(Allocation* allocation) { PADDLE_ENFORCE_EQ( - boost::get(allocation->place()), place_, + BOOST_GET_CONST(platform::CUDAPlace, allocation->place()), place_, platform::errors::PermissionDenied( "GPU memory is freed in incorrect device. This may be a bug")); platform::RecordedCudaFree(allocation->ptr(), allocation->size(), diff --git a/paddle/fluid/memory/allocation/cuda_device_context_allocator.h b/paddle/fluid/memory/allocation/cuda_device_context_allocator.h index 2163562a60..d8a4197313 100644 --- a/paddle/fluid/memory/allocation/cuda_device_context_allocator.h +++ b/paddle/fluid/memory/allocation/cuda_device_context_allocator.h @@ -128,8 +128,8 @@ class CUDADeviceContextAllocatorPool { } AllocationPtr Alloc(const platform::CUDADeviceContext &dev_ctx, size_t size) { - auto iter = - allocators_.find(boost::get(dev_ctx.GetPlace())); + auto iter = allocators_.find( + BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace())); PADDLE_ENFORCE_EQ(iter != allocators_.end(), true, "CUDADeviceContextAllocatorPool initialization error"); auto &allocator = iter->second; diff --git a/paddle/fluid/memory/allocation/thread_local_allocator.cc b/paddle/fluid/memory/allocation/thread_local_allocator.cc index 96f2253013..44da75c56f 100644 --- a/paddle/fluid/memory/allocation/thread_local_allocator.cc +++ b/paddle/fluid/memory/allocation/thread_local_allocator.cc @@ -24,7 +24,7 @@ ThreadLocalAllocatorImpl::ThreadLocalAllocatorImpl(const platform::Place& p) buddy_allocator_.reset(new memory::detail::BuddyAllocator( std::unique_ptr( new memory::detail::GPUAllocator( - boost::get(place_).device)), + BOOST_GET_CONST(platform::CUDAPlace, place_).device)), platform::GpuMinChunkSize(), platform::GpuMaxChunkSize())); } else { LOG(FATAL) << "Thread local allocator only supports CUDAPlace now."; diff --git a/paddle/fluid/operators/activation_op.cc b/paddle/fluid/operators/activation_op.cc index 4587b494b3..fd5f7e06b1 100644 --- a/paddle/fluid/operators/activation_op.cc +++ b/paddle/fluid/operators/activation_op.cc @@ -71,8 +71,9 @@ class ActivationGradOpMaker : public framework::SingleGradOpMaker { if ((static_cast(kDepValue) & static_cast(ActBwdOpFwdDeps::kDepX)) || - FLAGS_use_mkldnn || (op->HasAttr("use_mkldnn") && - boost::get(op->GetAttr("use_mkldnn")))) { + FLAGS_use_mkldnn || + (op->HasAttr("use_mkldnn") && + BOOST_GET_CONST(bool, op->GetAttr("use_mkldnn")))) { op->SetInput("X", this->Input("X")); } diff --git a/paddle/fluid/operators/average_accumulates_op.cu b/paddle/fluid/operators/average_accumulates_op.cu index 104e24f6ee..2796a6b223 100644 --- a/paddle/fluid/operators/average_accumulates_op.cu +++ b/paddle/fluid/operators/average_accumulates_op.cu @@ -26,7 +26,7 @@ void GetAccumulators( auto* in_num_updates = ctx.Input("in_num_updates"); auto stream = ctx.cuda_device_context().stream(); auto cuda_place = - boost::get(in_old_num_accumulates->place()); + BOOST_GET_CONST(platform::CUDAPlace, in_old_num_accumulates->place()); memory::Copy(platform::CPUPlace(), old_num_accumulates_, cuda_place, in_old_num_accumulates->data(), sizeof(int64_t), stream); @@ -45,7 +45,7 @@ void SetAccumulators( auto* out_num_accumulates = ctx.Output("out_num_accumulates"); auto* out_num_updates = ctx.Output("out_num_updates"); auto cuda_place = - boost::get(out_old_num_accumulates->place()); + BOOST_GET_CONST(platform::CUDAPlace, out_old_num_accumulates->place()); memory::Copy(cuda_place, out_old_num_accumulates->data(), platform::CPUPlace(), &old_num_accumulates_, sizeof(int64_t), diff --git a/paddle/fluid/operators/batch_norm_op.cc b/paddle/fluid/operators/batch_norm_op.cc index 684d2ef862..c3bcc72c53 100644 --- a/paddle/fluid/operators/batch_norm_op.cc +++ b/paddle/fluid/operators/batch_norm_op.cc @@ -805,7 +805,7 @@ void BatchNormGradMaker::Apply(GradOpPtr op) const { } // used when setting use_global_stats True during training - if (boost::get(this->GetAttr("use_global_stats"))) { + if (BOOST_GET_CONST(bool, this->GetAttr("use_global_stats"))) { op->SetInput("Mean", this->Output("MeanOut")); op->SetInput("Variance", this->Output("VarianceOut")); } diff --git a/paddle/fluid/operators/benchmark/op_tester.cc b/paddle/fluid/operators/benchmark/op_tester.cc index e9b5db2378..b818cf0107 100644 --- a/paddle/fluid/operators/benchmark/op_tester.cc +++ b/paddle/fluid/operators/benchmark/op_tester.cc @@ -424,19 +424,19 @@ std::string OpTester::DebugString() { switch (attr_type) { case framework::proto::AttrType::BOOLEAN: { ss << GenSpaces(count) << "type: BOOLEAN\n"; - ss << GenSpaces(count) << "b: " << boost::get(attr) << "\n"; + ss << GenSpaces(count) << "b: " << BOOST_GET_CONST(bool, attr) << "\n"; } break; case framework::proto::AttrType::INT: { ss << GenSpaces(count) << "type: INT\n"; - ss << GenSpaces(count) << "i: " << boost::get(attr) << "\n"; + ss << GenSpaces(count) << "i: " << BOOST_GET_CONST(int, attr) << "\n"; } break; case framework::proto::AttrType::FLOAT: { ss << GenSpaces(count) << "type: FLOAT\n"; - ss << GenSpaces(count) << "f: " << boost::get(attr) << "\n"; + ss << GenSpaces(count) << "f: " << BOOST_GET_CONST(float, attr) << "\n"; } break; case framework::proto::AttrType::STRING: { ss << GenSpaces(count) << "type: STRING\n"; - ss << GenSpaces(count) << "s: \"" << boost::get(attr) + ss << GenSpaces(count) << "s: \"" << BOOST_GET_CONST(std::string, attr) << "\"\n"; } break; case framework::proto::AttrType::BOOLEANS: { @@ -461,7 +461,8 @@ std::string OpTester::DebugString() { } break; case framework::proto::AttrType::LONG: { ss << GenSpaces(count) << "type: LONG\n"; - ss << GenSpaces(count) << "l: " << boost::get(attr) << "\n"; + ss << GenSpaces(count) << "l: " << BOOST_GET_CONST(int64_t, attr) + << "\n"; } break; case framework::proto::AttrType::LONGS: { ss << GenSpaces(count) << "type: LONGS\n"; diff --git a/paddle/fluid/operators/collective/c_comm_init_op.cc b/paddle/fluid/operators/collective/c_comm_init_op.cc index 2bfc6e5530..b460dc40ed 100644 --- a/paddle/fluid/operators/collective/c_comm_init_op.cc +++ b/paddle/fluid/operators/collective/c_comm_init_op.cc @@ -54,8 +54,8 @@ class CCommInitOp : public framework::OperatorBase { int rid = Attr("ring_id"); platform::NCCLCommContext::Instance().CreateNCCLComm( - nccl_id, nranks, rank_id, boost::get(place).device, - rid); + nccl_id, nranks, rank_id, + BOOST_GET_CONST(platform::CUDAPlace, place).device, rid); #else PADDLE_THROW("PaddlePaddle should compile with GPU."); #endif diff --git a/paddle/fluid/operators/controlflow/fetch_op.cc b/paddle/fluid/operators/controlflow/fetch_op.cc index 3f22680b86..5d6434f45f 100644 --- a/paddle/fluid/operators/controlflow/fetch_op.cc +++ b/paddle/fluid/operators/controlflow/fetch_op.cc @@ -107,14 +107,14 @@ class FetchOp : public framework::OperatorBase { if (fetch_var->IsType()) { auto &src_item = fetch_var->Get(); - auto *dst_item = &(boost::get(fetch_list->at(col))); + auto *dst_item = &(BOOST_GET(framework::LoDTensor, fetch_list->at(col))); DataCopy(src_item, fetch_var_name, dst_item); } else { auto &src_item = fetch_var->Get(); framework::LoDTensorArray tmp(src_item.size()); fetch_list->at(col) = tmp; auto &dst_item = - boost::get(fetch_list->at(col)); + BOOST_GET(framework::LoDTensorArray, fetch_list->at(col)); for (size_t i = 0; i < src_item.size(); ++i) { DataCopy(src_item[i], fetch_var_name, &dst_item[i]); } diff --git a/paddle/fluid/operators/controlflow/op_variant.h b/paddle/fluid/operators/controlflow/op_variant.h index 26c70589f2..3b1e15b101 100644 --- a/paddle/fluid/operators/controlflow/op_variant.h +++ b/paddle/fluid/operators/controlflow/op_variant.h @@ -44,7 +44,7 @@ class OpVariant { auto &attrs = Attrs(); auto it = attrs.find(name); PADDLE_ENFORCE(it != attrs.end(), "Cannot find attribute %s", name); - return boost::get(it->second); + return BOOST_GET_CONST(AttrType, it->second); } bool operator==(const OpVariant &other) const { diff --git a/paddle/fluid/operators/controlflow/recurrent_op_helper.cc b/paddle/fluid/operators/controlflow/recurrent_op_helper.cc index a515a8b907..f2973add84 100644 --- a/paddle/fluid/operators/controlflow/recurrent_op_helper.cc +++ b/paddle/fluid/operators/controlflow/recurrent_op_helper.cc @@ -43,9 +43,8 @@ static bool IsSkippableVar(const std::string &name, static void ClearSkipVars(const OpVariant &op) { auto &attrs = const_cast(op.Attrs()); - std::vector &attr_skip_vars = - boost::get>( - attrs[RecurrentBase::kSkipEagerDeletionVars]); + std::vector &attr_skip_vars = BOOST_GET( + std::vector, attrs[RecurrentBase::kSkipEagerDeletionVars]); attr_skip_vars.clear(); } @@ -55,9 +54,8 @@ static void AddSkipVars(const OpVariant &op, const Container &skip_vars) { auto &attrs = const_cast(op.Attrs()); VLOG(2) << "Prepare to add " << skip_vars.size() << " skip var(s): " << paddle::string::join_strings(skip_vars, ' '); - std::vector &attr_skip_vars = - boost::get>( - attrs[RecurrentBase::kSkipEagerDeletionVars]); + std::vector &attr_skip_vars = BOOST_GET( + std::vector, attrs[RecurrentBase::kSkipEagerDeletionVars]); attr_skip_vars.insert(attr_skip_vars.end(), skip_vars.cbegin(), skip_vars.cend()); } diff --git a/paddle/fluid/operators/controlflow/while_op.cc b/paddle/fluid/operators/controlflow/while_op.cc index 669f63be68..e4a1397f5c 100644 --- a/paddle/fluid/operators/controlflow/while_op.cc +++ b/paddle/fluid/operators/controlflow/while_op.cc @@ -474,8 +474,8 @@ class WhileGradOpShapeInference : public framework::InferShapeBase { continue; } framework::VarDesc *in_var = - boost::get(in_var_ptrs[i]); - boost::get(out_var_ptrs[i]) + BOOST_GET(framework::VarDesc *, in_var_ptrs[i]); + BOOST_GET(framework::VarDesc *, out_var_ptrs[i]) ->SetShape(in_var->GetShape()); } } diff --git a/paddle/fluid/operators/cumsum_op.cc b/paddle/fluid/operators/cumsum_op.cc index 5f516a2016..962d73d068 100644 --- a/paddle/fluid/operators/cumsum_op.cc +++ b/paddle/fluid/operators/cumsum_op.cc @@ -62,9 +62,11 @@ class CumsumGradMaker : public framework::SingleGradOpMaker { grad_op->SetType("cumsum"); grad_op->SetInput("X", this->OutputGrad("Out")); grad_op->SetOutput("Out", this->InputGrad("X")); - grad_op->SetAttr("axis", boost::get(this->GetAttr("axis"))); - grad_op->SetAttr("reverse", !boost::get(this->GetAttr("reverse"))); - grad_op->SetAttr("exclusive", boost::get(this->GetAttr("exclusive"))); + grad_op->SetAttr("axis", BOOST_GET_CONST(int, this->GetAttr("axis"))); + grad_op->SetAttr("reverse", + !BOOST_GET_CONST(bool, this->GetAttr("reverse"))); + grad_op->SetAttr("exclusive", + BOOST_GET_CONST(bool, this->GetAttr("exclusive"))); } }; diff --git a/paddle/fluid/operators/deformable_psroi_pooling_op.cu b/paddle/fluid/operators/deformable_psroi_pooling_op.cu index ecc6f19ad3..e977c70bf4 100644 --- a/paddle/fluid/operators/deformable_psroi_pooling_op.cu +++ b/paddle/fluid/operators/deformable_psroi_pooling_op.cu @@ -249,7 +249,7 @@ class DeformablePSROIPoolCUDAKernel : public framework::OpKernel { int bytes = roi_batch_id_list.numel() * sizeof(int); auto roi_ptr = memory::Alloc(dev_ctx, bytes); int* roi_id_data = reinterpret_cast(roi_ptr->ptr()); - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); memory::Copy(gplace, roi_id_data, cplace, roi_batch_id_data, bytes, dev_ctx.stream()); @@ -520,7 +520,7 @@ class DeformablePSROIPoolGradCUDAKernel : public framework::OpKernel { int bytes = roi_batch_id_list.numel() * sizeof(int); auto roi_ptr = memory::Alloc(dev_ctx, bytes); int* roi_id_data = reinterpret_cast(roi_ptr->ptr()); - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); memory::Copy(gplace, roi_id_data, cplace, roi_batch_id_data, bytes, dev_ctx.stream()); diff --git a/paddle/fluid/operators/detail/strided_memcpy.h b/paddle/fluid/operators/detail/strided_memcpy.h index 94419d1f9a..9ebdb369fe 100644 --- a/paddle/fluid/operators/detail/strided_memcpy.h +++ b/paddle/fluid/operators/detail/strided_memcpy.h @@ -31,11 +31,11 @@ struct StridedMemcpyFunctor { const int64_t* dst_stride, T* dst) const { auto place = dev_ctx.GetPlace(); if (platform::is_cpu_place(place)) { - auto& cpu_place = boost::get(place); + auto& cpu_place = BOOST_GET_CONST(platform::CPUPlace, place); memory::Copy(cpu_place, dst, cpu_place, src, sizeof(T)); } else { #ifdef PADDLE_WITH_CUDA - auto& gpu_place = boost::get(place); + auto& gpu_place = BOOST_GET_CONST(platform::CUDAPlace, place); auto& cuda_ctx = reinterpret_cast(dev_ctx); memory::Copy(gpu_place, dst, gpu_place, src, sizeof(T), @@ -54,11 +54,11 @@ struct StridedMemcpyFunctor { const int64_t* dst_stride, T* dst) const { auto place = dev_ctx.GetPlace(); if (platform::is_cpu_place(place)) { - auto& cpu_place = boost::get(place); + auto& cpu_place = BOOST_GET_CONST(platform::CPUPlace, place); memory::Copy(cpu_place, dst, cpu_place, src, sizeof(T) * dst_dim[0]); } else { #ifdef PADDLE_WITH_CUDA - auto& gpu_place = boost::get(place); + auto& gpu_place = BOOST_GET_CONST(platform::CUDAPlace, place); auto& cuda_ctx = reinterpret_cast(dev_ctx); memory::Copy(gpu_place, dst, gpu_place, src, sizeof(T) * dst_dim[0], diff --git a/paddle/fluid/operators/detection/box_coder_op.cu b/paddle/fluid/operators/detection/box_coder_op.cu index 93cd56353e..0693029eae 100644 --- a/paddle/fluid/operators/detection/box_coder_op.cu +++ b/paddle/fluid/operators/detection/box_coder_op.cu @@ -183,7 +183,8 @@ class BoxCoderCUDAKernel : public framework::OpKernel { auto dev_var = memory::Alloc(device_ctx, bytes); float* dev_var_data = reinterpret_cast(dev_var->ptr()); auto cplace = platform::CPUPlace(); - const auto gplace = boost::get(context.GetPlace()); + const auto gplace = + BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()); memory::Copy(gplace, dev_var_data, cplace, &variance[0], bytes, device_ctx.stream()); diff --git a/paddle/fluid/operators/detection/collect_fpn_proposals_op.cc b/paddle/fluid/operators/detection/collect_fpn_proposals_op.cc index c49f0d831e..b3e3332fe3 100644 --- a/paddle/fluid/operators/detection/collect_fpn_proposals_op.cc +++ b/paddle/fluid/operators/detection/collect_fpn_proposals_op.cc @@ -65,9 +65,9 @@ class CollectFpnProposalsOp : public framework::OperatorWithKernel { context->GetInputVarPtrs("MultiLevelScores"); for (size_t i = 0; i < roi_inputs.size(); ++i) { framework::Variable *roi_var = - boost::get(roi_inputs[i]); + BOOST_GET(framework::Variable *, roi_inputs[i]); framework::Variable *score_var = - boost::get(score_inputs[i]); + BOOST_GET(framework::Variable *, score_inputs[i]); auto &roi_lod = roi_var->Get().lod(); auto &score_lod = score_var->Get().lod(); PADDLE_ENFORCE_EQ( diff --git a/paddle/fluid/operators/detection/collect_fpn_proposals_op.cu b/paddle/fluid/operators/detection/collect_fpn_proposals_op.cu index ba0b4ac010..6fac90bf2d 100644 --- a/paddle/fluid/operators/detection/collect_fpn_proposals_op.cu +++ b/paddle/fluid/operators/detection/collect_fpn_proposals_op.cu @@ -79,7 +79,7 @@ class GPUCollectFpnProposalsOpKernel : public framework::OpKernel { roi_batch_id_list.mutable_data(platform::CPUPlace()); int index = 0; int lod_size; - auto place = boost::get(dev_ctx.GetPlace()); + auto place = BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()); for (size_t i = 0; i < roi_ins.size(); ++i) { auto roi_in = roi_ins[i]; diff --git a/paddle/fluid/operators/detection/distribute_fpn_proposals_op.cu b/paddle/fluid/operators/detection/distribute_fpn_proposals_op.cu index 1f7380a6c6..1a89af9697 100644 --- a/paddle/fluid/operators/detection/distribute_fpn_proposals_op.cu +++ b/paddle/fluid/operators/detection/distribute_fpn_proposals_op.cu @@ -124,7 +124,7 @@ class GPUDistributeFpnProposalsOpKernel : public framework::OpKernel { max_level, min_level, roi_batch_id_list_gpu.data(), sub_lod_list_data, target_lvls_data); dev_ctx.Wait(); - auto place = boost::get(dev_ctx.GetPlace()); + auto place = BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()); Tensor index_in_t; int* idx_in = index_in_t.mutable_data({roi_num}, dev_ctx.GetPlace()); diff --git a/paddle/fluid/operators/detection/generate_proposals_op.cu b/paddle/fluid/operators/detection/generate_proposals_op.cu index 1144bff68d..24d3d1db17 100644 --- a/paddle/fluid/operators/detection/generate_proposals_op.cu +++ b/paddle/fluid/operators/detection/generate_proposals_op.cu @@ -68,7 +68,7 @@ static void SortDescending(const platform::CUDADeviceContext &ctx, cub::DeviceRadixSort::SortPairsDescending( nullptr, temp_storage_bytes, keys_in, keys_out, idx_in, idx_out, num); // Allocate temporary storage - auto place = boost::get(ctx.GetPlace()); + auto place = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); auto d_temp_storage = memory::Alloc(place, temp_storage_bytes); // Run sorting operation @@ -258,11 +258,11 @@ static void NMS(const platform::CUDADeviceContext &ctx, const Tensor &proposals, dim3 threads(kThreadsPerBlock); const T *boxes = proposals.data(); - auto place = boost::get(ctx.GetPlace()); + auto place = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); framework::Vector mask(boxes_num * col_blocks); - NMSKernel<<>>( - boxes_num, nms_threshold, boxes, - mask.CUDAMutableData(boost::get(ctx.GetPlace()))); + NMSKernel<<>>(boxes_num, nms_threshold, boxes, + mask.CUDAMutableData(BOOST_GET_CONST( + platform::CUDAPlace, ctx.GetPlace()))); std::vector remv(col_blocks); memset(&remv[0], 0, sizeof(uint64_t) * col_blocks); @@ -326,7 +326,7 @@ static std::pair ProposalForOneImage( proposals.data(), im_info.data(), min_size, pre_nms_num, keep_num_t.data(), keep_index.data()); int keep_num; - const auto gpu_place = boost::get(ctx.GetPlace()); + const auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); memory::Copy(platform::CPUPlace(), &keep_num, gpu_place, keep_num_t.data(), sizeof(int), ctx.stream()); ctx.Wait(); @@ -415,7 +415,7 @@ class CUDAGenerateProposalsKernel : public framework::OpKernel { T *rpn_rois_data = rpn_rois->data(); T *rpn_roi_probs_data = rpn_roi_probs->data(); - auto place = boost::get(dev_ctx.GetPlace()); + auto place = BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()); auto cpu_place = platform::CPUPlace(); int64_t num_proposals = 0; diff --git a/paddle/fluid/operators/detection/yolo_box_op.cu b/paddle/fluid/operators/detection/yolo_box_op.cu index b8476a7cf3..3914faa7b1 100644 --- a/paddle/fluid/operators/detection/yolo_box_op.cu +++ b/paddle/fluid/operators/detection/yolo_box_op.cu @@ -89,7 +89,7 @@ class YoloBoxOpCUDAKernel : public framework::OpKernel { int bytes = sizeof(int) * anchors.size(); auto anchors_ptr = memory::Alloc(dev_ctx, sizeof(int) * anchors.size()); int* anchors_data = reinterpret_cast(anchors_ptr->ptr()); - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); const auto cplace = platform::CPUPlace(); memory::Copy(gplace, anchors_data, cplace, anchors.data(), bytes, dev_ctx.stream()); diff --git a/paddle/fluid/operators/distributed/communicator.cc b/paddle/fluid/operators/distributed/communicator.cc index 094062bb21..19187d01f5 100644 --- a/paddle/fluid/operators/distributed/communicator.cc +++ b/paddle/fluid/operators/distributed/communicator.cc @@ -96,35 +96,35 @@ void AsyncCommunicator::InitImpl(const paddle::framework::ProgramDesc &program, VLOG(3) << "node name " << op->Type(); if (op->Type() == "send") { auto send_var_name = op->Input("X")[0]; - auto send_varnames = boost::get>( - op->GetNullableAttr("send_varnames")); - auto epmap = - boost::get>(op->GetNullableAttr("epmap")); - auto height_section = - boost::get>(op->GetNullableAttr("sections")); - auto trainer_id = boost::get(op->GetNullableAttr("trainer_id")); - auto merge_add = boost::get(op->GetNullableAttr("merge_add")); + auto send_varnames = BOOST_GET_CONST( + std::vector, op->GetNullableAttr("send_varnames")); + auto epmap = BOOST_GET_CONST(std::vector, + op->GetNullableAttr("epmap")); + auto height_section = BOOST_GET_CONST(std::vector, + op->GetNullableAttr("sections")); + auto trainer_id = BOOST_GET_CONST(int, op->GetNullableAttr("trainer_id")); + auto merge_add = BOOST_GET_CONST(bool, op->GetNullableAttr("merge_add")); if (!merge_add) { merge_add = is_sgd_optimizer_; } auto use_send_handler = - boost::get(op->GetNullableAttr("use_send_handler")); + BOOST_GET_CONST(bool, op->GetNullableAttr("use_send_handler")); send_varname_to_ctx[send_var_name] = operators::distributed::RpcContext( send_var_name, send_varnames, epmap, height_section, trainer_id, merge_add, use_send_handler); VLOG(3) << "find and init an send op: " << send_varname_to_ctx[send_var_name]; } else if (op->Type() == "recv") { - auto do_not_run = boost::get(op->GetNullableAttr("do_not_run")); + auto do_not_run = BOOST_GET_CONST(int, op->GetNullableAttr("do_not_run")); PADDLE_ENFORCE_GT(do_not_run, 0, platform::errors::InvalidArgument( "recv op's attr `do_not_run` must be True!")); auto recv_var_name = op->Output("Out")[0]; - auto recv_varnames = boost::get>( - op->GetNullableAttr("recv_varnames")); - auto epmap = - boost::get>(op->GetNullableAttr("epmap")); - auto trainer_id = boost::get(op->GetNullableAttr("trainer_id")); + auto recv_varnames = BOOST_GET_CONST( + std::vector, op->GetNullableAttr("recv_varnames")); + auto epmap = BOOST_GET_CONST(std::vector, + op->GetNullableAttr("epmap")); + auto trainer_id = BOOST_GET_CONST(int, op->GetNullableAttr("trainer_id")); recv_varname_to_ctx[recv_var_name] = operators::distributed::RpcContext( recv_var_name, recv_varnames, epmap, {}, trainer_id); } @@ -981,28 +981,28 @@ void HalfAsyncCommunicator::InitImpl( VLOG(3) << "node name " << op->Type(); if (op->Type() == "send") { auto send_var_name = op->Input("X")[0]; - auto send_varnames = boost::get>( - op->GetNullableAttr("send_varnames")); - auto epmap = - boost::get>(op->GetNullableAttr("epmap")); - auto height_section = - boost::get>(op->GetNullableAttr("sections")); - auto trainer_id = boost::get(op->GetNullableAttr("trainer_id")); + auto send_varnames = BOOST_GET_CONST( + std::vector, op->GetNullableAttr("send_varnames")); + auto epmap = BOOST_GET_CONST(std::vector, + op->GetNullableAttr("epmap")); + auto height_section = BOOST_GET_CONST(std::vector, + op->GetNullableAttr("sections")); + auto trainer_id = BOOST_GET_CONST(int, op->GetNullableAttr("trainer_id")); send_varname_to_ctx[send_var_name] = operators::distributed::RpcContext( send_var_name, send_varnames, epmap, height_section, trainer_id); VLOG(3) << "find and init an send op: " << send_varname_to_ctx[send_var_name]; } else if (op->Type() == "recv") { - auto do_not_run = boost::get(op->GetNullableAttr("do_not_run")); + auto do_not_run = BOOST_GET_CONST(int, op->GetNullableAttr("do_not_run")); PADDLE_ENFORCE_GT(do_not_run, 0, platform::errors::InvalidArgument( "recv op's attr `do_not_run` must be True!")); auto recv_var_name = op->Output("Out")[0]; - auto recv_varnames = boost::get>( - op->GetNullableAttr("recv_varnames")); - auto epmap = - boost::get>(op->GetNullableAttr("epmap")); - auto trainer_id = boost::get(op->GetNullableAttr("trainer_id")); + auto recv_varnames = BOOST_GET_CONST( + std::vector, op->GetNullableAttr("recv_varnames")); + auto epmap = BOOST_GET_CONST(std::vector, + op->GetNullableAttr("epmap")); + auto trainer_id = BOOST_GET_CONST(int, op->GetNullableAttr("trainer_id")); recv_varname_to_ctx[recv_var_name] = operators::distributed::RpcContext( recv_var_name, recv_varnames, epmap, {}, trainer_id); VLOG(3) << "find and init an recv op: " diff --git a/paddle/fluid/operators/distributed/sendrecvop_utils.cc b/paddle/fluid/operators/distributed/sendrecvop_utils.cc index 7ab30c114d..b52fb93e5b 100644 --- a/paddle/fluid/operators/distributed/sendrecvop_utils.cc +++ b/paddle/fluid/operators/distributed/sendrecvop_utils.cc @@ -45,7 +45,7 @@ static TensorPayload GetCommunicationAllocationFromTensor( auto result = memory::AllocShared(cuda_pinned, copy_size); memory::Copy(cuda_pinned, result->ptr(), - boost::get(tensor.place()), + BOOST_GET_CONST(platform::CUDAPlace, tensor.place()), tensor.data(), copy_size, gpu_dev_ctx.stream()); ctx.Wait(); return TensorPayload(result); diff --git a/paddle/fluid/operators/distributed/variable_response.cc b/paddle/fluid/operators/distributed/variable_response.cc index 7825b4fc82..c9c42e0938 100644 --- a/paddle/fluid/operators/distributed/variable_response.cc +++ b/paddle/fluid/operators/distributed/variable_response.cc @@ -51,7 +51,7 @@ bool VariableResponse::ReadRaw(::google::protobuf::io::CodedInputStream* input, } // This log is useful to see how long a internal block size is of rpc. VLOG(7) << "copy " << size_to_write << " data to CUDAPlace"; - memory::Copy(boost::get(place), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, place), reinterpret_cast(p), cpu, data, size_to_write, gpu_dev_ctx.stream()); p += size_to_write; diff --git a/paddle/fluid/operators/distributed_ops/broadcast_op.cu.cc b/paddle/fluid/operators/distributed_ops/broadcast_op.cu.cc index 2d87b48ba8..ebb49aa715 100644 --- a/paddle/fluid/operators/distributed_ops/broadcast_op.cu.cc +++ b/paddle/fluid/operators/distributed_ops/broadcast_op.cu.cc @@ -38,7 +38,7 @@ class NCCLBroadcastOpKernel : public framework::OpKernel { "The place of ExecutionContext should be CUDAPlace."); #if defined(PADDLE_WITH_NCCL) - int dev_id = boost::get(ctx.GetPlace()).device; + int dev_id = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()).device; int root_dev_id = ctx.Attr("root"); auto in = ctx.Input("X"); diff --git a/paddle/fluid/operators/distributed_ops/ref_by_trainer_id_op.h b/paddle/fluid/operators/distributed_ops/ref_by_trainer_id_op.h index 49dde44d6b..b9a5796bef 100644 --- a/paddle/fluid/operators/distributed_ops/ref_by_trainer_id_op.h +++ b/paddle/fluid/operators/distributed_ops/ref_by_trainer_id_op.h @@ -32,7 +32,7 @@ class RefByTrainerIdKernel : public framework::OpKernel { #ifdef PADDLE_WITH_CUDA auto stream = context.cuda_device_context().stream(); memory::Copy<>(platform::CPUPlace(), &trainer_id, - boost::get(context.GetPlace()), + BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()), trainer_id_data, sizeof(int64_t), stream); #endif } else { diff --git a/paddle/fluid/operators/edit_distance_op.cu b/paddle/fluid/operators/edit_distance_op.cu index c7217b9f75..8d79626aa8 100644 --- a/paddle/fluid/operators/edit_distance_op.cu +++ b/paddle/fluid/operators/edit_distance_op.cu @@ -134,7 +134,7 @@ class EditDistanceGPUKernel : public framework::OpKernel { if (normalized) { distance = distance / n; } - memory::Copy(boost::get(ctx.GetPlace()), out + num, + memory::Copy(BOOST_GET_CONST(Place, ctx.GetPlace()), out + num, platform::CPUPlace(), &distance, sizeof(T), stream); } else { framework::Tensor dist_t; diff --git a/paddle/fluid/operators/elementwise/elementwise_op_function.h b/paddle/fluid/operators/elementwise/elementwise_op_function.h index 807b2e8faa..429bb11ee1 100644 --- a/paddle/fluid/operators/elementwise/elementwise_op_function.h +++ b/paddle/fluid/operators/elementwise/elementwise_op_function.h @@ -226,7 +226,7 @@ void CommonForwardBroadcastCUDA( framework::Tensor *z, int *x_dims_array, int *y_dims_array, int *out_dims_array, int max_dim, const platform::CUDADeviceContext &ctx, Functor func, const bool is_xsize_larger = true) { - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); auto cplace = platform::CPUPlace(); const T *x_data = x->data(); const T *y_data = y->data(); @@ -782,7 +782,7 @@ void CommonGradBroadcastCUDA( framework::Tensor *dx, framework::Tensor *dy, int *x_dims_array, int *y_dims_array, int *out_dims_array, int max_dim, const platform::CUDADeviceContext &ctx, DX_OP dx_op, DY_OP dy_op) { - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); auto cplace = platform::CPUPlace(); const T *x_data = x.data(); const T *y_data = y.data(); diff --git a/paddle/fluid/operators/elementwise/test_elementwise_op_grad_grad.h b/paddle/fluid/operators/elementwise/test_elementwise_op_grad_grad.h index c7ce5142c0..89849ef92c 100644 --- a/paddle/fluid/operators/elementwise/test_elementwise_op_grad_grad.h +++ b/paddle/fluid/operators/elementwise/test_elementwise_op_grad_grad.h @@ -85,11 +85,11 @@ class TestElementwiseOpGradGrad { auto src = feed_datas_[in_name].data(); auto src_place = platform::CPUPlace(); if (platform::is_cpu_place(place_)) { - auto dst_place = boost::get(place_); + auto dst_place = BOOST_GET_CONST(platform::CPUPlace, place_); memory::Copy(dst_place, dst, src_place, src, bytes); } else if (platform::is_gpu_place(place_)) { #ifdef PADDLE_WITH_CUDA - auto dst_place = boost::get(place_); + auto dst_place = BOOST_GET_CONST(platform::CUDAPlace, place_); memory::Copy(dst_place, dst, src_place, src, bytes, nullptr); #else PADDLE_THROW("Not compiled with cuda"); diff --git a/paddle/fluid/operators/eye_op.cc b/paddle/fluid/operators/eye_op.cc index aa7f7035ba..c0ee37e7fd 100644 --- a/paddle/fluid/operators/eye_op.cc +++ b/paddle/fluid/operators/eye_op.cc @@ -48,7 +48,7 @@ class EyeOpVarTypeInference : public framework::VarTypeInference { public: void operator()(framework::InferVarTypeContext* ctx) const override { auto data_type = static_cast( - boost::get(ctx->GetAttr("dtype"))); + BOOST_GET_CONST(int, ctx->GetAttr("dtype"))); ctx->SetOutputDataType("Out", data_type); } }; diff --git a/paddle/fluid/operators/fake_quantize_op.cu b/paddle/fluid/operators/fake_quantize_op.cu index c8182f3a9a..6813c03933 100644 --- a/paddle/fluid/operators/fake_quantize_op.cu +++ b/paddle/fluid/operators/fake_quantize_op.cu @@ -262,7 +262,7 @@ struct FindRangeAbsMaxFunctor { const framework::Tensor& last_scale, const framework::Tensor& iter, const int window_size, framework::Tensor* scales_arr, framework::Tensor* out_scale) { - const auto gpu_place = boost::get(ctx.GetPlace()); + const auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); T* scale_arr = scales_arr->mutable_data(gpu_place); T* out_scale_data = out_scale->mutable_data(gpu_place); @@ -299,7 +299,7 @@ struct FindMovingAverageAbsMaxFunctor { const framework::Tensor& in_state, const T* cur_scale, const float rate, framework::Tensor* out_state, framework::Tensor* out_accum, framework::Tensor* out_scale) { - const auto gpu_place = boost::get(ctx.GetPlace()); + const auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); T accum; T state; diff --git a/paddle/fluid/operators/fill_any_like_op.cc b/paddle/fluid/operators/fill_any_like_op.cc index d05a5163b5..1e908d5ead 100644 --- a/paddle/fluid/operators/fill_any_like_op.cc +++ b/paddle/fluid/operators/fill_any_like_op.cc @@ -73,7 +73,7 @@ class FillAnyLikeVarTypeInference : public framework::VarTypeInference { public: void operator()(framework::InferVarTypeContext *ctx) const override { auto var_data_type = static_cast( - boost::get(ctx->GetAttr("dtype"))); + BOOST_GET_CONST(int, ctx->GetAttr("dtype"))); if (var_data_type < 0) { ctx->SetOutputDataType("Out", ctx->GetInputDataType("X")); } else { diff --git a/paddle/fluid/operators/fill_constant_op.cc b/paddle/fluid/operators/fill_constant_op.cc index 5916082a8b..36873f1680 100644 --- a/paddle/fluid/operators/fill_constant_op.cc +++ b/paddle/fluid/operators/fill_constant_op.cc @@ -63,7 +63,7 @@ class FillConstantOpVarTypeInference : public framework::VarTypeInference { public: void operator()(framework::InferVarTypeContext* ctx) const override { auto data_type = static_cast( - boost::get(ctx->GetAttr("dtype"))); + BOOST_GET_CONST(int, ctx->GetAttr("dtype"))); ctx->SetOutputDataType("Out", data_type); } }; diff --git a/paddle/fluid/operators/fill_op.cc b/paddle/fluid/operators/fill_op.cc index c325874114..8d761bd49b 100644 --- a/paddle/fluid/operators/fill_op.cc +++ b/paddle/fluid/operators/fill_op.cc @@ -62,7 +62,7 @@ class FillOpVarTypeInference : public framework::VarTypeInference { public: void operator()(framework::InferVarTypeContext* ctx) const override { auto data_type = static_cast( - boost::get(ctx->GetAttr("dtype"))); + BOOST_GET_CONST(int, ctx->GetAttr("dtype"))); ctx->SetOutputDataType("Out", data_type); } }; diff --git a/paddle/fluid/operators/flip_op.cu b/paddle/fluid/operators/flip_op.cu index 898aeabb19..41aae1e1f3 100644 --- a/paddle/fluid/operators/flip_op.cu +++ b/paddle/fluid/operators/flip_op.cu @@ -73,7 +73,7 @@ class FlipKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); auto cplace = platform::CPUPlace(); auto& dev_ctx = ctx.template device_context(); diff --git a/paddle/fluid/operators/fused/fused_elemwise_activation_op.cc b/paddle/fluid/operators/fused/fused_elemwise_activation_op.cc index 868f1a477c..2de24cddd7 100644 --- a/paddle/fluid/operators/fused/fused_elemwise_activation_op.cc +++ b/paddle/fluid/operators/fused/fused_elemwise_activation_op.cc @@ -267,14 +267,14 @@ class FusedElemwiseActivationGradMaker grad_op->SetAttrMap(this->Attrs()); - std::vector functor_names = - boost::get>(grad_op->GetAttr("functor_list")); + std::vector functor_names = BOOST_GET_CONST( + std::vector, grad_op->GetAttr("functor_list")); functor_names[0] += "_grad"; functor_names[1] += "_grad"; grad_op->SetAttr("functor_list", functor_names); - if (boost::get(grad_op->GetAttr("save_intermediate_out"))) { + if (BOOST_GET_CONST(bool, grad_op->GetAttr("save_intermediate_out"))) { // PADDLE_ENFORCE_NE(Output("IntermediateOut").size(), 0); grad_op->SetInput("IntermediateOut", this->Output("IntermediateOut")); grad_op->SetOutput(framework::GradVarName("IntermediateOut"), diff --git a/paddle/fluid/operators/fused/fused_embedding_seq_pool_op.cc b/paddle/fluid/operators/fused/fused_embedding_seq_pool_op.cc index faaed6545c..d34e5cddda 100644 --- a/paddle/fluid/operators/fused/fused_embedding_seq_pool_op.cc +++ b/paddle/fluid/operators/fused/fused_embedding_seq_pool_op.cc @@ -53,7 +53,7 @@ class FusedEmbeddingSeqPoolOp : public framework::OperatorWithKernel { int64_t last_dim = FusedEmbeddingSeqPoolLastDim(table_dims, ids_dims); // in compile time, the lod level of ids must be 1 framework::VarDesc* ids_desc = - boost::get(ctx->GetInputVarPtrs("Ids")[0]); + BOOST_GET(framework::VarDesc*, ctx->GetInputVarPtrs("Ids")[0]); PADDLE_ENFORCE_EQ(ids_desc->GetLoDLevel(), 1, platform::errors::InvalidArgument( "In compile time, the LoD Level of Ids should be 1. " @@ -148,7 +148,7 @@ class FusedEmbeddingSeqPoolOpGradVarTypeInference void operator()(framework::InferVarTypeContext* ctx) const override { auto out_var_name = framework::GradVarName("W"); auto attr = ctx->GetAttr("is_sparse"); - bool is_sparse = boost::get(attr); + bool is_sparse = BOOST_GET(bool, attr); if (is_sparse) { VLOG(3) << "fused_embedding_seq_pool_grad op " << framework::GradVarName("W") << " is set to SelectedRows"; diff --git a/paddle/fluid/operators/gather.cu.h b/paddle/fluid/operators/gather.cu.h index b3264ec0ad..b4496290df 100644 --- a/paddle/fluid/operators/gather.cu.h +++ b/paddle/fluid/operators/gather.cu.h @@ -114,7 +114,7 @@ template void GPUGatherNd(const framework::ExecutionContext& context, const Tensor& input, const Tensor& index, Tensor* output) { const auto& ctx = context.template device_context(); - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); auto cplace = platform::CPUPlace(); auto index_dims = index.dims(); diff --git a/paddle/fluid/operators/hierarchical_sigmoid_op.cc b/paddle/fluid/operators/hierarchical_sigmoid_op.cc index 1b8a206d66..dd72a212d3 100644 --- a/paddle/fluid/operators/hierarchical_sigmoid_op.cc +++ b/paddle/fluid/operators/hierarchical_sigmoid_op.cc @@ -239,7 +239,7 @@ class HierarchicalSigmoidGradOpGradVarTypeInference } auto attr = ctx->GetAttr("is_sparse"); - bool is_sparse = boost::get(attr); + bool is_sparse = BOOST_GET(bool, attr); if (is_sparse) { VLOG(3) << "hierarchical_sigmoid_grad op " << framework::GradVarName("W") << " is set to SelectedRows"; diff --git a/paddle/fluid/operators/im2sequence_op.cc b/paddle/fluid/operators/im2sequence_op.cc index 03bb12f1c8..ae7981a49b 100644 --- a/paddle/fluid/operators/im2sequence_op.cc +++ b/paddle/fluid/operators/im2sequence_op.cc @@ -42,7 +42,7 @@ class Im2SequenceOp : public framework::OperatorWithKernel { if (!ctx->IsRuntime()) { // set lod level for compile-time framework::VarDesc* out_desc = - boost::get(ctx->GetOutputVarPtrs("Out")[0]); + BOOST_GET(framework::VarDesc*, ctx->GetOutputVarPtrs("Out")[0]); out_desc->SetLoDLevel(1); } diff --git a/paddle/fluid/operators/increment_op.cc b/paddle/fluid/operators/increment_op.cc index 2001d66865..b4f33dad92 100644 --- a/paddle/fluid/operators/increment_op.cc +++ b/paddle/fluid/operators/increment_op.cc @@ -77,7 +77,7 @@ class IncrementGradOpMaker : public framework::SingleGradOpMaker { grad_op->SetType("increment"); grad_op->SetInput("X", this->Output("Out")); grad_op->SetOutput("Out", this->Input("X")); - grad_op->SetAttr("step", -boost::get(this->GetAttr("step"))); + grad_op->SetAttr("step", -BOOST_GET_CONST(float, this->GetAttr("step"))); } }; diff --git a/paddle/fluid/operators/inplace_abn_op.cc b/paddle/fluid/operators/inplace_abn_op.cc index 50e079672f..c8589b0f22 100644 --- a/paddle/fluid/operators/inplace_abn_op.cc +++ b/paddle/fluid/operators/inplace_abn_op.cc @@ -180,7 +180,7 @@ class InplaceABNOpGradMaker : public framework::SingleGradOpMaker { op->SetInput("SavedVariance", this->Output("SavedVariance")); // used when setting use_global_stats True during training - if (boost::get(this->GetAttr("use_global_stats"))) { + if (BOOST_GET_CONST(bool, this->GetAttr("use_global_stats"))) { op->SetInput("Mean", this->Output("MeanOut")); op->SetInput("Variance", this->Output("VarianceOut")); } diff --git a/paddle/fluid/operators/lod_reset_op.cc b/paddle/fluid/operators/lod_reset_op.cc index 1b4ab5a184..377ecacabc 100644 --- a/paddle/fluid/operators/lod_reset_op.cc +++ b/paddle/fluid/operators/lod_reset_op.cc @@ -82,7 +82,7 @@ class LoDResetOpVarTypeInference void operator()(framework::InferVarTypeContext *ctx) const override { auto x_var_name = Input(ctx, "X").front(); auto out_var_name = Output(ctx, "Out").front(); - bool append = boost::get(ctx->GetAttr("append")); + bool append = BOOST_GET_CONST(bool, ctx->GetAttr("append")); if (ctx->HasInput("Y")) { auto y_var_name = Input(ctx, "Y").front(); auto y_lod_level = std::max(GetLoDLevel(ctx, y_var_name), 1); diff --git a/paddle/fluid/operators/lookup_table_op.cc b/paddle/fluid/operators/lookup_table_op.cc index fc2a2fbb3f..8bf5ba925e 100644 --- a/paddle/fluid/operators/lookup_table_op.cc +++ b/paddle/fluid/operators/lookup_table_op.cc @@ -175,7 +175,7 @@ class LookupTableOpGradVarTypeInference : public framework::VarTypeInference { void operator()(framework::InferVarTypeContext* ctx) const override { auto out_var_name = framework::GradVarName("W"); auto attr = ctx->GetAttr("is_sparse"); - bool is_sparse = boost::get(attr); + bool is_sparse = BOOST_GET(bool, attr); if (is_sparse) { VLOG(3) << "lookup_table_grad op " << framework::GradVarName("W") << " is set to SelectedRows"; diff --git a/paddle/fluid/operators/lookup_table_op.cu b/paddle/fluid/operators/lookup_table_op.cu index c62f7356a9..e2c34e64fa 100644 --- a/paddle/fluid/operators/lookup_table_op.cu +++ b/paddle/fluid/operators/lookup_table_op.cu @@ -144,7 +144,7 @@ class LookupTableGradCUDAKernel : public framework::OpKernel { // copy GPU memory to CPU pinned memory framework::Vector new_rows; new_rows.resize(ids_num); - auto gpu_place = boost::get(context.GetPlace()); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()); // TODO(yuyang18): Strange code here. memory::Copy(gpu_place, new_rows.CUDAMutableData(context.GetPlace()), diff --git a/paddle/fluid/operators/lookup_table_v2_op.cc b/paddle/fluid/operators/lookup_table_v2_op.cc index 849287ce5e..53c9e70dc7 100644 --- a/paddle/fluid/operators/lookup_table_v2_op.cc +++ b/paddle/fluid/operators/lookup_table_v2_op.cc @@ -162,7 +162,7 @@ class LookupTableV2OpGradVarTypeInference : public framework::VarTypeInference { void operator()(framework::InferVarTypeContext* ctx) const override { auto out_var_name = framework::GradVarName("W"); auto attr = ctx->GetAttr("is_sparse"); - bool is_sparse = boost::get(attr); + bool is_sparse = BOOST_GET(bool, attr); if (is_sparse) { VLOG(3) << "lookup_table_v2_grad op " << framework::GradVarName("W") << " is set to SelectedRows"; diff --git a/paddle/fluid/operators/lookup_table_v2_op.cu b/paddle/fluid/operators/lookup_table_v2_op.cu index be41473dac..5c98eab403 100644 --- a/paddle/fluid/operators/lookup_table_v2_op.cu +++ b/paddle/fluid/operators/lookup_table_v2_op.cu @@ -144,7 +144,7 @@ class LookupTableV2GradCUDAKernel : public framework::OpKernel { // copy GPU memory to CPU pinned memory framework::Vector new_rows; new_rows.resize(ids_num); - auto gpu_place = boost::get(context.GetPlace()); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()); // TODO(yuyang18): Strange code here. memory::Copy(gpu_place, new_rows.CUDAMutableData(context.GetPlace()), diff --git a/paddle/fluid/operators/match_matrix_tensor_op.cc b/paddle/fluid/operators/match_matrix_tensor_op.cc index 31fab4d5b5..8bad10d723 100644 --- a/paddle/fluid/operators/match_matrix_tensor_op.cc +++ b/paddle/fluid/operators/match_matrix_tensor_op.cc @@ -61,7 +61,7 @@ void MatchMatrixTensorOP::InferShape(framework::InferShapeContext* ctx) const { int64_t tmp_dim_0 = -1; if (ctx->IsRuntime()) { framework::Variable* x_var = - boost::get(ctx->GetInputVarPtrs("X")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("X")[0]); const auto& x_lod = x_var->Get().lod(); PADDLE_ENFORCE_EQ(x_lod.empty(), false, "The Input(X) must hold lod info."); const auto& x_lod_0 = x_lod[0]; @@ -72,7 +72,7 @@ void MatchMatrixTensorOP::InferShape(framework::InferShapeContext* ctx) const { "The Input(X)'s lod info mismatches the actual tensor shape."); framework::Variable* y_var = - boost::get(ctx->GetInputVarPtrs("Y")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("Y")[0]); const auto& y_lod = y_var->Get().lod(); PADDLE_ENFORCE_EQ(y_lod.empty(), false, "The Input(Y) must hold lod info."); const auto& y_lod_0 = y_lod[0]; @@ -97,10 +97,10 @@ void MatchMatrixTensorOP::InferShape(framework::InferShapeContext* ctx) const { } else { // compile time framework::VarDesc* x_desc = - boost::get(ctx->GetInputVarPtrs("X")[0]); + BOOST_GET(framework::VarDesc*, ctx->GetInputVarPtrs("X")[0]); PADDLE_ENFORCE_GE(x_desc->GetLoDLevel(), 1); framework::VarDesc* y_desc = - boost::get(ctx->GetInputVarPtrs("Y")[0]); + BOOST_GET(framework::VarDesc*, ctx->GetInputVarPtrs("Y")[0]); PADDLE_ENFORCE_GE(y_desc->GetLoDLevel(), 1); ctx->ShareLoD("X", "Out"); } diff --git a/paddle/fluid/operators/math/concat_and_split.cc b/paddle/fluid/operators/math/concat_and_split.cc index c6e17fd042..b6bd58d118 100644 --- a/paddle/fluid/operators/math/concat_and_split.cc +++ b/paddle/fluid/operators/math/concat_and_split.cc @@ -45,7 +45,7 @@ class ConcatFunctor { out_cols += t_cols; input_cols[i] = t_cols; } - auto cpu_place = boost::get(context.GetPlace()); + auto cpu_place = BOOST_GET_CONST(platform::CPUPlace, context.GetPlace()); // computation auto output_data = output->data(); @@ -90,7 +90,7 @@ class SplitFunctor { input_cols += t_cols; output_cols[i] = t_cols; } - auto cpu_place = boost::get(context.GetPlace()); + auto cpu_place = BOOST_GET_CONST(platform::CPUPlace, context.GetPlace()); // computation for (int k = 0; k < input_rows; ++k) { diff --git a/paddle/fluid/operators/math/concat_and_split.cu b/paddle/fluid/operators/math/concat_and_split.cu index 5a7cd602c8..a29997e565 100644 --- a/paddle/fluid/operators/math/concat_and_split.cu +++ b/paddle/fluid/operators/math/concat_and_split.cu @@ -266,7 +266,7 @@ class ConcatFunctor { if (!has_same_shape || in_num < 2 || in_num > 4) { tmp_dev_ins_data = memory::Alloc(context, inputs_data.size() * sizeof(T*)); - memory::Copy(boost::get(context.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()), tmp_dev_ins_data->ptr(), platform::CPUPlace(), static_cast(inputs_data.data()), inputs_data.size() * sizeof(T*), context.stream()); @@ -293,7 +293,7 @@ class ConcatFunctor { } else { auto tmp_dev_ins_col_data = memory::Alloc(context, inputs_col.size() * sizeof(int)); - memory::Copy(boost::get(context.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()), tmp_dev_ins_col_data->ptr(), platform::CPUPlace(), static_cast(inputs_col.data()), inputs_col.size() * sizeof(int), context.stream()); @@ -356,7 +356,7 @@ class SplitFunctor { if (!has_same_shape || o_num < 2 || o_num > 4) { tmp_dev_outs_data = memory::Alloc(context, outputs_data.size() * sizeof(T*)); - memory::Copy(boost::get(context.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()), tmp_dev_outs_data->ptr(), platform::CPUPlace(), reinterpret_cast(outputs_data.data()), outputs_data.size() * sizeof(T*), context.stream()); @@ -385,7 +385,7 @@ class SplitFunctor { memory::Alloc(context, outputs_cols.size() * sizeof(int)); - memory::Copy(boost::get(context.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()), tmp_dev_ins_col_data->ptr(), platform::CPUPlace(), reinterpret_cast(outputs_cols.data()), outputs_cols.size() * sizeof(int), context.stream()); diff --git a/paddle/fluid/operators/math/selected_rows_functor.cc b/paddle/fluid/operators/math/selected_rows_functor.cc index d9a3c668a1..3bb9efc531 100644 --- a/paddle/fluid/operators/math/selected_rows_functor.cc +++ b/paddle/fluid/operators/math/selected_rows_functor.cc @@ -59,14 +59,14 @@ struct SelectedRowsAdd { auto* out_data = out_value->data(); auto* in1_data = in1_value.data(); - memory::Copy(boost::get(out_place), out_data, - boost::get(in1_place), in1_data, + memory::Copy(BOOST_GET_CONST(platform::CPUPlace, out_place), out_data, + BOOST_GET_CONST(platform::CPUPlace, in1_place), in1_data, in1_value.numel() * sizeof(T)); auto* in2_data = in2_value.data(); - memory::Copy(boost::get(out_place), + memory::Copy(BOOST_GET_CONST(platform::CPUPlace, out_place), out_data + in1_value.numel(), - boost::get(in2_place), in2_data, + BOOST_GET_CONST(platform::CPUPlace, in2_place), in2_data, in2_value.numel() * sizeof(T)); } }; @@ -139,9 +139,9 @@ struct SelectedRowsAddTo { auto* in1_data = in1_value.data(); auto* in2_data = in2_value->data(); - memory::Copy(boost::get(in2_place), + memory::Copy(BOOST_GET_CONST(platform::CPUPlace, in2_place), in2_data + input2_offset, - boost::get(in1_place), in1_data, + BOOST_GET_CONST(platform::CPUPlace, in1_place), in1_data, in1_value.numel() * sizeof(T)); } }; @@ -333,9 +333,9 @@ struct MergeAdd { for (auto* in : inputs) { auto* in_data = in->value().data(); auto in_numel = in->rows().size() * input_width; - memory::Copy(boost::get(out_place), + memory::Copy(BOOST_GET_CONST(platform::CPUPlace, out_place), out_data + copied_numel, - boost::get(in_place), in_data, + BOOST_GET_CONST(platform::CPUPlace, in_place), in_data, in_numel * sizeof(T)); copied_numel += in_numel; } diff --git a/paddle/fluid/operators/math/selected_rows_functor.cu b/paddle/fluid/operators/math/selected_rows_functor.cu index b3e2c8a667..9cce52c6d4 100644 --- a/paddle/fluid/operators/math/selected_rows_functor.cu +++ b/paddle/fluid/operators/math/selected_rows_functor.cu @@ -61,14 +61,14 @@ struct SelectedRowsAdd { auto out_place = context.GetPlace(); PADDLE_ENFORCE_EQ(platform::is_gpu_place(out_place), true); - memory::Copy(boost::get(out_place), out_data, - boost::get(in1_place), in1_data, + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, out_place), out_data, + BOOST_GET_CONST(platform::CUDAPlace, in1_place), in1_data, in1_value.numel() * sizeof(T), context.stream()); auto* in2_data = in2_value.data(); - memory::Copy(boost::get(out_place), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, out_place), out_data + in1_value.numel(), - boost::get(in2_place), in2_data, + BOOST_GET_CONST(platform::CUDAPlace, in2_place), in2_data, in2_value.numel() * sizeof(T), context.stream()); } }; @@ -168,9 +168,9 @@ struct SelectedRowsAddTo { auto* in1_data = in1_value.data(); auto* in2_data = in2_value->data(); - memory::Copy(boost::get(in2_place), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, in2_place), in2_data + input2_offset, - boost::get(in1_place), in1_data, + BOOST_GET_CONST(platform::CUDAPlace, in1_place), in1_data, in1_value.numel() * sizeof(T), context.stream()); } }; diff --git a/paddle/fluid/operators/math/tree2col.cc b/paddle/fluid/operators/math/tree2col.cc index 05ce5bc7a2..cafcf63193 100644 --- a/paddle/fluid/operators/math/tree2col.cc +++ b/paddle/fluid/operators/math/tree2col.cc @@ -87,7 +87,7 @@ class Tree2ColFunctor { framework::Tensor *patch, int max_depth) { std::vector> tr; auto feature_dims = node_features.dims(); - auto cpu_place = boost::get(context.GetPlace()); + auto cpu_place = BOOST_GET_CONST(platform::CPUPlace, context.GetPlace()); math::SetConstant constant; int64_t feature_size = feature_dims[1]; size_t patch_elem_size = 3 * static_cast(feature_size); @@ -140,7 +140,7 @@ class Col2TreeFunctor { int max_depth) { std::vector> tr; auto output_dims = out_grad.dims(); - auto cpu_place = boost::get(context.GetPlace()); + auto cpu_place = BOOST_GET_CONST(platform::CPUPlace, context.GetPlace()); math::SetConstant constant; int64_t output_size = output_dims[1]; size_t grad_elem_size = 3 * static_cast(output_size); diff --git a/paddle/fluid/operators/math/tree2col.cu b/paddle/fluid/operators/math/tree2col.cu index 3c50a525c2..d9b787b6df 100644 --- a/paddle/fluid/operators/math/tree2col.cu +++ b/paddle/fluid/operators/math/tree2col.cu @@ -52,7 +52,7 @@ class Tree2ColFunctor { const framework::Tensor& node_features, framework::Tensor* patch, int max_depth) { std::vector> tr; - auto gpu_place = boost::get(context.GetPlace()); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()); auto cpu_place = platform::CPUPlace(); auto stream = context.stream(); auto feature_dims = node_features.dims(); @@ -124,7 +124,7 @@ class Col2TreeFunctor { const framework::Tensor& patch_grad, framework::Tensor* embedding_grad, int max_depth) { std::vector> tr; - auto gpu_place = boost::get(context.GetPlace()); + auto gpu_place = BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()); auto cpu_place = platform::CPUPlace(); auto stream = context.stream(); auto output_dims = patch_grad.dims(); diff --git a/paddle/fluid/operators/mkldnn/concat_mkldnn_op.cc b/paddle/fluid/operators/mkldnn/concat_mkldnn_op.cc index 436bbdc553..bd9bee8873 100644 --- a/paddle/fluid/operators/mkldnn/concat_mkldnn_op.cc +++ b/paddle/fluid/operators/mkldnn/concat_mkldnn_op.cc @@ -50,7 +50,7 @@ static platform::CPUPlace GetCpuPlace( auto place = ctx.GetPlace(); PADDLE_ENFORCE(paddle::platform::is_cpu_place(place), "It must use CPUPlace."); - return boost::get(place); + return BOOST_GET_CONST(platform::CPUPlace, place); } static const mkldnn::engine& GetMKLDNNEngine( diff --git a/paddle/fluid/operators/multiplex_op.cu b/paddle/fluid/operators/multiplex_op.cu index 1ef54ecc73..7d713914d4 100644 --- a/paddle/fluid/operators/multiplex_op.cu +++ b/paddle/fluid/operators/multiplex_op.cu @@ -36,7 +36,8 @@ class MultiplexGPUKernel : public framework::OpKernel { TensorCopySync(*ids, platform::CPUPlace(), &index_t_cpu); auto* index = index_t_cpu.data(); auto stream = ctx.cuda_device_context().stream(); - platform::CUDAPlace place = boost::get(ctx.GetPlace()); + platform::CUDAPlace place = + BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); for (auto i = 0; i < rows; i++) { int32_t k = index[i]; PADDLE_ENFORCE_GE(k, 0, "index must be nonnegative."); @@ -78,7 +79,8 @@ class MultiplexGradGPUKernel : public framework::OpKernel { auto* index = index_t_cpu.data(); auto stream = ctx.cuda_device_context().stream(); - platform::CUDAPlace place = boost::get(ctx.GetPlace()); + platform::CUDAPlace place = + BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); for (auto i = 0; i < rows; i++) { size_t k = static_cast(index[i]); if (d_ins[k]) { diff --git a/paddle/fluid/operators/multiplex_op.h b/paddle/fluid/operators/multiplex_op.h index 44d6cc84a6..3485652984 100644 --- a/paddle/fluid/operators/multiplex_op.h +++ b/paddle/fluid/operators/multiplex_op.h @@ -34,7 +34,8 @@ class MultiplexCPUKernel : public framework::OpKernel { auto rows = ins[0]->dims()[0]; auto cols = ins[0]->numel() / rows; auto index = ids->data(); - platform::CPUPlace place = boost::get(ctx.GetPlace()); + platform::CPUPlace place = + BOOST_GET_CONST(platform::CPUPlace, ctx.GetPlace()); for (auto i = 0; i < rows; i++) { int32_t k = index[i]; PADDLE_ENFORCE_GE(k, 0, "index must be nonnegative."); @@ -72,7 +73,8 @@ class MultiplexGradCPUKernel : public framework::OpKernel { auto rows = d_ins[idx]->dims()[0]; auto cols = d_ins[idx]->numel() / rows; auto* index = ids->data(); - platform::CPUPlace place = boost::get(ctx.GetPlace()); + platform::CPUPlace place = + BOOST_GET_CONST(platform::CPUPlace, ctx.GetPlace()); for (auto i = 0; i < rows; i++) { size_t k = static_cast(index[i]); if (d_ins[k]) { diff --git a/paddle/fluid/operators/nccl/nccl_op.cu.cc b/paddle/fluid/operators/nccl/nccl_op.cu.cc index 8de974bc2b..871eeb077e 100644 --- a/paddle/fluid/operators/nccl/nccl_op.cu.cc +++ b/paddle/fluid/operators/nccl/nccl_op.cu.cc @@ -61,7 +61,8 @@ class NCCLAllReduceKernel : public framework::OpKernel { PADDLE_THROW("Invalid reduction. default ncclSum."); } // device id - int gpu_id = boost::get(ctx.GetPlace()).GetDeviceId(); + int gpu_id = + BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()).GetDeviceId(); int idx = comm->GetCommId(gpu_id); VLOG(3) << "gpu : " << " invoke allreduce. send " << x->numel() << " recv " @@ -101,7 +102,8 @@ class NCCLReduceKernel : public framework::OpKernel { PADDLE_THROW("Invalid reduction. default ncclSum."); } // device id - int gpu_id = boost::get(ctx.GetPlace()).GetDeviceId(); + int gpu_id = + BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()).GetDeviceId(); int idx = comm->GetCommId(gpu_id); T* recvbuffer = nullptr; if (root == gpu_id) { @@ -129,7 +131,8 @@ class NCCLBcastKernel : public framework::OpKernel { int root = ctx.Attr("root"); auto* comm = ctx.Input("Communicator"); // device id - int gpu_id = boost::get(ctx.GetPlace()).GetDeviceId(); + int gpu_id = + BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()).GetDeviceId(); int idx = comm->GetCommId(gpu_id); if (idx == root) { auto* x = ctx.Input("X"); diff --git a/paddle/fluid/operators/nce_op.cc b/paddle/fluid/operators/nce_op.cc index f92afb95df..10ed364e37 100644 --- a/paddle/fluid/operators/nce_op.cc +++ b/paddle/fluid/operators/nce_op.cc @@ -293,7 +293,7 @@ class NCEOpGradVarTypeInference : public framework::VarTypeInference { auto weight_grad = framework::GradVarName("Weight"); auto attr = ctx->GetAttr("is_sparse"); - bool is_sparse = boost::get(attr); + bool is_sparse = BOOST_GET(bool, attr); if (is_sparse) { VLOG(3) << "nce_op_grad op " << weight_grad << " and " << " is set to SelectedRows"; diff --git a/paddle/fluid/operators/partial_concat_op.cu b/paddle/fluid/operators/partial_concat_op.cu index a155db0355..779a45daf7 100644 --- a/paddle/fluid/operators/partial_concat_op.cu +++ b/paddle/fluid/operators/partial_concat_op.cu @@ -118,7 +118,7 @@ class PartialConcatOpCUDAKernel : public framework::OpKernel { in_data.emplace_back(in_vars[i]->data()); auto tmp_in_array = memory::Alloc(dev_ctx, in_data.size() * sizeof(T *)); - memory::Copy(boost::get(dev_ctx.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()), tmp_in_array->ptr(), platform::CPUPlace(), reinterpret_cast(in_data.data()), in_data.size() * sizeof(T *), dev_ctx.stream()); @@ -188,7 +188,7 @@ class PartialConcatGradOpCUDAKernel : public framework::OpKernel { } auto tmp_out_array = memory::Alloc(dev_ctx, out_data.size() * sizeof(T *)); - memory::Copy(boost::get(dev_ctx.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()), tmp_out_array->ptr(), platform::CPUPlace(), reinterpret_cast(out_data.data()), out_data.size() * sizeof(T *), dev_ctx.stream()); diff --git a/paddle/fluid/operators/partial_sum_op.cu b/paddle/fluid/operators/partial_sum_op.cu index 27b06e227f..c401a222c3 100644 --- a/paddle/fluid/operators/partial_sum_op.cu +++ b/paddle/fluid/operators/partial_sum_op.cu @@ -115,7 +115,7 @@ class PartialSumOpCUDAKernel : public framework::OpKernel { if (!in_data.empty()) { auto tmp_in_array = memory::Alloc(dev_ctx, in_data.size() * sizeof(T *)); - memory::Copy(boost::get(dev_ctx.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()), tmp_in_array->ptr(), platform::CPUPlace(), reinterpret_cast(in_data.data()), in_data.size() * sizeof(T *), dev_ctx.stream()); @@ -191,7 +191,7 @@ class PartialSumGradOpCUDAKernel : public framework::OpKernel { auto tmp_out_array = memory::Alloc(dev_ctx, out_data.size() * sizeof(T *)); - memory::Copy(boost::get(dev_ctx.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()), tmp_out_array->ptr(), platform::CPUPlace(), reinterpret_cast(out_data.data()), out_data.size() * sizeof(T *), dev_ctx.stream()); diff --git a/paddle/fluid/operators/prroi_pool_op.cu b/paddle/fluid/operators/prroi_pool_op.cu index e6cafb2584..b85352ae65 100644 --- a/paddle/fluid/operators/prroi_pool_op.cu +++ b/paddle/fluid/operators/prroi_pool_op.cu @@ -265,7 +265,7 @@ class GPUPRROIPoolOpKernel : public framework::OpKernel { int bytes = rois_batch_id_list.numel() * sizeof(int); auto roi_ptr = memory::Alloc(dev_ctx, bytes); int* roi_id_data = reinterpret_cast(roi_ptr->ptr()); - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); memory::Copy(gplace, roi_id_data, cplace, rois_batch_id_data, bytes, dev_ctx.stream()); @@ -341,7 +341,7 @@ class GPUPRROIPoolGradOpKernel : public framework::OpKernel { int bytes = rois_batch_id_list.numel() * sizeof(int); auto roi_ptr = memory::Alloc(dev_ctx, bytes); int* roi_id_data = reinterpret_cast(roi_ptr->ptr()); - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); memory::Copy(gplace, roi_id_data, cplace, rois_batch_id_data, bytes, dev_ctx.stream()); diff --git a/paddle/fluid/operators/py_func_op.cc b/paddle/fluid/operators/py_func_op.cc index 8497981662..354e5c60a6 100644 --- a/paddle/fluid/operators/py_func_op.cc +++ b/paddle/fluid/operators/py_func_op.cc @@ -133,10 +133,10 @@ class PyFuncOpVarTypeInference : public framework::StaticGraphVarTypeInference { has_in, has_out)); PADDLE_ENFORCE_GE( - boost::get(ctx->GetAttr(kForwardPythonCallableId)), 0, + BOOST_GET_CONST(int, ctx->GetAttr(kForwardPythonCallableId)), 0, platform::errors::InvalidArgument( "Function id cannot be less than 0, but received value is %d.", - boost::get(ctx->GetAttr(kForwardPythonCallableId)))); + BOOST_GET_CONST(int, ctx->GetAttr(kForwardPythonCallableId)))); if (!has_out) return; @@ -227,7 +227,7 @@ class PyFuncOpGradDescMaker : public framework::GradOpDescMakerBase { std::vector> operator()() const override { auto &fwd_attrs = Attrs(); // no backward op when backward_id is less than 0 - if (boost::get(fwd_attrs.at(kBackwardPythonCallableId)) < 0) { + if (BOOST_GET_CONST(int, fwd_attrs.at(kBackwardPythonCallableId)) < 0) { return {}; } @@ -247,8 +247,8 @@ class PyFuncOpGradDescMaker : public framework::GradOpDescMakerBase { // For memory reused, some inputs/output in forward part may be not needed // in backward part. Skipping these vars helps to save memory - auto &backward_skip_var_list = boost::get>( - fwd_attrs.at(kPyFuncBackwardSkipVars)); + auto &backward_skip_var_list = BOOST_GET_CONST( + std::vector, fwd_attrs.at(kPyFuncBackwardSkipVars)); std::unordered_set backward_skip_var_set( backward_skip_var_list.begin(), backward_skip_var_list.end()); std::vector bwd_ins; diff --git a/paddle/fluid/operators/randperm_op.cc b/paddle/fluid/operators/randperm_op.cc index 70808363e1..919a05a0d9 100644 --- a/paddle/fluid/operators/randperm_op.cc +++ b/paddle/fluid/operators/randperm_op.cc @@ -74,7 +74,7 @@ class RandpermOpVarTypeInference : public framework::VarTypeInference { public: void operator()(framework::InferVarTypeContext *ctx) const override { auto var_data_type = static_cast( - boost::get(ctx->GetAttr("dtype"))); + BOOST_GET_CONST(int, ctx->GetAttr("dtype"))); ctx->SetOutputDataType("Out", var_data_type); } }; diff --git a/paddle/fluid/operators/reader/buffered_reader.cc b/paddle/fluid/operators/reader/buffered_reader.cc index e72820611d..2fb2fcc40f 100644 --- a/paddle/fluid/operators/reader/buffered_reader.cc +++ b/paddle/fluid/operators/reader/buffered_reader.cc @@ -44,7 +44,7 @@ BufferedReader::BufferedReader( VLOG(1) << "BufferedReader"; #ifdef PADDLE_WITH_CUDA if (platform::is_gpu_place(place_)) { - int dev_idx = boost::get(place_).device; + int dev_idx = BOOST_GET_CONST(platform::CUDAPlace, place_).device; compute_stream_ = ((platform::CUDADeviceContext *)(platform::DeviceContextPool::Instance() .Get(place_))) @@ -102,7 +102,8 @@ void BufferedReader::ReadAsync(size_t i) { // NOTE(zjl): cudaStreamWaitEvent() must be called after all // gpu[i].mutable_data() is called, since some ops release // gpu memory immediately without waiting gpu kernel ends - platform::SetDeviceId(boost::get(place_).device); + platform::SetDeviceId( + BOOST_GET_CONST(platform::CUDAPlace, place_).device); PADDLE_ENFORCE_CUDA_SUCCESS( cudaEventRecord(events_[i].get(), compute_stream_)); PADDLE_ENFORCE_CUDA_SUCCESS( @@ -116,12 +117,12 @@ void BufferedReader::ReadAsync(size_t i) { auto size = cpu[i].numel() * paddle::framework::SizeOfType(cpu[i].type()); if (platform::is_cuda_pinned_place(cpu_place)) { - memory::Copy(boost::get(place_), gpu_ptr, - boost::get(cpu_place), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, place_), gpu_ptr, + BOOST_GET_CONST(platform::CUDAPinnedPlace, cpu_place), cpu_ptr, size, stream_.get()); } else if ((platform::is_gpu_place(cpu_place))) { - memory::Copy(boost::get(place_), gpu_ptr, - boost::get(cpu_place), cpu_ptr, + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, place_), gpu_ptr, + BOOST_GET_CONST(platform::CUDAPlace, cpu_place), cpu_ptr, size, stream_.get()); } else { platform::CUDAPinnedPlace cuda_pinned_place; @@ -130,9 +131,9 @@ void BufferedReader::ReadAsync(size_t i) { auto cuda_pinned_ptr = cuda_pinned_tensor.mutable_data(cuda_pinned_place, cpu[i].type()); memory::Copy(cuda_pinned_place, cuda_pinned_ptr, - boost::get(cpu_place), cpu_ptr, + BOOST_GET_CONST(platform::CPUPlace, cpu_place), cpu_ptr, size); - memory::Copy(boost::get(place_), gpu_ptr, + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, place_), gpu_ptr, cuda_pinned_place, cuda_pinned_ptr, size, stream_.get()); PADDLE_ENFORCE_CUDA_SUCCESS(cudaStreamSynchronize(stream_.get())); } diff --git a/paddle/fluid/operators/reader/create_custom_reader_op.cc b/paddle/fluid/operators/reader/create_custom_reader_op.cc index bf44a2d53e..1ba7228140 100644 --- a/paddle/fluid/operators/reader/create_custom_reader_op.cc +++ b/paddle/fluid/operators/reader/create_custom_reader_op.cc @@ -114,7 +114,7 @@ class CustomReaderInferShape : public framework::InferShapeBase { res_lod_levels.push_back(sink_var->GetLoDLevel()); } auto* out_reader = - boost::get(ctx->GetOutputVarPtrs("Out")[0]); + BOOST_GET(framework::VarDesc*, ctx->GetOutputVarPtrs("Out")[0]); out_reader->SetShapes(res_dims); out_reader->SetLoDLevels(res_lod_levels); } @@ -127,10 +127,10 @@ class CustomReaderInferVarType : public framework::VarTypeInference { PADDLE_ENFORCE(ctx->HasVar(out_var_name)); ctx->SetType(out_var_name, framework::proto::VarType::READER); - auto sink_var_names = - boost::get>(ctx->GetAttr("sink_var_names")); + auto sink_var_names = BOOST_GET_CONST(std::vector, + ctx->GetAttr("sink_var_names")); const auto* sub_block = - boost::get(ctx->GetAttr("sub_block")); + BOOST_GET_CONST(framework::BlockDesc*, ctx->GetAttr("sub_block")); std::vector res_data_types; for (const std::string& var_name : sink_var_names) { framework::VarDesc* var = sub_block->FindVar(var_name); diff --git a/paddle/fluid/operators/reader/read_op.cc b/paddle/fluid/operators/reader/read_op.cc index 2ba2ef244f..ec2b2d5f41 100644 --- a/paddle/fluid/operators/reader/read_op.cc +++ b/paddle/fluid/operators/reader/read_op.cc @@ -54,7 +54,7 @@ class ReadInferShape : public framework::InferShapeBase { "The reader's dim number doesn't match the output number.")); ctx->SetOutputsDim("Out", reader_dims); auto in_desc = - boost::get(ctx->GetInputVarPtrs("Reader")[0]); + BOOST_GET(framework::VarDesc*, ctx->GetInputVarPtrs("Reader")[0]); auto in_lod_levels = in_desc->GetLoDLevels(); auto out_var_ptrs = ctx->GetOutputVarPtrs("Out"); PADDLE_ENFORCE_EQ( @@ -63,7 +63,7 @@ class ReadInferShape : public framework::InferShapeBase { "LoDLevels of Input(Reader) must be the same as the " "number of Outputs(Out).")); for (size_t i = 0; i < out_var_ptrs.size(); ++i) { - auto* out_desc = boost::get(out_var_ptrs[i]); + auto* out_desc = BOOST_GET(framework::VarDesc*, out_var_ptrs[i]); out_desc->SetLoDLevel(in_lod_levels[i]); } } @@ -73,7 +73,7 @@ class ReadInferShape : public framework::InferShapeBase { class ReadInferVarType : public framework::StaticGraphVarTypeInference { public: void operator()(framework::InferVarTypeContext* ctx) const override { - bool infer_out = boost::get(ctx->GetAttr("infer_out")); + bool infer_out = BOOST_GET_CONST(bool, ctx->GetAttr("infer_out")); if (infer_out) { std::string reader_name = Input(ctx, "Reader")[0]; auto& out_names = Output(ctx, "Out"); diff --git a/paddle/fluid/operators/reader/reader_op_registry.cc b/paddle/fluid/operators/reader/reader_op_registry.cc index e51d73f6a8..eb6fa3c5e7 100644 --- a/paddle/fluid/operators/reader/reader_op_registry.cc +++ b/paddle/fluid/operators/reader/reader_op_registry.cc @@ -93,7 +93,7 @@ void FileReaderInferShape::operator()(framework::InferShapeContext* ctx) const { "number of 'shapes'(%d).", need_check_feed.size(), shapes.size()); framework::VarDesc* reader = - boost::get(ctx->GetOutputVarPtrs("Out")[0]); + BOOST_GET(framework::VarDesc*, ctx->GetOutputVarPtrs("Out")[0]); reader->SetLoDLevels(lod_levels); } } @@ -115,10 +115,10 @@ void DecoratedReaderInferShape::operator()( "The output decorated reader should not be null."); ctx->SetReaderDims("Out", ctx->GetReaderDims("UnderlyingReader")); - framework::VarDesc* in_reader = boost::get( - ctx->GetInputVarPtrs("UnderlyingReader")[0]); + framework::VarDesc* in_reader = BOOST_GET( + framework::VarDesc*, ctx->GetInputVarPtrs("UnderlyingReader")[0]); framework::VarDesc* out_reader = - boost::get(ctx->GetOutputVarPtrs("Out")[0]); + BOOST_GET(framework::VarDesc*, ctx->GetOutputVarPtrs("Out")[0]); out_reader->SetLoDLevels(in_reader->GetLoDLevels()); } diff --git a/paddle/fluid/operators/reduce_ops/reduce_sum_op.cc b/paddle/fluid/operators/reduce_ops/reduce_sum_op.cc index 6e860010bc..198beaface 100644 --- a/paddle/fluid/operators/reduce_ops/reduce_sum_op.cc +++ b/paddle/fluid/operators/reduce_ops/reduce_sum_op.cc @@ -56,7 +56,7 @@ class ReduceSumVarTypeInference : public paddle::framework::VarTypeInference { public: void operator()(paddle::framework::InferVarTypeContext* ctx) const override { auto data_type = static_cast( - boost::get(ctx->GetAttr("out_dtype"))); + BOOST_GET_CONST(int, ctx->GetAttr("out_dtype"))); if (data_type >= 0) { ctx->SetOutputDataType("Out", data_type); } diff --git a/paddle/fluid/operators/roi_align_op.cu b/paddle/fluid/operators/roi_align_op.cu index 6e477892d9..2665f238d5 100644 --- a/paddle/fluid/operators/roi_align_op.cu +++ b/paddle/fluid/operators/roi_align_op.cu @@ -260,7 +260,7 @@ class GPUROIAlignOpKernel : public framework::OpKernel { auto cplace = platform::CPUPlace(); int* roi_batch_id_data = roi_batch_id_list.mutable_data(cplace); auto& dev_ctx = ctx.cuda_device_context(); - auto gplace = boost::get(ctx.GetPlace()); + auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); if (ctx.HasInput("RoisLod")) { auto* rois_lod = ctx.Input("RoisLod"); int rois_batch_size = rois_lod->numel(); @@ -344,7 +344,7 @@ class GPUROIAlignGradOpKernel : public framework::OpKernel { int* roi_batch_id_data = roi_batch_id_list.mutable_data(cplace); auto& dev_ctx = ctx.cuda_device_context(); - auto gplace = boost::get(ctx.GetPlace()); + auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); if (ctx.HasInput("RoisLod")) { auto* rois_lod = ctx.Input("RoisLod"); int rois_batch_size = rois_lod->numel(); diff --git a/paddle/fluid/operators/roi_pool_op.cu b/paddle/fluid/operators/roi_pool_op.cu index cf53c642a1..1e8a8e3037 100644 --- a/paddle/fluid/operators/roi_pool_op.cu +++ b/paddle/fluid/operators/roi_pool_op.cu @@ -156,7 +156,7 @@ class GPUROIPoolOpKernel : public framework::OpKernel { auto cplace = platform::CPUPlace(); int* roi_batch_id_data = roi_batch_id_list.mutable_data(cplace); auto& dev_ctx = ctx.cuda_device_context(); - auto gplace = boost::get(ctx.GetPlace()); + auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); if (ctx.HasInput("RoisLod")) { auto* rois_lod = ctx.Input("RoisLod"); int rois_batch_size = rois_lod->numel(); @@ -228,7 +228,7 @@ class GPUROIPoolGradOpKernel : public framework::OpKernel { int* roi_batch_id_data = roi_batch_id_list.mutable_data(cplace); auto& dev_ctx = ctx.cuda_device_context(); - auto gplace = boost::get(ctx.GetPlace()); + auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); if (ctx.HasInput("RoisLod")) { auto* rois_lod = ctx.Input("RoisLod"); int rois_batch_size = rois_lod->numel(); diff --git a/paddle/fluid/operators/scatter.cu.h b/paddle/fluid/operators/scatter.cu.h index 0e83219ded..a885290624 100644 --- a/paddle/fluid/operators/scatter.cu.h +++ b/paddle/fluid/operators/scatter.cu.h @@ -163,7 +163,7 @@ void GPUScatterNdAdd(const framework::ExecutionContext& context, // put output_dims int CUDA // gplace and cplace const auto& ctx = context.template device_context(); - const auto gplace = boost::get(ctx.GetPlace()); + const auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); auto cplace = platform::CPUPlace(); std::vector v_output_dims(output_dims_size); diff --git a/paddle/fluid/operators/seed_op.cu b/paddle/fluid/operators/seed_op.cu index aa2c329c4d..8070f01e9b 100644 --- a/paddle/fluid/operators/seed_op.cu +++ b/paddle/fluid/operators/seed_op.cu @@ -32,7 +32,8 @@ class GPUSeedKernel : public framework::OpKernel { } else { seed = rnd(); } - auto target_gpu_place = boost::get(context.GetPlace()); + auto target_gpu_place = + BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()); auto stream = context.cuda_device_context().stream(); memory::Copy(target_gpu_place, out_data, platform::CPUPlace(), &seed, sizeof(int), stream); diff --git a/paddle/fluid/operators/sequence_ops/sequence_conv_op.cc b/paddle/fluid/operators/sequence_ops/sequence_conv_op.cc index ea65992b8e..d3b36c798f 100644 --- a/paddle/fluid/operators/sequence_ops/sequence_conv_op.cc +++ b/paddle/fluid/operators/sequence_ops/sequence_conv_op.cc @@ -185,7 +185,7 @@ class SequenceConvGradOpMaker : public framework::SingleGradOpMaker { op->SetAttrMap(this->Attrs()); if (op->HasAttr("paddingTrainable") && - boost::get(op->GetAttr("paddingTrainable")) && + BOOST_GET_CONST(bool, op->GetAttr("paddingTrainable")) && this->HasInput("PaddingData")) { op->SetInput("PaddingData", this->Input("PaddingData")); op->SetOutput(framework::GradVarName("PaddingData"), @@ -209,7 +209,7 @@ class SequenceConvGradNoNeedBufferVarsInference const std::unordered_set &operator()( const framework::InferNoNeedBufferVarsContext &ctx) const final { static const std::unordered_set kPaddingData({"PaddingData"}); - if (!boost::get(ctx.GetAttr("paddingTrainable"))) { + if (!BOOST_GET_CONST(bool, ctx.GetAttr("paddingTrainable"))) { return kPaddingData; } else { return Empty(); diff --git a/paddle/fluid/operators/sequence_ops/sequence_expand_as_op.cc b/paddle/fluid/operators/sequence_ops/sequence_expand_as_op.cc index c93591d5cc..8e2a95a814 100644 --- a/paddle/fluid/operators/sequence_ops/sequence_expand_as_op.cc +++ b/paddle/fluid/operators/sequence_ops/sequence_expand_as_op.cc @@ -42,9 +42,9 @@ class SequenceExpandAsOp : public framework::OperatorWithKernel { if (ctx->IsRuntime()) { framework::Variable* x_var = - boost::get(ctx->GetInputVarPtrs("X")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("X")[0]); framework::Variable* y_var = - boost::get(ctx->GetInputVarPtrs("Y")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("Y")[0]); auto& x_dim = x_var->Get().dims(); auto& y_lod = y_var->Get().lod(); diff --git a/paddle/fluid/operators/sequence_ops/sequence_expand_op.cc b/paddle/fluid/operators/sequence_ops/sequence_expand_op.cc index 1000e08962..7f4cca2196 100644 --- a/paddle/fluid/operators/sequence_ops/sequence_expand_op.cc +++ b/paddle/fluid/operators/sequence_ops/sequence_expand_op.cc @@ -42,9 +42,9 @@ class SequenceExpandOp : public framework::OperatorWithKernel { if (ctx->IsRuntime()) { framework::Variable* x_var = - boost::get(ctx->GetInputVarPtrs("X")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("X")[0]); framework::Variable* y_var = - boost::get(ctx->GetInputVarPtrs("Y")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("Y")[0]); auto& x_lod = x_var->Get().lod(); auto& y_lod = y_var->Get().lod(); diff --git a/paddle/fluid/operators/sequence_ops/sequence_expand_op.cu b/paddle/fluid/operators/sequence_ops/sequence_expand_op.cu index 888d1a12e6..d4f4051c3a 100644 --- a/paddle/fluid/operators/sequence_ops/sequence_expand_op.cu +++ b/paddle/fluid/operators/sequence_ops/sequence_expand_op.cu @@ -98,7 +98,8 @@ static int ExpandByMemoryCopy(const platform::CUDADeviceContext& context, auto out_data = out->data(); auto x_data = x.data(); - auto& gpu_place = boost::get(context.GetPlace()); + const auto& gpu_place = + BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()); int x_item_length = x.numel() / x.dims()[0]; int out_offset = 0; diff --git a/paddle/fluid/operators/sequence_ops/sequence_pad_op.cc b/paddle/fluid/operators/sequence_ops/sequence_pad_op.cc index ebc7748d3b..09ea968dfb 100644 --- a/paddle/fluid/operators/sequence_ops/sequence_pad_op.cc +++ b/paddle/fluid/operators/sequence_ops/sequence_pad_op.cc @@ -62,7 +62,7 @@ class SequencePadOp : public framework::OperatorWithKernel { if (ctx->IsRuntime()) { // run time framework::Variable* x_var = - boost::get(ctx->GetInputVarPtrs("X")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("X")[0]); const auto& x_lod = x_var->Get().lod(); PADDLE_ENFORCE_EQ(x_lod.empty(), false, platform::errors::NotFound( diff --git a/paddle/fluid/operators/sequence_ops/sequence_pool_op.cc b/paddle/fluid/operators/sequence_ops/sequence_pool_op.cc index 1038d15f32..884f65c42b 100644 --- a/paddle/fluid/operators/sequence_ops/sequence_pool_op.cc +++ b/paddle/fluid/operators/sequence_ops/sequence_pool_op.cc @@ -147,7 +147,7 @@ class SequencePoolGradOpMaker : public framework::SingleGradOpMaker { void Apply(GradOpPtr op_desc_ptr) const override { op_desc_ptr->SetType("sequence_pool_grad"); op_desc_ptr->SetInput("X", this->Input("X")); - if (boost::get(this->GetAttr("pooltype")) == "MAX") { + if (BOOST_GET_CONST(std::string, this->GetAttr("pooltype")) == "MAX") { op_desc_ptr->SetInput("MaxIndex", this->Output("MaxIndex")); } op_desc_ptr->SetInput(framework::GradVarName("Out"), diff --git a/paddle/fluid/operators/sequence_ops/sequence_scatter_op.cc b/paddle/fluid/operators/sequence_ops/sequence_scatter_op.cc index 361afa286c..cda5cd5719 100644 --- a/paddle/fluid/operators/sequence_ops/sequence_scatter_op.cc +++ b/paddle/fluid/operators/sequence_ops/sequence_scatter_op.cc @@ -95,9 +95,9 @@ class SequenceScatterOp : public framework::OperatorWithKernel { // Enforce LoD of ids and updates be the same if (ctx->IsRuntime()) { framework::Variable* ids_var = - boost::get(ctx->GetInputVarPtrs("Ids")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("Ids")[0]); framework::Variable* updates_var = - boost::get(ctx->GetInputVarPtrs("Updates")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("Updates")[0]); auto& ids_lod = ids_var->Get().lod(); auto& updates_lod = updates_var->Get().lod(); diff --git a/paddle/fluid/operators/stack_op.cu b/paddle/fluid/operators/stack_op.cu index e7bc91f5c8..b3784d3c03 100644 --- a/paddle/fluid/operators/stack_op.cu +++ b/paddle/fluid/operators/stack_op.cu @@ -64,7 +64,7 @@ class StackGPUKernel : public framework::OpKernel { auto& dev_ctx = ctx.template device_context(); auto tmp_x_data = memory::Alloc(dev_ctx, x_datas.size() * sizeof(T*)); - memory::Copy(boost::get(dev_ctx.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()), tmp_x_data->ptr(), platform::CPUPlace(), reinterpret_cast(x_datas.data()), x_datas.size() * sizeof(T*), dev_ctx.stream()); @@ -162,7 +162,7 @@ class StackGradGPUKernel : public framework::OpKernel { auto& dev_ctx = ctx.template device_context(); auto tmp_out_data = memory::Alloc(dev_ctx, outputs.size() * sizeof(T*)); - memory::Copy(boost::get(dev_ctx.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()), tmp_out_data->ptr(), platform::CPUPlace(), reinterpret_cast(outputs.data()), outputs.size() * sizeof(T*), dev_ctx.stream()); diff --git a/paddle/fluid/operators/strided_memcpy.h b/paddle/fluid/operators/strided_memcpy.h index 6a99ad9a90..7528422fdc 100644 --- a/paddle/fluid/operators/strided_memcpy.h +++ b/paddle/fluid/operators/strided_memcpy.h @@ -82,12 +82,12 @@ inline void StridedNumelCopyWithAxis(const platform::DeviceContext& ctx, for (int64_t i = 0; i < before; ++i) { if (platform::is_cpu_place(place)) { - auto& cpu_place = boost::get(place); + auto& cpu_place = BOOST_GET_CONST(platform::CPUPlace, place); memory::Copy(cpu_place, dst + i * dst_after, cpu_place, src + i * src_after, sizeof(T) * size); } else { #ifdef PADDLE_WITH_CUDA - auto& gpu_place = boost::get(place); + auto& gpu_place = BOOST_GET_CONST(platform::CUDAPlace, place); auto& cuda_ctx = reinterpret_cast(ctx); memory::Copy(gpu_place, dst + i * dst_after, gpu_place, diff --git a/paddle/fluid/operators/sum_op.cu b/paddle/fluid/operators/sum_op.cu index 94ef22506a..d0bf3a0abf 100644 --- a/paddle/fluid/operators/sum_op.cu +++ b/paddle/fluid/operators/sum_op.cu @@ -186,7 +186,7 @@ void SumToLoDTensor(const framework::ExecutionContext &context) { auto tmp_sr_in_out_array = memory::Alloc(dev_ctx, sr_in_out_data.size() * sizeof(T *)); - memory::Copy(boost::get(dev_ctx.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()), tmp_sr_in_out_array->ptr(), platform::CPUPlace(), reinterpret_cast(sr_in_out_data.data()), sr_in_out_data.size() * sizeof(T *), dev_ctx.stream()); @@ -204,7 +204,7 @@ void SumToLoDTensor(const framework::ExecutionContext &context) { if (!in_data.empty()) { auto tmp_in_array = memory::Alloc(dev_ctx, in_data.size() * sizeof(T *)); - memory::Copy(boost::get(dev_ctx.GetPlace()), + memory::Copy(BOOST_GET_CONST(platform::CUDAPlace, dev_ctx.GetPlace()), tmp_in_array->ptr(), platform::CPUPlace(), reinterpret_cast(in_data.data()), in_data.size() * sizeof(T *), dev_ctx.stream()); diff --git a/paddle/fluid/operators/sync_batch_norm_op.cc b/paddle/fluid/operators/sync_batch_norm_op.cc index d973513ffe..d198992abd 100644 --- a/paddle/fluid/operators/sync_batch_norm_op.cc +++ b/paddle/fluid/operators/sync_batch_norm_op.cc @@ -33,7 +33,7 @@ class SyncBatchNormGradMaker : public framework::SingleGradOpMaker { op->SetInput("SavedVariance", this->Output("SavedVariance")); // used when setting use_global_stats True during training - if (boost::get(this->GetAttr("use_global_stats"))) { + if (BOOST_GET_CONST(bool, this->GetAttr("use_global_stats"))) { op->SetInput("Mean", this->Output("MeanOut")); op->SetInput("Variance", this->Output("VarianceOut")); } diff --git a/paddle/fluid/operators/sync_batch_norm_op.cu.h b/paddle/fluid/operators/sync_batch_norm_op.cu.h index cfb9e16942..f3d579f3f8 100644 --- a/paddle/fluid/operators/sync_batch_norm_op.cu.h +++ b/paddle/fluid/operators/sync_batch_norm_op.cu.h @@ -183,7 +183,7 @@ void SyncBatchNormFunctor(const framework::ExecutionContext &ctx, Tensor c_g_st; auto *c_g_st_d = c_g_st.mutable_data>( {2 * C + 1}, platform::CPUPlace()); - auto gplace = boost::get(ctx.GetPlace()); + auto gplace = BOOST_GET_CONST(platform::CUDAPlace, ctx.GetPlace()); memory::Copy(platform::CPUPlace(), c_g_st_d, gplace, stats, bytes, 0); #ifndef WIN32 diff --git a/paddle/fluid/operators/tensorrt/tensorrt_engine_op.h b/paddle/fluid/operators/tensorrt/tensorrt_engine_op.h index 0e606c466b..cc6ee7b19e 100644 --- a/paddle/fluid/operators/tensorrt/tensorrt_engine_op.h +++ b/paddle/fluid/operators/tensorrt/tensorrt_engine_op.h @@ -178,7 +178,7 @@ class TensorRTEngineOp : public framework::OperatorBase { calib_res->engine_.reset(new TensorRTEngine( max_batch_size_, workspace_size_, precision_mode_, calib_res->calib_.get(), - boost::get(dev_place).device)); + BOOST_GET_CONST(platform::CUDAPlace, dev_place).device)); VLOG(3) << "start the calib trt engine thread"; PrepareTRTEngine(scope, calib_res->engine_.get()); })); @@ -302,7 +302,7 @@ class TensorRTEngineOp : public framework::OperatorBase { PADDLE_ENFORCE(bind_index < num_bindings, "The bind index should be less than num_bindings"); buffers[bind_index] = static_cast(fluid_t->mutable_data( - boost::get(dev_place))); + BOOST_GET_CONST(platform::CUDAPlace, dev_place))); output_index += 1; } diff --git a/paddle/fluid/operators/uniform_random_op.cc b/paddle/fluid/operators/uniform_random_op.cc index ac8e66ba3b..e0c5630763 100644 --- a/paddle/fluid/operators/uniform_random_op.cc +++ b/paddle/fluid/operators/uniform_random_op.cc @@ -233,7 +233,7 @@ class UniformRandomOpVarTypeInference : public framework::VarTypeInference { public: void operator()(framework::InferVarTypeContext *ctx) const override { auto var_data_type = static_cast( - boost::get(ctx->GetAttr("dtype"))); + BOOST_GET_CONST(int, ctx->GetAttr("dtype"))); if (ctx->GetOutputType("Out") != framework::proto::VarType::SELECTED_ROWS) { ctx->SetOutputType("Out", framework::proto::VarType::LOD_TENSOR); diff --git a/paddle/fluid/operators/var_conv_2d_op.cc b/paddle/fluid/operators/var_conv_2d_op.cc index b8acf1065a..f8a29a52d7 100644 --- a/paddle/fluid/operators/var_conv_2d_op.cc +++ b/paddle/fluid/operators/var_conv_2d_op.cc @@ -96,7 +96,7 @@ void VarConv2dOP::InferShape(framework::InferShapeContext* ctx) const { if (ctx->IsRuntime()) { framework::Variable* x_var = - boost::get(ctx->GetInputVarPtrs("X")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("X")[0]); const auto& x_lod = x_var->Get().lod(); PADDLE_ENFORCE_EQ( !x_lod.empty(), true, @@ -109,7 +109,7 @@ void VarConv2dOP::InferShape(framework::InferShapeContext* ctx) const { "The Input(X)'s lod info mismatches the actual tensor shape."); framework::Variable* row_var = - boost::get(ctx->GetInputVarPtrs("ROW")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("ROW")[0]); const auto& row_lod = row_var->Get().lod(); PADDLE_ENFORCE_EQ(!row_lod.empty(), true, platform::errors::InvalidArgument( @@ -117,7 +117,7 @@ void VarConv2dOP::InferShape(framework::InferShapeContext* ctx) const { "contain LoD information.")); framework::Variable* col_var = - boost::get(ctx->GetInputVarPtrs("COLUMN")[0]); + BOOST_GET(framework::Variable*, ctx->GetInputVarPtrs("COLUMN")[0]); const auto& col_lod = col_var->Get().lod(); PADDLE_ENFORCE_EQ(!col_lod.empty(), true, platform::errors::InvalidArgument( diff --git a/paddle/fluid/platform/CMakeLists.txt b/paddle/fluid/platform/CMakeLists.txt index d0d74f6ea8..b8fd6fe0f8 100644 --- a/paddle/fluid/platform/CMakeLists.txt +++ b/paddle/fluid/platform/CMakeLists.txt @@ -28,7 +28,7 @@ cc_library(flags SRCS flags.cc DEPS gflags) cc_library(errors SRCS errors.cc DEPS error_codes_proto) cc_test(errors_test SRCS errors_test.cc DEPS errors enforce) -cc_library(enforce INTERFACE SRCS enforce.cc DEPS flags errors cuda_error_proto) +cc_library(enforce INTERFACE SRCS enforce.cc DEPS flags errors cuda_error_proto boost) cc_test(enforce_test SRCS enforce_test.cc DEPS stringpiece enforce) set(CPU_INFO_DEPS gflags glog enforce) diff --git a/paddle/fluid/platform/collective_helper.cc b/paddle/fluid/platform/collective_helper.cc index 3732fce580..71482c1006 100644 --- a/paddle/fluid/platform/collective_helper.cc +++ b/paddle/fluid/platform/collective_helper.cc @@ -35,7 +35,7 @@ class NCCLCommImpl : public NCCLComm { int rank() const override { return rank_; } int device_id() const override { - return boost::get(dev_ctx_->GetPlace()).device; + return BOOST_GET_CONST(CUDAPlace, dev_ctx_->GetPlace()).device; } void set_comm(ncclComm_t comm) { comm_ = comm; } diff --git a/paddle/fluid/platform/collective_helper.h b/paddle/fluid/platform/collective_helper.h index 154d3133c1..61cad961f5 100644 --- a/paddle/fluid/platform/collective_helper.h +++ b/paddle/fluid/platform/collective_helper.h @@ -101,7 +101,7 @@ class NCCLCommContext { // retrieve a communicator by the ring id and place NCCLComm* Get(int ring_id, Place place) const { - return Get(ring_id, boost::get(place).device); + return Get(ring_id, BOOST_GET_CONST(CUDAPlace, place).device); } private: diff --git a/paddle/fluid/platform/device_context.cc b/paddle/fluid/platform/device_context.cc index 634251a856..219a238468 100644 --- a/paddle/fluid/platform/device_context.cc +++ b/paddle/fluid/platform/device_context.cc @@ -78,7 +78,7 @@ inline void EmplaceDeviceContext( map_ptr->emplace(p, std::async(std::launch::deferred, [=] { // lazy evaluation. i.e., only create device context at // first `Get` - return PtrType(new DevCtx(boost::get(p))); + return PtrType(new DevCtx(BOOST_GET_CONST(PlaceType, p))); })); } diff --git a/paddle/fluid/platform/device_tracer.cc b/paddle/fluid/platform/device_tracer.cc index 76b9e32bb5..4679b7e1da 100644 --- a/paddle/fluid/platform/device_tracer.cc +++ b/paddle/fluid/platform/device_tracer.cc @@ -566,7 +566,7 @@ class DeviceTracerImpl : public DeviceTracer { } else if (platform::is_gpu_place(r.place)) { event->set_place(proto::MemEvent::CUDAPlace); event->set_device_id( - boost::get(r.place).GetDeviceId()); + BOOST_GET_CONST(platform::CUDAPlace, r.place).GetDeviceId()); } else if (platform::is_cuda_pinned_place(r.place)) { event->set_place(proto::MemEvent::CUDAPinnedPlace); } else { diff --git a/paddle/fluid/platform/enforce.h b/paddle/fluid/platform/enforce.h index a70f30b4e2..e00c31deb2 100644 --- a/paddle/fluid/platform/enforce.h +++ b/paddle/fluid/platform/enforce.h @@ -49,6 +49,7 @@ limitations under the License. */ #include "paddle/fluid/platform/errors.h" #include "paddle/fluid/platform/macros.h" #include "paddle/fluid/platform/port.h" +#include "paddle/fluid/platform/variant.h" #include "paddle/fluid/string/printf.h" #include "paddle/fluid/string/to_string.h" @@ -438,6 +439,70 @@ struct EnforceNotMet : public std::exception { __ROLE, __NAME, __OP_TYPE)); \ } while (0) +/* + * Summary: This BOOST_GET(_**) series macros are used to call boost::get + * safely. boost::get is not a completely safe api, although it will not + * go wrong in most cases, but in extreme cases, it may fail and directly + * throw a boost::bad_get exception, without any stack information. + * This kind of problems is difficult to debug, so add these macros to + * enrich boost::get error information. At the same time, we restrict + * the direct use of boost::get by CI rule. + * + * Parameters: + *     __TYPE: the target variable type + * __VALUE: the target variable to get + * + * Examples: + * - unsafe writing: int x = boost::get(y); + * - safe writing: int x = BOOST_GET(int, y); + * + * Note: GCC 4.8 cannot select right overloaded function here, so need + * to define different functions and macros here, after we upgreade + * CI gcc version, we can only define one BOOST_GET macro. +*/ +namespace details { + +#define DEFINE_SAFE_BOOST_GET(__InputType, __OutputType, __OutputTypePtr, \ + __FuncName) \ + template \ + auto __FuncName(__InputType input, const char* expression, const char* file, \ + int line) \ + ->typename std::conditional::value, \ + __OutputTypePtr, __OutputType>::type { \ + try { \ + return boost::get(input); \ + } catch (boost::bad_get&) { \ + HANDLE_THE_ERROR \ + throw ::paddle::platform::EnforceNotMet( \ + ::paddle::platform::errors::InvalidArgument( \ + "boost::get failed, cannot get value " \ + "(%s) by type %s, its type is %s.", \ + expression, \ + paddle::platform::demangle(typeid(OutputType).name()), \ + paddle::platform::demangle(input.type().name())), \ + file, line); \ + END_HANDLE_THE_ERROR \ + } \ + } + +DEFINE_SAFE_BOOST_GET(InputType&, OutputType&, OutputType*, SafeBoostGet); +DEFINE_SAFE_BOOST_GET(const InputType&, const OutputType&, const OutputType*, + SafeBoostGetConst); +DEFINE_SAFE_BOOST_GET(InputType&&, OutputType, OutputType*, + SafeBoostGetMutable); + +} // namespace details + +#define BOOST_GET(__TYPE, __VALUE) \ + ::paddle::platform::details::SafeBoostGet<__TYPE>(__VALUE, #__VALUE, \ + __FILE__, __LINE__) +#define BOOST_GET_CONST(__TYPE, __VALUE) \ + ::paddle::platform::details::SafeBoostGetConst<__TYPE>(__VALUE, #__VALUE, \ + __FILE__, __LINE__) +#define BOOST_GET_MUTABLE(__TYPE, __VALUE) \ + ::paddle::platform::details::SafeBoostGetMutable<__TYPE>(__VALUE, #__VALUE, \ + __FILE__, __LINE__) + /** OTHER EXCEPTION AND ENFORCE **/ struct EOFException : public std::exception { diff --git a/paddle/fluid/platform/enforce_test.cc b/paddle/fluid/platform/enforce_test.cc index db77ba9585..7a55c51c84 100644 --- a/paddle/fluid/platform/enforce_test.cc +++ b/paddle/fluid/platform/enforce_test.cc @@ -16,6 +16,7 @@ limitations under the License. */ #include #include "gtest/gtest.h" +#include "paddle/fluid/framework/type_defs.h" #include "paddle/fluid/platform/enforce.h" TEST(ENFORCE, OK) { @@ -395,3 +396,22 @@ TEST(OP_INOUT_CHECK_MACRO, FAIL) { } EXPECT_TRUE(caught_exception); } + +TEST(BOOST_GET_SAFELY, SUCCESS) { + paddle::framework::Attribute attr; + attr = true; + bool rlt = BOOST_GET(bool, attr); + EXPECT_EQ(rlt, true); +} + +TEST(BOOST_GET_SAFELY, FAIL) { + paddle::framework::Attribute attr; + attr = true; + bool caught_exception = false; + try { + BOOST_GET(int, attr); + } catch (paddle::platform::EnforceNotMet& error) { + caught_exception = true; + } + EXPECT_TRUE(caught_exception); +} diff --git a/paddle/fluid/platform/nccl_helper.h b/paddle/fluid/platform/nccl_helper.h index cfb1616e84..8b3e73200a 100644 --- a/paddle/fluid/platform/nccl_helper.h +++ b/paddle/fluid/platform/nccl_helper.h @@ -84,7 +84,7 @@ struct NCCLContext { ncclComm_t comm() const { return comm_; } int device_id() const { - return boost::get(ctx_->GetPlace()).device; + return BOOST_GET_CONST(platform::CUDAPlace, ctx_->GetPlace()).device; } }; @@ -98,7 +98,7 @@ struct NCCLContextMap { PADDLE_ENFORCE_EQ(!places.empty(), true); order_.reserve(places.size()); for (auto &p : places) { - int dev_id = boost::get(p).device; + int dev_id = BOOST_GET_CONST(CUDAPlace, p).device; order_.emplace_back(dev_id); contexts_.emplace(dev_id, NCCLContext(dev_id)); } @@ -145,11 +145,11 @@ struct NCCLContextMap { CUDADeviceContext *DevCtx(int dev_id) const { return at(dev_id).ctx_.get(); } CUDADeviceContext *DevCtx(platform::Place p) const { - return DevCtx(boost::get(p).device); + return DevCtx(BOOST_GET_CONST(CUDAPlace, p).device); } const NCCLContext &at(platform::Place p) const { - return this->at(boost::get(p).device); + return this->at(BOOST_GET_CONST(CUDAPlace, p).device); } const NCCLContext &at(int dev_id) const { return contexts_.at(dev_id); } @@ -249,7 +249,7 @@ class NCCLCommunicator { for (int ring_id = 0; ring_id < nrings; ++ring_id) { for (size_t p = 0; p < places.size(); ++p) { int rank = trainer_id * places.size() + p; - int dev_id = boost::get(places[p]).device; + int dev_id = BOOST_GET_CONST(CUDAPlace, places[p]).device; auto &ctx = flat_ctxs_[ring_id]->contexts_.at(dev_id); NCCLCommContext::Instance().AssignNCCLComm(ctx.comm_, nranks, rank, dev_id, ring_id); diff --git a/paddle/fluid/platform/place.cc b/paddle/fluid/platform/place.cc index 50a401bb16..195acc1b6d 100644 --- a/paddle/fluid/platform/place.cc +++ b/paddle/fluid/platform/place.cc @@ -61,7 +61,7 @@ bool is_same_place(const Place &p1, const Place &p2) { if (is_cpu_place(p1) || is_cuda_pinned_place(p1)) { return true; } else { - return boost::get(p1) == boost::get(p2); + return BOOST_GET_CONST(CUDAPlace, p1) == BOOST_GET_CONST(CUDAPlace, p2); } } else { return false; diff --git a/paddle/fluid/platform/stream/cuda_stream.cc b/paddle/fluid/platform/stream/cuda_stream.cc index 6d3b065037..4543f367ba 100644 --- a/paddle/fluid/platform/stream/cuda_stream.cc +++ b/paddle/fluid/platform/stream/cuda_stream.cc @@ -27,7 +27,7 @@ bool CUDAStream::Init(const Place& place, const Priority& priority) { platform::errors::InvalidArgument( "Cuda stream must be created using cuda place.")); place_ = place; - CUDADeviceGuard guard(boost::get(place_).device); + CUDADeviceGuard guard(BOOST_GET_CONST(CUDAPlace, place_).device); if (priority == Priority::kHigh) { PADDLE_ENFORCE_CUDA_SUCCESS( cudaStreamCreateWithPriority(&stream_, kDefaultFlag, -1)); @@ -42,7 +42,7 @@ bool CUDAStream::Init(const Place& place, const Priority& priority) { } void CUDAStream::Destroy() { - CUDADeviceGuard guard(boost::get(place_).device); + CUDADeviceGuard guard(BOOST_GET_CONST(CUDAPlace, place_).device); Wait(); WaitCallback(); if (stream_) { diff --git a/paddle/fluid/pybind/imperative.cc b/paddle/fluid/pybind/imperative.cc index 89b404672c..e06eafa0cb 100644 --- a/paddle/fluid/pybind/imperative.cc +++ b/paddle/fluid/pybind/imperative.cc @@ -82,13 +82,14 @@ static void InitTensorForVarBase(imperative::VarBase *self, auto *tensor = self->MutableVar()->GetMutable(); if (platform::is_cpu_place(place)) { SetTensorFromPyArray( - tensor, array, boost::get(place), zero_copy); + tensor, array, BOOST_GET_CONST(platform::CPUPlace, place), zero_copy); } else if (platform::is_gpu_place(place)) { SetTensorFromPyArray( - tensor, array, boost::get(place), zero_copy); + tensor, array, BOOST_GET_CONST(platform::CUDAPlace, place), zero_copy); } else if (platform::is_cuda_pinned_place(place)) { SetTensorFromPyArray( - tensor, array, boost::get(place), zero_copy); + tensor, array, BOOST_GET_CONST(platform::CUDAPinnedPlace, place), + zero_copy); } else { PADDLE_THROW(platform::errors::InvalidArgument( "Place should be one of CPUPlace/CUDAPlace/CUDAPinnedPlace")); diff --git a/paddle/fluid/pybind/pybind.cc b/paddle/fluid/pybind/pybind.cc index 92658ff52c..fc9a1c468a 100644 --- a/paddle/fluid/pybind/pybind.cc +++ b/paddle/fluid/pybind/pybind.cc @@ -1362,7 +1362,7 @@ All parameter, weight, gradient are variables in Paddle. }) .def("gpu_device_id", [](platform::Place &self) { - return boost::get(self).device; + return BOOST_GET_CONST(platform::CUDAPlace, self).device; }) .def("set_place", [](platform::Place &self, const platform::Place &other) { self = other; }) @@ -1517,9 +1517,9 @@ All parameter, weight, gradient are variables in Paddle. size_t index) -> py::object { auto &var = framework::GetFetchVariable(scope, var_name, index); if (data_is_lod_tensor(var)) { - return py::cast(boost::get(var)); + return py::cast(BOOST_GET(LoDTensor, var)); } else { - return py::cast(boost::get(var)); + return py::cast(BOOST_GET(LoDTensorArray, var)); } }); m.def("get_variable_tensor", framework::GetVariableTensor); @@ -1609,10 +1609,10 @@ All parameter, weight, gradient are variables in Paddle. py::list res(self.size()); for (size_t i = 0; i < self.size(); ++i) { if (data_is_lod_tensor(self[i])) { - auto &data = boost::get(self[i]); + auto &data = BOOST_GET(LoDTensor, self[i]); res[i] = py::cast(std::move(data)); } else { - auto &data = boost::get(self[i]); + auto &data = BOOST_GET(LoDTensorArray, self[i]); py::list tmp(data.size()); for (size_t j = 0; j < data.size(); ++j) { tmp[j] = py::cast(std::move(data[j])); @@ -1628,7 +1628,7 @@ All parameter, weight, gradient are variables in Paddle. .def("append", [](FetchList &self, const LoDTensor &t) { self.emplace_back(); - auto &lod_tensor = boost::get(self.back()); + auto &lod_tensor = BOOST_GET(LoDTensor, self.back()); lod_tensor.ShareDataWith(t); lod_tensor.set_lod(t.lod()); }, @@ -1637,7 +1637,7 @@ All parameter, weight, gradient are variables in Paddle. .def("append", [](FetchList &self, const LoDTensorArray &t) { self.emplace_back(); - auto &lod_tensor_array = boost::get(self.back()); + auto &lod_tensor_array = BOOST_GET(LoDTensorArray, self.back()); for (size_t i = 0; i < t.size(); ++i) { lod_tensor_array[i].ShareDataWith(t[i]); lod_tensor_array[i].set_lod(t[i].lod()); @@ -1655,10 +1655,10 @@ All parameter, weight, gradient are variables in Paddle. py::list tmp(self[i].size()); for (size_t j = 0; j < self[i].size(); ++j) { if (data_is_lod_tensor(self[i][j])) { - auto &var = boost::get(self[i][j]); + auto &var = BOOST_GET(LoDTensor, self[i][j]); tmp[j] = py::cast(std::move(var)); } else { - auto &var = boost::get(self[i][j]); + auto &var = BOOST_GET(LoDTensorArray, self[i][j]); py::list tmp_array(var.size()); for (size_t k = 0; k < var.size(); ++k) { tmp_array[k] = std::move(var[k]); @@ -2399,10 +2399,10 @@ All parameter, weight, gradient are variables in Paddle. } if (return_merged) { return py::cast( - std::move(boost::get(ret))); + std::move(BOOST_GET(paddle::framework::FetchList, ret))); } else { return py::cast(std::move( - boost::get(ret))); + BOOST_GET(paddle::framework::FetchUnmergedList, ret))); } }) .def("device_count", &ParallelExecutor::DeviceCount); diff --git a/paddle/fluid/pybind/tensor_py.h b/paddle/fluid/pybind/tensor_py.h index 9e5dc63851..85f222bcc1 100644 --- a/paddle/fluid/pybind/tensor_py.h +++ b/paddle/fluid/pybind/tensor_py.h @@ -141,7 +141,7 @@ T TensorGetElement(const framework::Tensor &self, size_t offset) { #ifdef PADDLE_WITH_CUDA } else { const T *a = self.data(); - auto p = boost::get(self.place()); + auto p = BOOST_GET_CONST(platform::CUDAPlace, self.place()); paddle::memory::Copy(platform::CPUPlace(), &b, p, a + offset, sizeof(T), nullptr); #endif @@ -156,7 +156,7 @@ void TensorSetElement(framework::Tensor *self, size_t offset, T elem) { self->mutable_data(self->place())[offset] = elem; #ifdef PADDLE_WITH_CUDA } else { - auto p = boost::get(self->place()); + auto p = BOOST_GET_CONST(platform::CUDAPlace, self->place()); T *a = self->mutable_data(p); paddle::memory::Copy(p, a + offset, platform::CPUPlace(), &elem, sizeof(T), nullptr); @@ -339,14 +339,16 @@ inline framework::Tensor *_getTensor(const framework::Tensor &self, output->Resize(ddim); auto place = self.place(); if (platform::is_cpu_place(place)) { - output->mutable_data(boost::get(place), self.type()); + output->mutable_data(BOOST_GET_CONST(platform::CPUPlace, place), + self.type()); #ifdef PADDLE_WITH_CUDA } else { if (platform::is_cuda_pinned_place(place)) { - output->mutable_data(boost::get(place), + output->mutable_data(BOOST_GET_CONST(platform::CUDAPinnedPlace, place), self.type()); } else if ((platform::is_gpu_place(place))) { - output->mutable_data(boost::get(place), self.type()); + output->mutable_data(BOOST_GET_CONST(platform::CUDAPlace, place), + self.type()); } #endif } diff --git a/tools/check_api_approvals.sh b/tools/check_api_approvals.sh index 0595365f92..933be9902c 100644 --- a/tools/check_api_approvals.sh +++ b/tools/check_api_approvals.sh @@ -152,6 +152,12 @@ if [ ${HAS_CONST_CAST} ] && [ "${GIT_PR_ID}" != "" ]; then check_approval 1 3048612 46782768 12538138 6836917 32832641 fi +HAS_BOOST_GET=`git diff -U0 upstream/$BRANCH |grep "^+" |grep -o -m 1 "boost::get" || true` +if [ ${HAS_CONST_CAST} ] && [ "${GIT_PR_ID}" != "" ]; then + echo_line="boost::get is not recommended, because it may throw an bad_get exception without any stack information, so please use BOOST_GET(_**)(dtype, value) series macros here. If these macros cannot meet your needs, please use try-catch to handle boost::get and specify chenwhql (Recommend), luotao1 or lanxianghit review and approve.\n" + check_approval 1 6836917 47554610 22561442 +fi + HAS_DEFINE_FLAG=`git diff -U0 upstream/$BRANCH |grep -o -m 1 "DEFINE_int32" |grep -o -m 1 "DEFINE_bool" | grep -o -m 1 "DEFINE_string" || true` if [ ${HAS_DEFINE_FLAG} ] && [ "${GIT_PR_ID}" != "" ]; then echo_line="You must have one RD lanxianghit approval for the usage (either add or delete) of DEFINE_int32/DEFINE_bool/DEFINE_string flag.\n"