diff --git a/paddle/fluid/inference/api/analysis_predictor.cc b/paddle/fluid/inference/api/analysis_predictor.cc index f4c35b49a0d00760f78f3d22a1dab1ee0ffae010..6ccad994b06a8085228e41007be503e8d99d09e4 100644 --- a/paddle/fluid/inference/api/analysis_predictor.cc +++ b/paddle/fluid/inference/api/analysis_predictor.cc @@ -1609,6 +1609,51 @@ std::vector AnalysisPredictor::GetOutputNames() { return output_names; } +std::map> +AnalysisPredictor::GetOutputTensorShape() { + std::map> output_shapes; + std::vector names = GetOutputNames(); + for (std::string name : names) { + auto *var = inference_program_->Block(0).FindVar(name); + PADDLE_ENFORCE_NOT_NULL(var, + platform::errors::PreconditionNotMet( + "Output %s does not exist.", name)); + output_shapes[name] = var->GetShape(); + } + return output_shapes; +} + +std::map +AnalysisPredictor::GetOutputTypes() { + std::map output_type; + std::vector names = GetOutputNames(); + for (const auto &name : names) { + auto *var = inference_program_->Block(0).FindVar(name); + PADDLE_ENFORCE_NOT_NULL( + var, + platform::errors::PreconditionNotMet( + "Output %s does not exist inference_program_.", name)); + auto dtype = var->GetDataType(); + if (dtype == paddle::framework::proto::VarType::FP32) { + output_type[name] = paddle_infer::DataType::FLOAT32; + } else if (dtype == paddle::framework::proto::VarType::FP16) { + output_type[name] = paddle_infer::DataType::FLOAT16; + } else if (dtype == paddle::framework::proto::VarType::INT64) { + output_type[name] = paddle_infer::DataType::INT64; + } else if (dtype == paddle::framework::proto::VarType::INT32) { + output_type[name] = paddle_infer::DataType::INT32; + } else if (dtype == paddle::framework::proto::VarType::UINT8) { + output_type[name] = paddle_infer::DataType::UINT8; + } else if (dtype == paddle::framework::proto::VarType::INT8) { + output_type[name] = paddle_infer::DataType::INT8; + } else { + PADDLE_THROW(paddle::platform::errors::Unimplemented( + "Unsupported data type `%s` when get output dtype ", dtype)); + } + } + return output_type; +} + std::unique_ptr AnalysisPredictor::GetInputTensor( const std::string &name) { framework::Scope *scope; @@ -2477,6 +2522,10 @@ std::vector Predictor::GetInputNames() { return predictor_->GetInputNames(); } +std::map> Predictor::GetInputTensorShape() { + return predictor_->GetInputTensorShape(); +} + std::map Predictor::GetInputTypes() { return predictor_->GetInputTypes(); } @@ -2493,6 +2542,14 @@ std::unique_ptr Predictor::GetOutputHandle(const std::string &name) { return predictor_->GetOutputTensor(name); } +std::map> Predictor::GetOutputTensorShape() { + return predictor_->GetOutputTensorShape(); +} + +std::map Predictor::GetOutputTypes() { + return predictor_->GetOutputTypes(); +} + bool Predictor::Run() { return predictor_->ZeroCopyRun(); } std::unique_ptr Predictor::Clone(void *stream) { diff --git a/paddle/fluid/inference/api/analysis_predictor.h b/paddle/fluid/inference/api/analysis_predictor.h index 95a58d856f3e7f12e6372d9c501d6629b9aef15a..5a578a9b94fcb750379225d81edd4e98ca7b3200 100644 --- a/paddle/fluid/inference/api/analysis_predictor.h +++ b/paddle/fluid/inference/api/analysis_predictor.h @@ -191,6 +191,18 @@ class AnalysisPredictor : public PaddlePredictor { /// \return the map of input names and type /// std::map GetInputTypes() override; + /// + /// \brief Get all output names and their corresponding shapes + /// + /// \return the map of output names and shapes + /// + std::map> GetOutputTensorShape() override; + /// + /// \brief Get all output names and their corresponding type + /// + /// \return the map of output names and type + /// + std::map GetOutputTypes() override; /// /// \brief Run the prediction engine diff --git a/paddle/fluid/inference/api/analysis_predictor_tester.cc b/paddle/fluid/inference/api/analysis_predictor_tester.cc index 627b6fba02313ccd5d4179907d5351b58a69b49e..3b462cc941e710bf3bb207abb990b4cbdc1b3e34 100644 --- a/paddle/fluid/inference/api/analysis_predictor_tester.cc +++ b/paddle/fluid/inference/api/analysis_predictor_tester.cc @@ -106,6 +106,8 @@ TEST(AnalysisPredictor, analysis_on) { ASSERT_EQ(predictor->scope_->parent(), nullptr); ASSERT_EQ(predictor->sub_scope_->parent(), predictor->scope_.get()); ASSERT_EQ(predictor->GetInputTypes().size(), 4UL); + ASSERT_EQ(predictor->GetOutputTypes().size(), 1UL); + ASSERT_EQ(predictor->GetOutputTensorShape().size(), 1UL); // 2. Dummy Input Data int64_t data[4] = {1, 2, 3, 4}; PaddleTensor tensor; @@ -430,6 +432,8 @@ TEST(Predictor, Run) { auto predictor = CreatePredictor(config); ASSERT_EQ(predictor->GetInputTypes().size(), 4UL); + ASSERT_EQ(predictor->GetOutputTypes().size(), 1UL); + ASSERT_EQ(predictor->GetOutputTensorShape().size(), 1UL); auto w0 = predictor->GetInputHandle("firstw"); auto w1 = predictor->GetInputHandle("secondw"); diff --git a/paddle/fluid/inference/api/paddle_api.h b/paddle/fluid/inference/api/paddle_api.h index ff1ec1eba30259b44c252e3eb38d7008697f4058..e83c1a9f9444c90944162beaeeeaa6302593390a 100644 --- a/paddle/fluid/inference/api/paddle_api.h +++ b/paddle/fluid/inference/api/paddle_api.h @@ -243,6 +243,19 @@ class PD_INFER_DECL PaddlePredictor { /// \return Output tensor names. virtual std::vector GetOutputNames() { return {}; } + /// \brief Get the output shape of the model. + /// \return A map contains all the output names and shape defined in the + /// model. + virtual std::map> GetOutputTensorShape() { + return {}; + } + + /// \brief Get the output type of the model. + /// \return A map contains all the output names and type defined in the model. + virtual std::map GetOutputTypes() { + return {}; + } + /// \brief Get the input ZeroCopyTensor by name. /// Be inherited by AnalysisPredictor, Only used in ZeroCopy scenarios. /// The name is obtained from the GetInputNames() interface. diff --git a/paddle/fluid/inference/api/paddle_inference_api.h b/paddle/fluid/inference/api/paddle_inference_api.h index 1a52c011b2a806490cf49053dad6fc122069377b..d7f15e0529894f7991c807fa7519e7d28ae6a4c9 100644 --- a/paddle/fluid/inference/api/paddle_inference_api.h +++ b/paddle/fluid/inference/api/paddle_inference_api.h @@ -92,6 +92,13 @@ class PD_INFER_DECL Predictor { /// explicit Predictor(const Config& config); + /// + /// \brief Get all input names and their corresponding shapes + /// + /// \return the map of input names and shape + /// + std::map> GetInputTensorShape(); + /// /// \brief Get all input names and their corresponding type /// @@ -136,6 +143,20 @@ class PD_INFER_DECL Predictor { /// std::unique_ptr GetOutputHandle(const std::string& name); + /// + /// \brief Get all output names and their corresponding shapes + /// + /// \return the map of output names and shape + /// + std::map> GetOutputTensorShape(); + + /// + /// \brief Get all output names and their corresponding type + /// + /// \return the map of output names and type + /// + std::map GetOutputTypes(); + /// /// \brief Clone to get the new predictor. thread safe. /// diff --git a/paddle/fluid/inference/capi_exp/pd_config.cc b/paddle/fluid/inference/capi_exp/pd_config.cc index 6ff88beb70225e6a002c70f1d0d1a79523a00698..dd0979274f75daeeff45326af2deacd859d8d5d1 100644 --- a/paddle/fluid/inference/capi_exp/pd_config.cc +++ b/paddle/fluid/inference/capi_exp/pd_config.cc @@ -55,8 +55,9 @@ __pd_give PD_Config* PD_ConfigCreate() { } void PD_ConfigDestroy(__pd_take PD_Config* pd_config) { - CHECK_AND_CONVERT_PD_CONFIG; - delete reinterpret_cast(config); + if (pd_config != NULL) { + delete reinterpret_cast(pd_config); + } } void PD_ConfigSetModel(__pd_keep PD_Config* pd_config, @@ -116,9 +117,12 @@ PD_Bool PD_ConfigUseFcPadding(__pd_keep PD_Config* pd_config) { void PD_ConfigEnableUseGpu(__pd_keep PD_Config* pd_config, uint64_t memory_pool_init_size_mb, - int32_t device_id) { + int32_t device_id, + PD_PrecisionType precision_mode) { CHECK_AND_CONVERT_PD_CONFIG; - config->EnableUseGpu(memory_pool_init_size_mb, device_id); + config->EnableUseGpu(memory_pool_init_size_mb, + device_id, + ConvertToCxxPrecisionType(precision_mode)); } void PD_ConfigDisableGpu(__pd_keep PD_Config* pd_config) { CHECK_AND_CONVERT_PD_CONFIG; @@ -427,6 +431,14 @@ void PD_ConfigSetBfloat16Op(__pd_keep PD_Config* pd_config, } config->SetBfloat16Op(std::move(op_names)); } +void PD_ConfigEnableMkldnnInt8(__pd_keep PD_Config* pd_config) { + CHECK_AND_CONVERT_PD_CONFIG; + config->EnableMkldnnInt8(); +} +PD_Bool PD_ConfigMkldnnInt8Enabled(__pd_keep PD_Config* pd_config) { + CHECK_AND_CONVERT_PD_CONFIG; + return config->mkldnn_int8_enabled(); +} PD_Bool PD_ConfigThreadLocalStreamEnabled(__pd_keep PD_Config* pd_config) { CHECK_AND_CONVERT_PD_CONFIG; return config->thread_local_stream_enabled(); @@ -484,6 +496,10 @@ void PD_ConfigEnableGpuMultiStream(__pd_keep PD_Config* pd_config) { CHECK_AND_CONVERT_PD_CONFIG; config->EnableGpuMultiStream(); } +void PD_ConfigSetExecStream(__pd_keep PD_Config* pd_config, void* stream) { + CHECK_AND_CONVERT_PD_CONFIG; + return config->SetExecStream(stream); +} void PD_ConfigPartiallyRelease(__pd_keep PD_Config* pd_config) { CHECK_AND_CONVERT_PD_CONFIG; config->PartiallyRelease(); diff --git a/paddle/fluid/inference/capi_exp/pd_config.h b/paddle/fluid/inference/capi_exp/pd_config.h index feb1d5724438aa18cea2e8a83f844935eec09e5b..19e1a1c139d4c27d7832d646bb2197fd768e9968 100644 --- a/paddle/fluid/inference/capi_exp/pd_config.h +++ b/paddle/fluid/inference/capi_exp/pd_config.h @@ -132,11 +132,13 @@ PADDLE_CAPI_EXPORT extern PD_Bool PD_ConfigUseFcPadding( /// \param[in] memory_pool_init_size_mb initial size of the GPU memory pool in /// MB. /// \param[in] device_id device_id the GPU card to use. +/// \param[in] precision_mode the precision used in Paddle-GPU inference. /// PADDLE_CAPI_EXPORT extern void PD_ConfigEnableUseGpu( __pd_keep PD_Config* pd_config, uint64_t memory_pool_init_size_mb, - int32_t device_id); + int32_t device_id, + PD_PrecisionType precision_mode); /// /// \brief Turn off GPU. /// @@ -607,6 +609,22 @@ PADDLE_CAPI_EXPORT extern PD_Bool PD_ConfigMkldnnBfloat16Enabled( PADDLE_CAPI_EXPORT extern void PD_ConfigSetBfloat16Op( __pd_keep PD_Config* pd_config, size_t ops_num, const char** op_list); /// +/// \brief Turn on MKLDNN int8. +/// +/// \param[in] pd_onfig config +/// +PADDLE_CAPI_EXPORT extern void PD_ConfigEnableMkldnnInt8( + __pd_keep PD_Config* pd_config); +/// +/// \brief A boolean state telling whether to use the MKLDNN int8. +/// +/// \param[in] pd_onfig config +/// \return Whether to use the MKLDNN int8. +/// +PADDLE_CAPI_EXPORT extern PD_Bool PD_ConfigMkldnnInt8Enabled( + __pd_keep PD_Config* pd_config); + +/// /// \brief Enable the GPU multi-computing stream feature. /// NOTE: The current behavior of this interface is to bind the computation /// stream to the thread, and this behavior may be changed in the future. @@ -625,6 +643,12 @@ PADDLE_CAPI_EXPORT extern void PD_ConfigEnableGpuMultiStream( PADDLE_CAPI_EXPORT extern PD_Bool PD_ConfigThreadLocalStreamEnabled( __pd_keep PD_Config* pd_config); /// +/// \brief Set execution stream. If not set a stream will be created +/// internally. +/// +PADDLE_CAPI_EXPORT extern void PD_ConfigSetExecStream( + __pd_keep PD_Config* pd_config, void* stream); +/// /// \brief Specify the memory buffer of program and parameter. /// Used when model and params are loaded directly from memory. /// diff --git a/paddle/fluid/inference/capi_exp/pd_predictor.cc b/paddle/fluid/inference/capi_exp/pd_predictor.cc index ef6447f7444c9cf2685be2fd230022dbee8f92f7..f0a16fee611dad0d5e5dd1037a846eeda34a184d 100644 --- a/paddle/fluid/inference/capi_exp/pd_predictor.cc +++ b/paddle/fluid/inference/capi_exp/pd_predictor.cc @@ -15,6 +15,7 @@ #include "paddle/fluid/inference/capi_exp/pd_predictor.h" #include "paddle/fluid/inference/api/paddle_inference_api.h" +#include "paddle/fluid/inference/capi_exp/pd_config.h" #include "paddle/fluid/inference/capi_exp/pd_types.h" #include "paddle/fluid/inference/capi_exp/pd_utils.h" #include "paddle/fluid/inference/capi_exp/types_internal.h" @@ -38,7 +39,6 @@ __pd_give PD_Predictor* PD_PredictorCreate(__pd_take PD_Config* pd_config) { paddle_infer::Config* config = reinterpret_cast(pd_config); pd_predictor->predictor = paddle_infer::CreatePredictor(*config); - delete config; return pd_predictor; } @@ -57,6 +57,30 @@ __pd_give PD_OneDimArrayCstr* PD_PredictorGetInputNames( return paddle_infer::CvtVecToOneDimArrayCstr(names); } +__pd_give PD_IOInfos* PD_PredictorGetInputInfos( + __pd_keep PD_Predictor* pd_predictor) { + CHECK_AND_CONVERT_PD_PREDICTOR; + std::vector names = predictor->GetInputNames(); + std::map> input_shapes = + predictor->GetInputTensorShape(); + std::map input_dtypes = + predictor->GetInputTypes(); + + PD_IOInfos* input_infos = new PD_IOInfos; + input_infos->size = names.size(); + input_infos->io_info = names.empty() ? NULL : new PD_IOInfo*[names.size()]; + for (size_t i = 0; i < names.size(); i++) { + const std::string& name = names[i]; + input_infos->io_info[i] = new PD_IOInfo; + input_infos->io_info[i]->name = paddle_infer::CvtStrToCstr(name); + input_infos->io_info[i]->shape = + paddle_infer::CvtVecToOneDimArrayInt64(input_shapes[name]); + input_infos->io_info[i]->dtype = + paddle_infer::CvtFromCxxDatatype(input_dtypes[name]); + } + return input_infos; +} + __pd_give PD_OneDimArrayCstr* PD_PredictorGetOutputNames( __pd_keep PD_Predictor* pd_predictor) { CHECK_AND_CONVERT_PD_PREDICTOR; @@ -64,6 +88,30 @@ __pd_give PD_OneDimArrayCstr* PD_PredictorGetOutputNames( return paddle_infer::CvtVecToOneDimArrayCstr(names); } +__pd_give PD_IOInfos* PD_PredictorGetOutputInfos( + __pd_keep PD_Predictor* pd_predictor) { + CHECK_AND_CONVERT_PD_PREDICTOR; + std::vector names = predictor->GetOutputNames(); + std::map> output_shapes = + predictor->GetOutputTensorShape(); + std::map output_dtypes = + predictor->GetOutputTypes(); + + PD_IOInfos* output_infos = new PD_IOInfos; + output_infos->size = names.size(); + output_infos->io_info = names.empty() ? NULL : new PD_IOInfo*[names.size()]; + for (size_t i = 0; i < names.size(); i++) { + const std::string& name = names[i]; + output_infos->io_info[i] = new PD_IOInfo; + output_infos->io_info[i]->name = paddle_infer::CvtStrToCstr(name); + output_infos->io_info[i]->shape = + paddle_infer::CvtVecToOneDimArrayInt64(output_shapes[name]); + output_infos->io_info[i]->dtype = + paddle_infer::CvtFromCxxDatatype(output_dtypes[name]); + } + return output_infos; +} + size_t PD_PredictorGetInputNum(__pd_keep PD_Predictor* pd_predictor) { CHECK_AND_CONVERT_PD_PREDICTOR; return predictor->GetInputNames().size(); diff --git a/paddle/fluid/inference/capi_exp/pd_predictor.h b/paddle/fluid/inference/capi_exp/pd_predictor.h index 33d5160bc3e0d1b1f14c2e9e34e1885ee8ae4f72..a35defb910070324be0c4e7c11305affb2fcd8e4 100644 --- a/paddle/fluid/inference/capi_exp/pd_predictor.h +++ b/paddle/fluid/inference/capi_exp/pd_predictor.h @@ -30,6 +30,7 @@ typedef struct PD_Predictor PD_Predictor; typedef struct PD_Config PD_Config; typedef struct PD_Tensor PD_Tensor; typedef struct PD_OneDimArrayCstr PD_OneDimArrayCstr; +typedef struct PD_IOInfos PD_IOInfos; #ifdef __cplusplus extern "C" { @@ -60,6 +61,14 @@ PADDLE_CAPI_EXPORT extern __pd_give PD_Predictor* PD_PredictorClone( PADDLE_CAPI_EXPORT extern __pd_give PD_OneDimArrayCstr* PD_PredictorGetInputNames(__pd_keep PD_Predictor* pd_predictor); /// +/// \brief Get the input infos(name/shape/dtype) +/// +/// \param[in] pd_predictor predictor +/// \return input infos(name/shape/dtype) +/// +PADDLE_CAPI_EXPORT extern __pd_give PD_IOInfos* PD_PredictorGetInputInfos( + __pd_keep PD_Predictor* pd_predictor); +/// /// \brief Get the output names /// /// \param[in] pd_predictor predictor @@ -67,7 +76,14 @@ PD_PredictorGetInputNames(__pd_keep PD_Predictor* pd_predictor); /// PADDLE_CAPI_EXPORT extern __pd_give PD_OneDimArrayCstr* PD_PredictorGetOutputNames(__pd_keep PD_Predictor* pd_predictor); - +/// +/// \brief Get the output infos(name/shape/dtype) +/// +/// \param[in] pd_predictor predictor +/// \return output infos(name/shape/dtype) +/// +PADDLE_CAPI_EXPORT extern __pd_give PD_IOInfos* PD_PredictorGetOutputInfos( + __pd_keep PD_Predictor* pd_predictor); /// /// \brief Get the input number /// diff --git a/paddle/fluid/inference/capi_exp/pd_types.h b/paddle/fluid/inference/capi_exp/pd_types.h index 62c54616535cfffb685d51f42ed88d454d9f1e81..b2391d538bcfd8589d29553f1f78a17256af4c60 100644 --- a/paddle/fluid/inference/capi_exp/pd_types.h +++ b/paddle/fluid/inference/capi_exp/pd_types.h @@ -29,6 +29,11 @@ typedef struct PD_OneDimArraySize { size_t* data; } PD_OneDimArraySize; // std::vector +typedef struct PD_OneDimArrayInt64 { + size_t size; + int64_t* data; +} PD_OneDimArrayInt64; // std::vector + typedef struct PD_OneDimArrayCstr { size_t size; char** data; @@ -43,3 +48,14 @@ typedef struct PD_TwoDimArraySize { size_t size; PD_OneDimArraySize** data; } PD_TwoDimArraySize; // std::vector> + +typedef struct PD_IOInfo { + PD_Cstr* name; + PD_OneDimArrayInt64* shape; + PD_DataType dtype; +} PD_IOInfo; // input or output info + +typedef struct PD_IOInfos { + size_t size; + PD_IOInfo** io_info; +} PD_IOInfos; // inputs or outputs info diff --git a/paddle/fluid/inference/capi_exp/pd_utils.cc b/paddle/fluid/inference/capi_exp/pd_utils.cc index 7942a860c4ee898c0f2a402eaae469b95e549ead..b455e79dbd6763c0522f53d314bcbb9c3290882a 100644 --- a/paddle/fluid/inference/capi_exp/pd_utils.cc +++ b/paddle/fluid/inference/capi_exp/pd_utils.cc @@ -11,12 +11,10 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. - -#include "paddle/fluid/inference/capi_exp/pd_utils.h" - #include #include "paddle/fluid/inference/api/paddle_inference_api.h" +#include "paddle/fluid/inference/capi_exp/pd_utils.h" #include "paddle/fluid/inference/capi_exp/utils_internal.h" #include "paddle/fluid/platform/enforce.h" @@ -62,6 +60,7 @@ ONE_DIM_ARRAY_UTILS_FUNC_IMPL(int32_t, Int32, int) ONE_DIM_ARRAY_UTILS_FUNC_IMPL(size_t, Size, size_t) +ONE_DIM_ARRAY_UTILS_FUNC_IMPL(int64_t, Int64, int64_t) #undef ONE_DIM_ARRAY_UTILS_FUNC_IMPL #undef CONVERT_ONE_DIM_ARRAY_TO_VEC @@ -178,6 +177,38 @@ TWO_DIM_ARRAY_UTILS_FUNC_IMPL(size_t, Size, size_t) #undef CONVERT_VEC_TO_TWO_DIM_ARRAY #undef DESTROY_TWO_DIM_ARRAY +#ifdef __cplusplus +extern "C" { +#endif + +void PD_IOInfoDestroy(__pd_take PD_IOInfo* io_info) { + if (io_info != NULL) { + PD_CstrDestroy(io_info->name); + io_info->name = NULL; + PD_OneDimArrayInt64Destroy(io_info->shape); + io_info->shape = NULL; + delete io_info; + } +} + +void PD_IOInfosDestroy(__pd_take PD_IOInfos* io_infos) { + if (io_infos != NULL) { + if (io_infos->size != 0) { + for (size_t index = 0; index < io_infos->size; ++index) { + PD_IOInfoDestroy(io_infos->io_info[index]); + } + io_infos->size = 0; + } + delete[] io_infos->io_info; + io_infos->io_info = NULL; + delete io_infos; + } +} + +#ifdef __cplusplus +} // extern "C" +#endif + namespace paddle_infer { PlaceType CvtToCxxPlaceType(PD_PlaceType place_type) { diff --git a/paddle/fluid/inference/capi_exp/pd_utils.h b/paddle/fluid/inference/capi_exp/pd_utils.h index 8743c58db76c92b620d0a5b82318e43d52b524ee..0b1abcc82f4266b4c905da7d777484306cdad9ef 100644 --- a/paddle/fluid/inference/capi_exp/pd_utils.h +++ b/paddle/fluid/inference/capi_exp/pd_utils.h @@ -41,6 +41,14 @@ extern "C" { PADDLE_CAPI_EXPORT extern void PD_OneDimArrayInt32Destroy( __pd_take PD_OneDimArrayInt32* array); +/// +/// \brief Destroy the PD_OneDimArrayInt64 object pointed to by the pointer. +/// +/// \param[in] array pointer to the PD_OneDimArrayInt64 object. +/// +PADDLE_CAPI_EXPORT extern void PD_OneDimArrayInt64Destroy( + __pd_take PD_OneDimArrayInt64* array); + /// /// \brief Destroy the PD_OneDimArrayCstr object pointed to by the pointer. /// @@ -74,6 +82,21 @@ PADDLE_CAPI_EXPORT extern void PD_TwoDimArraySizeDestroy( /// PADDLE_CAPI_EXPORT extern void PD_CstrDestroy(__pd_take PD_Cstr* cstr); +/// +/// \brief Destroy the PD_IOInfo object pointed to by the pointer. +/// +/// \param[in] cstr pointer to the PD_IOInfo object. +/// +PADDLE_CAPI_EXPORT extern void PD_IOInfoDestroy(__pd_take PD_IOInfo* io_info); + +/// +/// \brief Destroy the PD_IOInfos object pointed to by the pointer. +/// +/// \param[in] cstr pointer to the PD_IOInfos object. +/// +PADDLE_CAPI_EXPORT extern void PD_IOInfosDestroy( + __pd_take PD_IOInfos* io_infos); + #ifdef __cplusplus } // extern "C" #endif diff --git a/paddle/fluid/inference/capi_exp/utils_internal.h b/paddle/fluid/inference/capi_exp/utils_internal.h index 95b16dbd59943bb34a2f0d348b03b2d21cd99b23..e7d73331a6b7472cb7e7dd059607981d434354b1 100644 --- a/paddle/fluid/inference/capi_exp/utils_internal.h +++ b/paddle/fluid/inference/capi_exp/utils_internal.h @@ -44,6 +44,16 @@ namespace paddle_infer { __pd_give PD_OneDimArrayInt32* CvtVecToOneDimArrayInt32( const std::vector& vec); +/// +/// \brief Convert the 'std::vector' object to a 'PD_OneDimArrayInt64' +/// object. +/// +/// \param[in] vec source object. +/// \return target object. +/// +__pd_give PD_OneDimArrayInt64* CvtVecToOneDimArrayInt64( + const std::vector& vec); + /// /// \brief Convert the 'PD_OneDimArrayInt32' object to a 'std::vector' /// object. @@ -54,6 +64,16 @@ __pd_give PD_OneDimArrayInt32* CvtVecToOneDimArrayInt32( std::vector CvtOneDimArrayToVecInt32( __pd_keep const PD_OneDimArrayInt32* array); +/// +/// \brief Convert the 'PD_OneDimArrayInt64' object to a 'std::vector' +/// object. +/// +/// \param[in] array source object. +/// \return target object. +/// +std::vector CvtOneDimArrayToVecInt64( + __pd_keep const PD_OneDimArrayInt64* array); + /// /// \brief Convert the 'std::vector' object to a 'PD_OneDimArraySize' /// object. diff --git a/paddle/fluid/inference/experimental/javaapi/native/com_baidu_paddle_inference_Config.cpp b/paddle/fluid/inference/experimental/javaapi/native/com_baidu_paddle_inference_Config.cpp index 285feebb90f60e57273019a9d40d546b33c3d958..0d585f938be8c8dd958e36e0d751de33d2f642c4 100644 --- a/paddle/fluid/inference/experimental/javaapi/native/com_baidu_paddle_inference_Config.cpp +++ b/paddle/fluid/inference/experimental/javaapi/native/com_baidu_paddle_inference_Config.cpp @@ -1,272 +1,273 @@ -// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "com_baidu_paddle_inference_Config.h" - -#include - -#include "jni_convert_util.h" // NOLINT -#include "pd_inference_api.h" // NOLINT - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_cppConfigDestroy( - JNIEnv*, jobject, jlong cppPaddleConfigPointer) { - PD_ConfigDestroy(reinterpret_cast(cppPaddleConfigPointer)); -} - -// 1. create Config - -JNIEXPORT jlong JNICALL Java_com_baidu_paddle_inference_Config_createCppConfig( - JNIEnv* env, jobject obj) { - jlong cppPaddleConfigPointer = reinterpret_cast(PD_ConfigCreate()); - return cppPaddleConfigPointer; -} - -JNIEXPORT jboolean JNICALL -Java_com_baidu_paddle_inference_Config_isCppConfigValid( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - bool flag = - PD_ConfigIsValid(reinterpret_cast(cppPaddleConfigPointer)); - return cpp_bool_to_jboolean(env, flag); -} - -// 2. not combined model settings - -JNIEXPORT void JNICALL -Java_com_baidu_paddle_inference_Config_setCppModel(JNIEnv* env, - jobject obj, - jlong cppPaddleConfigPointer, - jstring modelFile, - jstring paramsFile) { - PD_ConfigSetModel(reinterpret_cast(cppPaddleConfigPointer), - jstring_to_cpp_string(env, modelFile).c_str(), - jstring_to_cpp_string(env, paramsFile).c_str()); -} - -// 3. combined model settings - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_setCppModelDir( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jstring modelDir) { - PD_ConfigSetModelDir(reinterpret_cast(cppPaddleConfigPointer), - jstring_to_cpp_string(env, modelDir).c_str()); -} - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_setCppProgFile( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jstring progFile) { - PD_ConfigSetProgFile(reinterpret_cast(cppPaddleConfigPointer), - jstring_to_cpp_string(env, progFile).c_str()); -} - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_setCppParamsFile( - JNIEnv* env, - jobject obj, - jlong cppPaddleConfigPointer, - jstring paramsFile) { - PD_ConfigSetParamsFile(reinterpret_cast(cppPaddleConfigPointer), - jstring_to_cpp_string(env, paramsFile).c_str()); -} - -JNIEXPORT jstring JNICALL Java_com_baidu_paddle_inference_Config_modelDir( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - return cpp_string_to_jstring( - env, - PD_ConfigGetModelDir( - reinterpret_cast(cppPaddleConfigPointer))); -} - -JNIEXPORT jstring JNICALL Java_com_baidu_paddle_inference_Config_progFile( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - return cpp_string_to_jstring( - env, - PD_ConfigGetProgFile( - reinterpret_cast(cppPaddleConfigPointer))); -} - -JNIEXPORT jstring JNICALL Java_com_baidu_paddle_inference_Config_paramsFile( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - return cpp_string_to_jstring( - env, - PD_ConfigGetParamsFile( - reinterpret_cast(cppPaddleConfigPointer))); -} - -// 4. cpu settings - -JNIEXPORT void JNICALL -Java_com_baidu_paddle_inference_Config_setCpuMathLibraryNumThreads( - JNIEnv* env, - jobject obj, - jlong cppPaddleConfigPointer, - jint mathThreadsNum) { - int math_threads_num = reinterpret_cast(mathThreadsNum); - PD_ConfigSetCpuMathLibraryNumThreads( - reinterpret_cast(cppPaddleConfigPointer), math_threads_num); -} - -JNIEXPORT jint JNICALL -Java_com_baidu_paddle_inference_Config_cpuMathLibraryNumThreads( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - jint mathThreadsNum = - reinterpret_cast(PD_ConfigGetCpuMathLibraryNumThreads( - reinterpret_cast(cppPaddleConfigPointer))); - return mathThreadsNum; -} - -// 5. MKLDNN settings - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_enableMKLDNN( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - PD_ConfigEnableMKLDNN(reinterpret_cast(cppPaddleConfigPointer)); -} - -JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_inference_Config_mkldnnEnabled( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - bool flag = PD_ConfigMkldnnEnabled( - reinterpret_cast(cppPaddleConfigPointer)); - return cpp_bool_to_jboolean(env, flag); -} - -JNIEXPORT void JNICALL -Java_com_baidu_paddle_inference_Config_enableMkldnnBfloat16( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - PD_ConfigEnableMkldnnBfloat16( - reinterpret_cast(cppPaddleConfigPointer)); -} - -JNIEXPORT jboolean JNICALL -Java_com_baidu_paddle_inference_Config_mkldnnBfloat16Enabled( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - bool flag = PD_ConfigMkldnnBfloat16Enabled( - reinterpret_cast(cppPaddleConfigPointer)); - return cpp_bool_to_jboolean(env, flag); -} - -// 6. gpu setting - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_enableUseGpu( - JNIEnv* env, - jobject obj, - jlong cppPaddleConfigPointer, - jlong memorySize, - jint deviceId) { - PD_ConfigEnableUseGpu(reinterpret_cast(cppPaddleConfigPointer), - (uint64_t)memorySize, - (int32_t)deviceId); -} - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_disableGpu( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - PD_ConfigDisableGpu(reinterpret_cast(cppPaddleConfigPointer)); -} - -JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_inference_Config_useGpu( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - bool flag = - PD_ConfigUseGpu(reinterpret_cast(cppPaddleConfigPointer)); - return cpp_bool_to_jboolean(env, flag); -} - -JNIEXPORT jint JNICALL Java_com_baidu_paddle_inference_Config_gpuDeviceId( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - int device_id = PD_ConfigGpuDeviceId( - reinterpret_cast(cppPaddleConfigPointer)); - return reinterpret_cast(device_id); -} - -JNIEXPORT jint JNICALL -Java_com_baidu_paddle_inference_Config_memoryPoolInitSizeMb( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - int memory_pool_init_size_mb = PD_ConfigMemoryPoolInitSizeMb( - reinterpret_cast(cppPaddleConfigPointer)); - return reinterpret_cast(memory_pool_init_size_mb); -} - -JNIEXPORT jfloat JNICALL -Java_com_baidu_paddle_inference_Config_fractionOfGpuMemoryForPool( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - float fraction_of_gpuMemory_for_pool = PD_ConfigFractionOfGpuMemoryForPool( - reinterpret_cast(cppPaddleConfigPointer)); - return (jfloat)fraction_of_gpuMemory_for_pool; -} - -// 7. TensorRT To Do - -// 8. optim setting - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_switchIrOptim( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jboolean flag) { - PD_ConfigSwitchIrOptim(reinterpret_cast(cppPaddleConfigPointer), - jboolean_to_cpp_bool(env, flag)); -} - -JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_inference_Config_irOptim( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - bool flag = - PD_ConfigIrOptim(reinterpret_cast(cppPaddleConfigPointer)); - return cpp_bool_to_jboolean(env, flag); -} - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_switchIrDebug( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jboolean flag) { - PD_ConfigSwitchIrDebug(reinterpret_cast(cppPaddleConfigPointer), - jboolean_to_cpp_bool(env, flag)); -} - -// 9. enable memory optimization - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_enableMemoryOptim( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jboolean flag) { - PD_ConfigEnableMemoryOptim( - reinterpret_cast(cppPaddleConfigPointer), - jboolean_to_cpp_bool(env, flag)); -} - -JNIEXPORT jboolean JNICALL -Java_com_baidu_paddle_inference_Config_memoryOptimEnabled( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - bool flag = PD_ConfigMemoryOptimEnabled( - reinterpret_cast(cppPaddleConfigPointer)); - return cpp_bool_to_jboolean(env, flag); -} - -// 10. profile setting - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_enableProfile( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - PD_ConfigEnableProfile(reinterpret_cast(cppPaddleConfigPointer)); -} - -JNIEXPORT jboolean JNICALL -Java_com_baidu_paddle_inference_Config_profileEnabled( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - bool flag = PD_ConfigProfileEnabled( - reinterpret_cast(cppPaddleConfigPointer)); - return cpp_bool_to_jboolean(env, flag); -} - -// 11. log setting - -JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_disableGlogInfo( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - PD_ConfigDisableGlogInfo( - reinterpret_cast(cppPaddleConfigPointer)); -} - -// 12. view config configuration - -JNIEXPORT jstring JNICALL Java_com_baidu_paddle_inference_Config_summary( - JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { - return cpp_string_to_jstring( - env, - PD_ConfigSummary(reinterpret_cast(cppPaddleConfigPointer))); -} +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "com_baidu_paddle_inference_Config.h" + +#include + +#include "jni_convert_util.h" // NOLINT +#include "pd_inference_api.h" // NOLINT + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_cppConfigDestroy( + JNIEnv*, jobject, jlong cppPaddleConfigPointer) { + PD_ConfigDestroy(reinterpret_cast(cppPaddleConfigPointer)); +} + +// 1. create Config + +JNIEXPORT jlong JNICALL Java_com_baidu_paddle_inference_Config_createCppConfig( + JNIEnv* env, jobject obj) { + jlong cppPaddleConfigPointer = reinterpret_cast(PD_ConfigCreate()); + return cppPaddleConfigPointer; +} + +JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_inference_Config_isCppConfigValid( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + bool flag = + PD_ConfigIsValid(reinterpret_cast(cppPaddleConfigPointer)); + return cpp_bool_to_jboolean(env, flag); +} + +// 2. not combined model settings + +JNIEXPORT void JNICALL +Java_com_baidu_paddle_inference_Config_setCppModel(JNIEnv* env, + jobject obj, + jlong cppPaddleConfigPointer, + jstring modelFile, + jstring paramsFile) { + PD_ConfigSetModel(reinterpret_cast(cppPaddleConfigPointer), + jstring_to_cpp_string(env, modelFile).c_str(), + jstring_to_cpp_string(env, paramsFile).c_str()); +} + +// 3. combined model settings + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_setCppModelDir( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jstring modelDir) { + PD_ConfigSetModelDir(reinterpret_cast(cppPaddleConfigPointer), + jstring_to_cpp_string(env, modelDir).c_str()); +} + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_setCppProgFile( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jstring progFile) { + PD_ConfigSetProgFile(reinterpret_cast(cppPaddleConfigPointer), + jstring_to_cpp_string(env, progFile).c_str()); +} + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_setCppParamsFile( + JNIEnv* env, + jobject obj, + jlong cppPaddleConfigPointer, + jstring paramsFile) { + PD_ConfigSetParamsFile(reinterpret_cast(cppPaddleConfigPointer), + jstring_to_cpp_string(env, paramsFile).c_str()); +} + +JNIEXPORT jstring JNICALL Java_com_baidu_paddle_inference_Config_modelDir( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + return cpp_string_to_jstring( + env, + PD_ConfigGetModelDir( + reinterpret_cast(cppPaddleConfigPointer))); +} + +JNIEXPORT jstring JNICALL Java_com_baidu_paddle_inference_Config_progFile( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + return cpp_string_to_jstring( + env, + PD_ConfigGetProgFile( + reinterpret_cast(cppPaddleConfigPointer))); +} + +JNIEXPORT jstring JNICALL Java_com_baidu_paddle_inference_Config_paramsFile( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + return cpp_string_to_jstring( + env, + PD_ConfigGetParamsFile( + reinterpret_cast(cppPaddleConfigPointer))); +} + +// 4. cpu settings + +JNIEXPORT void JNICALL +Java_com_baidu_paddle_inference_Config_setCpuMathLibraryNumThreads( + JNIEnv* env, + jobject obj, + jlong cppPaddleConfigPointer, + jint mathThreadsNum) { + int math_threads_num = reinterpret_cast(mathThreadsNum); + PD_ConfigSetCpuMathLibraryNumThreads( + reinterpret_cast(cppPaddleConfigPointer), math_threads_num); +} + +JNIEXPORT jint JNICALL +Java_com_baidu_paddle_inference_Config_cpuMathLibraryNumThreads( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + jint mathThreadsNum = + reinterpret_cast(PD_ConfigGetCpuMathLibraryNumThreads( + reinterpret_cast(cppPaddleConfigPointer))); + return mathThreadsNum; +} + +// 5. MKLDNN settings + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_enableMKLDNN( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + PD_ConfigEnableMKLDNN(reinterpret_cast(cppPaddleConfigPointer)); +} + +JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_inference_Config_mkldnnEnabled( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + bool flag = PD_ConfigMkldnnEnabled( + reinterpret_cast(cppPaddleConfigPointer)); + return cpp_bool_to_jboolean(env, flag); +} + +JNIEXPORT void JNICALL +Java_com_baidu_paddle_inference_Config_enableMkldnnBfloat16( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + PD_ConfigEnableMkldnnBfloat16( + reinterpret_cast(cppPaddleConfigPointer)); +} + +JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_inference_Config_mkldnnBfloat16Enabled( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + bool flag = PD_ConfigMkldnnBfloat16Enabled( + reinterpret_cast(cppPaddleConfigPointer)); + return cpp_bool_to_jboolean(env, flag); +} + +// 6. gpu setting + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_enableUseGpu( + JNIEnv* env, + jobject obj, + jlong cppPaddleConfigPointer, + jlong memorySize, + jint deviceId) { + PD_ConfigEnableUseGpu(reinterpret_cast(cppPaddleConfigPointer), + (uint64_t)memorySize, + (int32_t)deviceId, + 0); +} + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_disableGpu( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + PD_ConfigDisableGpu(reinterpret_cast(cppPaddleConfigPointer)); +} + +JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_inference_Config_useGpu( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + bool flag = + PD_ConfigUseGpu(reinterpret_cast(cppPaddleConfigPointer)); + return cpp_bool_to_jboolean(env, flag); +} + +JNIEXPORT jint JNICALL Java_com_baidu_paddle_inference_Config_gpuDeviceId( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + int device_id = PD_ConfigGpuDeviceId( + reinterpret_cast(cppPaddleConfigPointer)); + return reinterpret_cast(device_id); +} + +JNIEXPORT jint JNICALL +Java_com_baidu_paddle_inference_Config_memoryPoolInitSizeMb( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + int memory_pool_init_size_mb = PD_ConfigMemoryPoolInitSizeMb( + reinterpret_cast(cppPaddleConfigPointer)); + return reinterpret_cast(memory_pool_init_size_mb); +} + +JNIEXPORT jfloat JNICALL +Java_com_baidu_paddle_inference_Config_fractionOfGpuMemoryForPool( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + float fraction_of_gpuMemory_for_pool = PD_ConfigFractionOfGpuMemoryForPool( + reinterpret_cast(cppPaddleConfigPointer)); + return (jfloat)fraction_of_gpuMemory_for_pool; +} + +// 7. TensorRT To Do + +// 8. optim setting + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_switchIrOptim( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jboolean flag) { + PD_ConfigSwitchIrOptim(reinterpret_cast(cppPaddleConfigPointer), + jboolean_to_cpp_bool(env, flag)); +} + +JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_inference_Config_irOptim( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + bool flag = + PD_ConfigIrOptim(reinterpret_cast(cppPaddleConfigPointer)); + return cpp_bool_to_jboolean(env, flag); +} + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_switchIrDebug( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jboolean flag) { + PD_ConfigSwitchIrDebug(reinterpret_cast(cppPaddleConfigPointer), + jboolean_to_cpp_bool(env, flag)); +} + +// 9. enable memory optimization + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_enableMemoryOptim( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer, jboolean flag) { + PD_ConfigEnableMemoryOptim( + reinterpret_cast(cppPaddleConfigPointer), + jboolean_to_cpp_bool(env, flag)); +} + +JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_inference_Config_memoryOptimEnabled( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + bool flag = PD_ConfigMemoryOptimEnabled( + reinterpret_cast(cppPaddleConfigPointer)); + return cpp_bool_to_jboolean(env, flag); +} + +// 10. profile setting + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_enableProfile( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + PD_ConfigEnableProfile(reinterpret_cast(cppPaddleConfigPointer)); +} + +JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_inference_Config_profileEnabled( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + bool flag = PD_ConfigProfileEnabled( + reinterpret_cast(cppPaddleConfigPointer)); + return cpp_bool_to_jboolean(env, flag); +} + +// 11. log setting + +JNIEXPORT void JNICALL Java_com_baidu_paddle_inference_Config_disableGlogInfo( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + PD_ConfigDisableGlogInfo( + reinterpret_cast(cppPaddleConfigPointer)); +} + +// 12. view config configuration + +JNIEXPORT jstring JNICALL Java_com_baidu_paddle_inference_Config_summary( + JNIEnv* env, jobject obj, jlong cppPaddleConfigPointer) { + return cpp_string_to_jstring( + env, + PD_ConfigSummary(reinterpret_cast(cppPaddleConfigPointer))); +} diff --git a/paddle/fluid/inference/goapi/config.go b/paddle/fluid/inference/goapi/config.go index 508ac635295605c3c4b3b3f0c1f0437b90b3d22f..72c5ab078c83d596e6e535ddb4424c984a73aea6 100644 --- a/paddle/fluid/inference/goapi/config.go +++ b/paddle/fluid/inference/goapi/config.go @@ -157,7 +157,7 @@ func (config *Config) UseFcPadding() bool { /// \param deviceId the GPU card to use. /// func (config *Config) EnableUseGpu(memorySize uint64, deviceId int32) { - C.PD_ConfigEnableUseGpu(config.c, C.uint64_t(memorySize), C.int32_t(deviceId)) + C.PD_ConfigEnableUseGpu(config.c, C.uint64_t(memorySize), C.int32_t(deviceId), 0) } /// diff --git a/paddle/fluid/inference/tests/api/analyzer_capi_exp_gpu_tester.cc b/paddle/fluid/inference/tests/api/analyzer_capi_exp_gpu_tester.cc index e0b580fe70abfb1846b0201565123d0cc28865e6..7faf06567dd577c7773b3313c5d5d28c1f2b0170 100644 --- a/paddle/fluid/inference/tests/api/analyzer_capi_exp_gpu_tester.cc +++ b/paddle/fluid/inference/tests/api/analyzer_capi_exp_gpu_tester.cc @@ -19,6 +19,10 @@ limitations under the License. */ #include #include +#if defined(PADDLE_WITH_CUDA) +#include +#endif + #include "paddle/fluid/inference/capi_exp/pd_inference_api.h" #include "paddle/fluid/inference/tests/api/tester_helper.h" @@ -37,7 +41,7 @@ TEST(PD_Config, gpu_interface) { PD_ConfigSetModel(config, prog_file.c_str(), param_file.c_str()); PD_ConfigSetOptimCacheDir(config, opt_cache_dir.c_str()); - PD_ConfigEnableUseGpu(config, 100, 0); + PD_ConfigEnableUseGpu(config, 100, 0, 0); bool use_gpu = PD_ConfigUseGpu(config); EXPECT_TRUE(use_gpu); int init_size = PD_ConfigMemoryPoolInitSizeMb(config); @@ -84,6 +88,14 @@ TEST(PD_Config, gpu_interface) { bool thread_local_thread = PD_ConfigThreadLocalStreamEnabled(config); EXPECT_TRUE(thread_local_thread); +#if defined(PADDLE_WITH_CUDA) + { + cudaStream_t external_stream; + cudaStreamCreate(&external_stream); + PD_ConfigSetExecStream(config, external_stream); + } +#endif + PD_ConfigDisableGpu(config); PD_ConfigDestroy(config); } @@ -104,7 +116,7 @@ TEST(PD_Config, use_gpu) { const char* model_dir_ = PD_ConfigGetModelDir(config); LOG(INFO) << model_dir_; - PD_ConfigEnableUseGpu(config, 100, 0); + PD_ConfigEnableUseGpu(config, 100, 0, 0); bool use_gpu = PD_ConfigUseGpu(config); EXPECT_TRUE(use_gpu); int device_id = PD_ConfigGpuDeviceId(config); @@ -142,7 +154,7 @@ TEST(PD_Config, use_gpu) { TEST(PD_Config, trt_int8) { std::string model_dir = FLAGS_infer_model + "/mobilenet"; PD_Config* config = PD_ConfigCreate(); - PD_ConfigEnableUseGpu(config, 100, 0); + PD_ConfigEnableUseGpu(config, 100, 0, 0); PD_ConfigEnableTensorRtEngine( config, 1 << 20, 1, 3, PD_PRECISION_INT8, FALSE, TRUE); bool trt_enable = PD_ConfigTensorRtEngineEnabled(config); @@ -153,7 +165,7 @@ TEST(PD_Config, trt_int8) { TEST(PD_Config, trt_fp16) { std::string model_dir = FLAGS_infer_model + "/mobilenet"; PD_Config* config = PD_ConfigCreate(); - PD_ConfigEnableUseGpu(config, 100, 0); + PD_ConfigEnableUseGpu(config, 100, 0, 0); PD_ConfigEnableTensorRtEngine( config, 1 << 20, 1, 3, PD_PRECISION_HALF, FALSE, FALSE); bool trt_enable = PD_ConfigTensorRtEngineEnabled(config); diff --git a/paddle/fluid/inference/tests/api/analyzer_capi_exp_int_tester.cc b/paddle/fluid/inference/tests/api/analyzer_capi_exp_int_tester.cc index dfcf5fda4763eb0ff4457552465e5946597e20a7..b83e5d68cca91bec3eedf070396701a854d032b7 100644 --- a/paddle/fluid/inference/tests/api/analyzer_capi_exp_int_tester.cc +++ b/paddle/fluid/inference/tests/api/analyzer_capi_exp_int_tester.cc @@ -37,6 +37,9 @@ void predictor_run() { PD_OneDimArrayCstr* input_names = PD_PredictorGetInputNames(predictor); LOG(INFO) << "The inputs' size is: " << input_names->size; EXPECT_EQ(input_names->size, 2u); + PD_IOInfos* in_infos = PD_PredictorGetInputInfos(predictor); + EXPECT_EQ(in_infos->size, 2u); + PD_IOInfos* out_infos = PD_PredictorGetOutputInfos(predictor); int32_t shape_0[4] = {1, 3, 224, 224}; float data_0[1 * 3 * 224 * 224] = {0}; @@ -79,6 +82,8 @@ void predictor_run() { PD_TensorDestroy(input_1); PD_TensorDestroy(input_0); PD_OneDimArrayCstrDestroy(input_names); + PD_IOInfosDestroy(in_infos); + PD_IOInfosDestroy(out_infos); PD_PredictorDestroy(predictor); } diff --git a/paddle/fluid/inference/tests/api/analyzer_capi_exp_pd_config_tester.cc b/paddle/fluid/inference/tests/api/analyzer_capi_exp_pd_config_tester.cc index 804ac21ea406c8b0755a875ce7be012394d7acf9..6bce6b0d9df48712c0b33b51b4c1e50295c6df83 100644 --- a/paddle/fluid/inference/tests/api/analyzer_capi_exp_pd_config_tester.cc +++ b/paddle/fluid/inference/tests/api/analyzer_capi_exp_pd_config_tester.cc @@ -85,6 +85,10 @@ TEST(PD_Config, interface) { PD_ConfigEnableMkldnnBfloat16(config); PD_ConfigSetBfloat16Op(config, 1, &ops_name); + + PD_ConfigEnableMkldnnInt8(config); + bool mkldnn_int8_enabled = PD_ConfigMkldnnInt8Enabled(config); + EXPECT_TRUE(mkldnn_int8_enabled); #endif PD_ConfigEnableONNXRuntime(config);