diff --git a/paddle/fluid/framework/attribute.h b/paddle/fluid/framework/attribute.h index 56a4030be3be1facf6c35ea108545bb0515212dc..21bb39b0439876437136bdb0593f25a16677a0e1 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 1882bd73adaae53393640032307914d2e08c0404..b279d9ce9a16a1a43620e625acbe04999d955156 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 9511db9068820711ccd93269e672d860769a96b2..9615347d5478873aa000b6320f35040cc9537243 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 b3c79b63cec43d53de89e097e3ef8d52447d0123..4c3b0a7c6a44ca0d304113e57ebb3be9e1a7de27 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 22dab44b22b123b2a237f85d2da4e892fea5447d..7735f9720c109407249ea19f0e5e609a02cfd22e 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 da9330780103aa334e1f3d53f1597a8a57e22ccd..0bd6a79b55392e8bfb8f33b0a29b4cf1df0d44dc 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 4c344af09fb4f2ab0fcff1e7c6072e74dfc6d7b5..21e781877a42754d215e48becb4bc7a1e6e2f262 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 f9f91680e34016b4aee71c5f5796c20297c6c767..a46b4d0e5a9d4f388ac2d14392175ed96cc22640 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 56dacccafaace8b094e35e4a6a85bbd78c82e10a..2d4d4122a3c0f60e5e207556d20886985f72a30a 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 ff8afa4442a822ef1e49c8ba49e675140bc9cb01..39303447d2fbf9eca5942f032feca155a2e4000f 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 dbc73048c551b991b9a7640016bc3f8506fcb5ac..e7d466c4af0711219c5a10a4c739ae3eb998e27d 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 80c0cda5059672ea8f5da0e3610e43b9fb3213d0..d8f8cc994c080953c92adc02943bc6828aa645a6 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 517dd5ee264d96a11d8b54913a1e388edc95c034..6e2f2327abd62b12d9368992674ce399d50dff35 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 01c4dc9733c2b0fd4236b471b0dfb69a45f26691..f06507257f1e9fc8b1783201adb533ec7b032c09 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 a530c652fe84d23262b911686200725aeaf671e5..3f9af1c3a1289cc3453d850a2ffa9f78900f3367 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 35afc7e5f42cd094495a512f7f1720b838691530..4dead063b477980ace5dabfead1447cb297bbdd2 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 93919f6a3088d243b55872ca920203b5f7674021..396c2d664f7b67e7b1f0ab79c8d28a83a735d223 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 344565da94006d59b1a404cea0ccff268901d937..55512f124b4344f9d8ccaaabfa1e8d6607e0f5d9 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 420fbd13167051b0e299d0df6ff05d05e8c0db8a..a24627c068fc06bcec1ac6e92a3f1d66f36782f4 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 f100dc6349f58260ed6c501da6148efe50437fee..08c3e6d7f592d1791739ac442ef186f374eab716 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 1c36baf046e71f2efa7c2a403432a0f01cc2a67d..368e4c1f90f15792bd030f5430eb742e3b41ec28 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 372087f0d5ff63947976a8985e01bcd68020e691..9474ca23a6431158bb945bbb1be96c80364c2d2d 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 059f5c43a837a4909b3b2b99c267a204c679e36d..2d270f444adbcee0be5c47217cb4cb419ff0b20b 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 4df09b828a7f94304b7ce03ec2fe5d695a6e11e0..85e2f2bad323f7d3bddaa29b98e9f2dc41cd95a9 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 e2c7606c30836f735844b8c6ef81c265ee295606..7d78818e6a1b2d5b726f68e462553ddfa589f11d 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 7f9eccf2fdd4ee7955b90fe20b91250e5b498f32..5c2c574fd681a642b950a9e6ddfa4166281f2234 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 9eb632e7bddba9cad10018ae5c424f00feaa2aaf..482d8cf3d2f19a02f760661e5779be6386271345 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 8f3a623a9883b6b4e638da7c39b0d1f9d78c0488..f70745be1bd6097007d07152d3cce1707350ca14 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 3dd54cbc3c983e26072c09d6af48688965098611..1504f00b27cd6a416761a4227f6c504bb38278bb 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 5e2523607d6973b53e7fd68394ae887c5e14b09d..c7bf53f3d61194a770f345121f454b46980c95b8 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 69a78e1c7535fc6c8323191d1eadfcf42d19e9cf..726e8cfff3af20f6ddd4c9b02f1aaa26760b4668 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 7ac14a698aac751f44a743b360c4264959f4c94c..d70c81736dcab584312f83990a32d994f004cdcf 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 5dcdc751c820ea573a5b3e2fbebfdc41c9b3c23b..c45d6b528277afd88b57740e56755d4c175c0913 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 91a086d090a7434ff071fe345d82f3ccb5d1b36e..65f7eeebd228ed032262055c1ba83bd43a3eb4a3 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 fa7263b7e71d537284a836eef84c1e7c17cdf409..7f4519ad9919d7ad2a13c501e07b7ec92bd1eee1 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 3fa543c6221ae6ada8afddcf4563c1174127c221..e8104d4a191a76aef951f3b63b70ea35cfd8bee7 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 05d23961a8b180381eef6372f7049bed2b530db7..a0cb7e93306d25276af415111faf441f2b43b614 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 3ea7ca47ab576b49c01ba5a2e5ffa1840beade56..942748085242455e26737cfe373e4c89bf761ebe 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 8bc9072948f0226f61c24a18b7e6ce6bc801ff85..119917428997b03ecb0278fac5de677f0017b2bc 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 f4155568cf8743eed3c2204b5cf0a4268ee15828..923f53bb88849895a1a9c5477639671b001f6be6 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 6ebe642a7d39c2714736781dde266f4bb0025703..88aac001a93ae836d62fe3bf3fc502960eebe70f 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 ee00a39596a4cc76606284127f51108c71056e95..6b648608ca1d2a24eeba79dc76a9e6d3b77fb3f2 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 3e4e1d8929c4ffa531532b7817675971bf30c488..af2b1308e084ee937f26bf90caf2df6fb44e044b 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 1750c3fdc4a2fa79d20915cebfbf2ecc171f082e..c23807d3993d2ab04db3daf4f8ae252bee111547 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 c6264d503a012faa4a95143278308eb8d0edba74..67a9957cb06004b298af025c465ab37134fc6bbe 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 479d3087ba7b2ab8bf1a1fccd1fc671aa1ae70dd..027d3e2861b506003c4ce1cbe8bd7ee02e0c9c2d 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 6283b65be9667d5069e47de87c42bf507bc459c5..130ba44ff64c77e9a968200f58719b123b6f4b76 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 d10494aabfbc49bf16b92d719b7e58e58b4fcd5f..9b827fdf6fef1788fafd5595a2705e9df1b2e720 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 f2dfbc84a5a5a7feac2514731445eb191bd6f784..a37565236cd440bd803184d038ad4deb3c0b6150 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 d08869685310a0b9ad718f990bad488522058692..37c14e1d8e3b90f223c8dff7396d96594b9286d7 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 59e73371699835407dd94348c0d42c7787ac2fa3..d7ab51fa73f1938d8fb9c4720ad128138492924d 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 8b767ad42dccc228b0e7f9dd344c3f5c153378b8..4012e04f7d2af5ec434dfacba0cdb81f3a955575 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 b075cde3212b0434e15ebda0ce45976e2e018c53..d67f2274ebf1f0b57cf0e9c9fedd2f61eb1d5c9d 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 a6a8e346c7fa2b9bbf73a4c53b3ca7987e84664a..e6455a32d17097cc0c66be65609bdd1487230bfd 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 1ea6a69d72559712402a83404711f05b33b8beb0..85d20a7b9a2902dbe26129649604405a860c61b5 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 d0ca4522389fcfdd665a3d0f7ee896907ed881b4..0c266fbc2019156713ac51a7f915b25f3b723560 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 655ee65134e7e1db8fb8a5fa8ed3913702f779e0..dddb2affbbad06e9f2f478985c604ded7a1953ce 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 5e81322ff2901d74c9272f92372f4d58a7149fcb..ea376b371f592e6aa21149e9c109595a0818581a 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 e55783637a6e08578ef7717ba9768f7eece7ca8f..92d2a6acbb9f7aa5f267347151fa4f23f04c3e40 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 61784f8c6656e4afd2ce3cbce1cc778079c845f4..2e5c18d3352bc655756522b32cbfd92f7ad4b4cb 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 90d214116d73554040e339fa01a24eed9255696a..eb640d2ce78ae9178a476fb14b0a03857d735f4c 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 a984a4942b374c3e2c5f148f8147c55d0f5deb24..90ffaada055a9d2b71ef4b89244d063e72a1a7cb 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 01ba743b06dd57157cceb3fc544d11ba1068dea1..185ebbcd3c88d7e8b7248e2af9cedc9974c86fd4 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 0838d43eb52fc00ccb53ad213f1355b663fbac8a..a92d52fd2e9ea191193bf39335030b82f9fd6613 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 c3c56210b62aad2d18aacf6b3c075e22b3909994..fdbcf74d64b2423c4cdaa29cd1b0cacbc7ad0869 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 ae33c993efe8fe29ba08d69d41e5826571c0fb85..22c82de57c5d8e5b06ccf45c1a1a4dbdd3ae573a 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 ebdb538696283e72f6e2b978dcc07ec7f1005f19..2183ff251e9a7811fae95a7823ff282e167491e1 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 874d6a2bb0ba31a866752626fdfcc0f3aee8dc18..5f9be4f2cb85b6b6839a2c4f7f15eb9464f58cad 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 cfb114c9ea3e839ff3c194288f85ea535e1c74f8..8cff6461863b21b71de1b67b3799172e54fd18c1 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 3c1fb819da42dd91cefd20946a472d62b2620da1..b3ad316c9683e71440713ea26933c966842d7356 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 738a636569134bb24800b886b223c3db6691b18f..ea36e83038c7353a0f75612fd13e0a64c8bfd76e 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 787c1f5f63b384605b2758f2466ab1e70efcca19..d37a16a3e7d9f68b349d1131e7a1612457f80afd 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 f5e20e041e9e44437907f384c7cadae007a9f510..919378c929185b12826c8b427d0e9a86a382bb2b 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 75d3597baba46bf4b156587f1a93acadfd990c9f..853abda7345c573cee333eb69130dbefd8224845 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 65003d9a35cefad404b9b912681a34c2c0b02998..c71327da64042aed85f1247f3c31de3e66a588ba 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 810900f161ccc08234e28b982bdd962e4cded9ae..cfdd4dc56e4c006f6c614bda143d5cc11e666732 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 757f419369030ef2027fa6639e0e3cc97e32c232..a7bb47d40d5f1a4bc9b3ee355cd239d7255c7e73 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 e9987c762b742bdc8e95dfbd727457b0dba4b0fd..115078e7eadfc03153fc95ef05a9d4bb6cd40369 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 fa0e66ee1e481351b8aab61423c61f326122f7ce..a4b57c404ce00bca7971cc1f1a3445e210394a0f 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 a28916b59c3d299a37d6e4507838d1094fb8127b..a231e16100b9f6b153beffe7c66de6fc6813414e 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 22f17d440e5d68dc47d2aa9a638c8b01b45a2343..b3bfafb0a116018fe2d624f390f355b348e3f847 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 56eb65178d3cd8b0bde26a2144e54fcc8fb010c9..bbe5596e19e4e0ef02687f6a12b5505d9b7a61d1 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 529d641d46db3247c8907edc7a579f4ff9db864a..3d5b40c93dad071052217677e387ba54011fb666 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 86f8de97083d5ffdd49dfcf2dd50c51288227e02..45e55e95a290a0760c9eadf8e08d4c4209b55dc3 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 444ac5b03151420522781139d02885c7cc409a98..6078198da9569fc2c711995c42be7c7d5eaac5dd 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 dc8559e324e047cdf4addaf8fdc04ec0949742d0..0dddbf158722181664f3c982cde8b77145eece3c 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 6138e64e2db376a45ede4f13b3fb9df7d6e03461..ead52ff35b90b1a2106e44803f4aa31ca7e4cd5a 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 8f9f1579509bfc767b367eb903ff425b17c8a8dd..1a428e205cb0773697855c382d917778c41be205 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 99b9f5746b8f2bb3205330decce813ca0ad44cbf..f67370b33828b77fec166017331c550698eaa658 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 1793920f0a9ca8518722c30781b4b2781584de46..28afb87a891fb301b1b5108c9762bf6c88cefb96 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 e14034b1520913db40b394aed51b384c4e93fe01..90773482332bfab87e1b13900308de3513fe437a 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 cd28c6d98a05aa6e48b4cb0b01849d33fcfd4c2c..0541d8917057c3a96ea3b2ffbb0bec283e00f683 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 3f739d0fe9bb5d6930bd291e30067b5f3d08563b..c4f0855dbb1ca87b40c396692a812a3cbe06a7b8 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 253f5a80db355f43922675f07bdfb1ec0f9b3062..8c0f1896ed06d81b1f0ce86a4de57159c3a2d7e2 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 fea1f1ffaaab1cc1c497e982532084727767ca06..511dd9d54fbcace63855d91d1a82318e7c2fde98 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 301b4140ac20fe5cd6d08e0d71136774ecaf91b1..529c845a12a7d95b558ded7ec4d80e3624ee1b79 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 809dc415c32e3abaf94c2cb1473206f4ed7d69cc..39820068ca848c0fc758290b031867447b113795 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 2b6cbb904afac5f3038629a1f658b34e09853e4f..8a0b50f4744c456647688c6d6b0533518cec0bf4 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 7d714da4393655e87ff0e050e258d753c00ca71c..c1f266bacfec5784d6f641574ce20f91496f2f35 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 0b26496a94e9f86a1f4d4602c284acd74dfac86d..29826909c3ce34e8ac1d780352e412a776feb1d6 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 91c0c56ec580c7900f84580fa760ab8e906deb74..a19d91f36e243dffd8c5dcd8beb5743f56d6dc19 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 bcd2166728b312dd551917bd7c70eb7764a8479c..a1b0f3b4310a020d4bbf8d7c04c9447d3e0e72f7 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 e7605cceb7b45b95d6bd81f4bf69a9fdb0d7e276..864e440920e3b49feee7c7e9a839a15f3a961f9c 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 5c0aa07192dd7d34fdf4b4fa1adef1b62d5e8374..0de93624f175815500997ea019343a69da41115f 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 21513105b27f39412d27090e9c95c68d1b985d38..19e1895635aa7670a0ca453656c3407d132e8db4 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 5e7fad6132197079b7e4a46cc2c807ad801cf6b3..326915dfff528db8a373e04dc4dde26e37766fee 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 9d416b8cc5cd342594032957431f951b813ae46d..9ac6b92af89e1198fba5b22940f153913f245f2f 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 5ba01f0744f5e064b0674058705482d9acec8bb7..2a76317eea1b78d13b2ff9d49cc86020ae3cfe96 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 90136c7d5db697b577ffa138ed7ff90b19ca9997..d202bf865e0c94aea818846c52fa365d2a338dc3 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 e69676a7877f2daf0342114f655d207a21b069f8..4b3e1c9e70a4a94808c94c81fcc773482f0574e4 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 fe393bf90f9aec78056e564dbd6c8a0047269790..3ad46d36de6c3c466beef29a08285e50a11730f7 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 c605e8f2f9ec84684f7b51b4c36266f70707ec2e..52ef648913f4a12d04b259dd1e9ed29a9cb6eefe 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 c6c5b1cadaa37fd81e5e50f004797e045bdd1e3d..c0f101062431f9e9e36f39047e469b70e6e02694 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 18163985e1c90f0665225d0eb7534ffa37acc552..c5bb24860ea220d1ddedbe4c8cd7405a1f9bc758 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 39ca328b9aa758284c2f82cf7d8f74c1d00096c8..76d5063dba5a830d13cb024179f06cc06946ca85 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 da417b8deea8eeb3a0b366f6e5cc2d287c9c03db..423cfa2f500951753249a04cce3018d1c0ec725e 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 acec418f0ee9827061085889d0ab43a9e225f0e5..0315f797b70a3078932dd524fae618cfd2688a25 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 efe9f0a8db950eb0ff2c6d5760b533ea816deeed..9a6ed68641120dad22fc07aa9bae61f18d9d1a22 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 f05e14afa8fede4969005797423824d226a25cce..cd86838ad1ea2220bad76450183308aa4f4bb50f 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 0c61623a40c10c3beed53b7d298e293d4d8f49fa..3faca4126bc4ec116621e0ed3c3255425f3e45b8 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 56a2ebb35554f24527731a62da65c019dfeb04d6..39d33cf20bdf8ae99fb2acb26814c68e82b23b2c 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 2163562a6080bac9aca822ef7c291623616ea23e..d8a4197313f735c7e350c4c9857158193c53ec8c 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 96f22530135f0c2905dc4ce645d19e096c9193a1..44da75c56fd1a30a62e86c302030115c51ae01f3 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 4587b494b31ca04a51304742ba57135b34669b18..fd5f7e06b1b3c6a183083f38a05601551bb11d48 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 104e24f6ee2e2503d98f3a3991a903d8dbc4bdfe..2796a6b2239b986afeb3b6b71ce1c4c6854bb514 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 684d2ef8628fdb453f1c97b5133ceed499bde170..c3bcc72c5332dcf7331969be11e609be3e0eaad8 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 e9b5db2378f68ad0119561a7f09c7a5e187c9f4f..b818cf0107bbc7936eec45f57f1ca0ab614bfaca 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 2bfc6e55301526f2ff4fec373e330d5e5cf63ea9..b460dc40ede31cc66e46e9ada1d4b8b5ed9dba8c 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 3f22680b86ad8c766c2ccc35fdc5943f44a7fc9e..5d6434f45f0b9e380ef7e18331368bb59c5a1460 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 26c70589f2677eaade9f886aed28f8b8f69541ad..3b1e15b1017abf8b90c0f9d7aaf106655ac70d31 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 a515a8b907eb36d4ec6cf3c120d95eb87917a38c..f2973add84e89f931aaec09515c17cf5725d8759 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 669f63be68e2111bc914a6dafaa964f70414577f..e4a1397f5c426a31b19c04aa8fb97c516a759c36 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 5f516a2016d970e742e0ef0cf6c8ef18ab2a0017..962d73d068985a3579cb698a5a545f2c0b0503dc 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 ecc6f19ad36b5208e2b816db99187c50d2052b13..e977c70bf4d74fb768cdf02edd3569177f2ecccf 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 94419d1f9a4ba654952e0aedb46ab94ea8d5c0a8..9ebdb369feb8cd1ac98ec63302eb3afd3260771e 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 93cd56353e007d68ef98aa5c02e8b67485799ff0..0693029eaea9c2fa4cbf4268b9c0ef00aa3f0849 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 c49f0d831e285b85b6742ab514d1a2699a71495a..b3e3332fe3425301a3dede3a3d810697ad4debf3 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 ba0b4ac010b75b916e2e9cfbc2d6d287a1790308..6fac90bf2da683157eabefcb6b9bfc32f9f51f1e 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 1f7380a6c6c310ba66a38657cbe0da68895a93aa..1a89af9697d8bd16b80285af8783a54264084da1 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 1144bff68da61b440a1b333bce5afe39c47ea4da..24d3d1db1755f4cfef575b72b37b4214989c9f32 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 b8476a7cf30d0ff15af83bcb5422e71f567bd583..3914faa7b117bff2691ab157ae6e4c5ff2351a6b 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 094062bb21e997bb58ddd528b6cd9fe4e46e4ecd..19187d01f55d016fde5c068df78f45fd880209f5 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 7ab30c114d0511ae49c2e02590f93d837bf02789..b52fb93e5bf7fb27faa0ccc4e2fb4b08112ba6b9 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 7825b4fc82b1f7580fea8ab4961facaf7fd64397..c9c42e0938d51991c53b74ac6ad59c350f4a3ced 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 2d87b48ba80f279abf9a4c4c40691c5a285db38a..ebb49aa71559093588d05cb6324ccaa75e64ecc8 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 49dde44d6b65eecb1859dd4697c4a6440ceaeadb..b9a5796bef71ca2250d473dbb5f40c95dfee0ce5 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 c7217b9f750b5a83f95b8df161de23a89241925d..8d79626aa8785ec036caeae6c862dee31556aa5a 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 807b2e8faa53cc5348875385bb91cf10d70263b0..429bb11ee1a3084b217a12c1868c310a28ff4d3f 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 c7ce5142c09f093f35ecf48ca409f1226ae268ed..89849ef92cd19ff5f83f2b57c65c78610d7c2c69 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 aa7f7035ba36a70f3cf132e0aa004cf580fe256d..c0ee37e7fdba63b6a5004f8e5e2131a23a37ddbb 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 c8182f3a9a76e2e6629916df8d8b3b2902e22f9c..6813c03933fd64575318488be02adcc1fddfa9e2 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 d05a5163b5819ad43a508c21f0c79b48c6765064..1e908d5ead9c6f3b8f402c6ac00689a2b603b2ae 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 5916082a8b172e8d04503982b8b9053f17b7d1b9..36873f16808e60730425c4ef4383d3159e5c8854 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 c325874114115c959d7bcbe851d81fd7ab7fb681..8d761bd49bee77e619f4da5f38f46fd4627e51fd 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 898aeabb193e464bc8b17f9fb81708c7137de55d..41aae1e1f35a6bda1d926dec711b4ce01ea65f4b 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 868f1a477caa09e25f30ca396b1c27928f999a0a..2de24cddd7d678c33615b70c935f28e9a307266e 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 faaed6545ca296071cdf469660af6a356da4f1a6..d34e5cddda65ec012f57458819e45b4b2fc290db 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 b3264ec0ad3fa984726244d911dab6f7bd8e95b8..b4496290dfc4668bd249c35fcf58df706eaaf3c2 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 1b8a206d66d29e608ca012013c1117fc20ebc441..dd72a212d3642ce4ae081125cc8e8bd12fb86af1 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 03bb12f1c8307caf4a1d651d7509a9fe42915f15..ae7981a49ba760b76fd27e9713d9c5345d08a9aa 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 2001d668654ceda65a5c435adbb918aff1f3f098..b4f33dad927222869af3b99bee1368699982c1a4 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 50e079672f877c7dd0a10c9307a33d47d7f90200..c8589b0f22ff136c47ba854126467ea4c3f19569 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 1b4ab5a184d0dd042b0e2ced5c8b2aaeaf3b4d29..377ecacabc1750aa2c4b6e6883cf2b2d423f5d3c 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 fc2a2fbb3f66e4723983af8ec80f9c8c16c75eb0..8bf5ba925e90ba94852ea90a0ba93064cd64849e 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 c62f7356a91cb043064367f1fdc8d5f5d3719198..e2c34e64fa6ee53dc1668b1c1c69d760464b9956 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 849287ce5e1e9490ead753fcddb0a96c3a7381d2..53c9e70dc7fb882c5e4f89f2f6623f92495a51e6 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 be41473dacf8aaee4503841927b5ab950e1f9afc..5c98eab403096bcc39251445145f16dc613d314e 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 31fab4d5b5a60f6ce91039453c599fdcfafa4579..8bad10d7235b29c7769e2468c2108d287cc755cd 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 c6e17fd042f19bbeee3507e4cd64f49cff369682..b6bd58d118e9fc8b2d8f831660a3c93f8c59e605 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 5a7cd602c857b1345f4f48f3e799403130782a48..a29997e56547044c7ca9be376a1d9bc079e845b8 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 d9a3c668a178d4aea43266677c92e9396d41ff28..3bb9efc5315fcacf0b50682b65c89ac3ad0d2d4e 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 b3e2c8a6674d65f0c3ac3aa2109bcc9908aa2e8e..9cce52c6d4587baf01ba22eebc9c57da04c26590 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 05ce5bc7a205ae51ae147450e7c0f23ee0fe28e2..cafcf6319326cc9a496de8ee6aa1033e1320f4b0 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 3c50a525c2eac440ace3cb1d87af6abb3c5a9628..d9b787b6df33d66c7c4395e678337a449ed52486 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 436bbdc55362766fe3793c1670c41a03fc8cd6ff..bd9bee8873250da1cefba7ef8903a61447a438da 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 1ef54ecc732f3d2098ed51d955f8feed4cb1a821..7d713914d457de616b1fe0ee7f3d5775d1596aa9 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 44d6cc84a6493a326257d96f19b43c83c62f7b31..3485652984b4f7b200db60c03d305149f8f4941d 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 8de974bc2b333fb6ccc5b5f0bb1af86533139925..871eeb077e3229116d2bc5dad0ea6828dd308853 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 f92afb95dfce5231b90cea4dcf9270e2958ec0d8..10ed364e37e88c72b8e6e195c51ade8ac72cbfd7 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 a155db0355249f45d18dc043e9ac608b6f9496bb..779a45daf7a78a445966c115e68ec8a1ebe9e592 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 27b06e227f7dbeebda11a8794f94f47907c6dc3f..c401a222c3aa2c7ab6ce58ebbb1ad02271861333 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 e6cafb2584e46216d3f11d4feefe695f8bae09b6..b85352ae6508cacd43bcf7b09cab388f69f61187 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 849798166247b665655e8c3dbf9e5aafca31b4d8..354e5c60a6b9ed80f0f8c44439294bfa2731a423 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 70808363e16182fe6dae21faf18e0e85d74a6df5..919a05a0d992602f442511f50502525e987c0251 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 e72820611d3a99a83279c811e417d05ae39faa70..2fb2fcc40fc2e1085da2c8e7406aa3e6bb85b5d1 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 bf44a2d53ee7e04b12363d6e15c2fe62ebb1a47b..1ba7228140b16562552b4a70336d07fbe2b0be3d 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 2ba2ef244fe50e720df20fc1f24f8b9ed6bfeb76..ec2b2d5f4179b7f631ae12c670111dc0be86d0d3 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 e51d73f6a81f80a078f8baf9dceaf30994aac060..eb6fa3c5e7e5838840f9a8db6429336850827ea6 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 6e860010bcde6f0268741636975d5c66b21499f1..198beafacec05995f97007ee80b0778538b87384 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 6e477892d91ee6a0295c968e96c4c34657f3b12b..2665f238d52935900873c8fde5309d700c0d34f6 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 cf53c642a144903619cc89d45d5abd9364903c17..1e8a8e3037d84f980d963d359ce791b1ddba47d3 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 0e83219ded28d561b2bf7ef03154632503b75ea4..a885290624b2c79165817d98871e4c496d183b22 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 aa2c329c4d0d9ed38a1b22699515744e87d53d6f..8070f01e9b5a18022b9873c79468b8fcadf0feec 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 ea65992b8ef9469ec17d6978a6f75fb7bd240466..d3b36c798f0b399a1c2c6ed2897353b6dffaaa05 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 c93591d5ccdd0fdee069472702f30072a291f192..8e2a95a81488dbe8458ff4e240d99993cc52f777 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 1000e08962c41f206e219d91b41a07fcab2603cd..7f4cca219650a865a5124fb1154a6c7db165b9d7 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 888d1a12e6751eeb91f0af04b50cf6d5bea74162..d4f4051c3a4602d7006630434c27ddb1b917cc82 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 ebc7748d3bfcddb804a1587d1e064cf72f7d6419..09ea968dfbc2e0440ddc0b3e23b7773e64567744 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 1038d15f32a274a4b346fff472dc33d00095ee68..884f65c42bcb3e497c572d200ea74b4f755cfe00 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 361afa286cf2d2049072137e5927e93ac8923b7e..cda5cd571928ae1ce78827a933aa589aeb3c8fb8 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 e7bc91f5c831e92a7d60124c8dde1ea03f8810f6..b3784d3c032d9ee927f030ec51b2ba0e4c714272 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 6a99ad9a90f69ba3c96fc18dc46dfcadcb6ac631..7528422fdc09b7894898bdee94eaa11ad2cba311 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 94ef22506a231911a325ae296c721b904dd337e9..d0bf3a0abf58c47720216bd839eb84260ac207d8 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 d973513ffe9dd04affcdecc84196e6f7cfa97341..d198992abde7dc79f0732928a3cb0cb0e6549ded 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 cfb9e16942c25f0397d00f17b0c3353a24b7acd8..f3d579f3f8689b41f364f281e7e8270bb354b983 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 0e606c466b5bca6f6b7192cc57a5b0df83bfedf0..cc6ee7b19ea99fe61ef00beaf475fc35c8a0a809 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 ac8e66ba3bb22a41c0325a6c79505ad77beda41f..e0c56307639afeb70e5cc45a4022996cef52a475 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 b8acf1065a974e97aca0d74896d6166c4152e5d2..f8a29a52d7a3d9332b9dcb8189dfd7c1df902faa 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 d0d74f6ea87f1759e2f922964da14c582abe0137..b8fd6fe0f82b1efc26abb2dcced23934f5623f9f 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 3732fce580bba1f1f54b91f2c0d5313764497045..71482c10062a599a1a53280192ed0086a7c5d9e4 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 154d3133c1f27f807c86cb80370ec3de8283f7c0..61cad961f51a0d800a12200b6a28aa50fa867496 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 634251a856032220064084e2ecb0542e5bd95d39..219a23846856cc3348ed44cf52a634c2a068017d 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 76b9e32bb5207edad075c3d8670dde5ec3429b96..4679b7e1da3a752c457cd7109d36e65194154792 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 a70f30b4e2169df09f6138753688101ca5c21b20..e00c31deb2de553b59f6daefadbea4036fab8ee5 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 db77ba95856d94dc16003a7a916fbbdcdaeac6f3..7a55c51c84448eaf0be1fdf270fa27c0e0dc1361 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 cfb1616e84ce7ef4065f49aac38fd728bbe8a978..8b3e73200a367b06fcbbaf1a6160feeaa8da7aa9 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 50a401bb160ce71aca4cbddb321849c328f8f686..195acc1b6d15a91369d48164179cd6e0b5cfac8d 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 6d3b065037600a114adbe79d24a19836645c67df..4543f367ba4bf9c721b9f734c7b6d51dd9d5fe5e 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 89b404672c42c7b259a4102ca40f1aeb7cd97890..e06eafa0cb9061a3b6834e92dbc1dc87e79104e5 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 92658ff52c338e4cc3d0f983e8b5ded312f7fe0f..fc9a1c468a707b85f766da7577eb35785ceb4404 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 9e5dc638516a958cc829eb034d0766e91771906d..85f222bcc1202b4486b9c69a3f6c6a1f53146488 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 0595365f9223b347ed715cb08360b6f491d68cb1..933be9902c5cfd0dfc2c94102a6f5da972ec13cf 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"