|
|
|
@ -16,6 +16,12 @@
|
|
|
|
|
/*! \file paddle_api.h
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*! \mainpage Paddle Inference APIs
|
|
|
|
|
* \section intro_sec Introduction
|
|
|
|
|
* The Paddle inference library aims to offer an high performance inference SDK
|
|
|
|
|
* for Paddle users.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <cassert>
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <string>
|
|
|
|
@ -34,26 +40,49 @@ enum PaddleDType {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*\brief Memory menager for PaddleTensor.
|
|
|
|
|
* \brief Memory manager for `PaddleTensor`.
|
|
|
|
|
*
|
|
|
|
|
*The PaddleBuf holds a buffer for data input or output. The memory can be
|
|
|
|
|
*allocated by user or by PaddleBuf itself, but in any case, the PaddleBuf
|
|
|
|
|
*should be reused for better performance.
|
|
|
|
|
* The PaddleBuf holds a buffer for data input or output. The memory can be
|
|
|
|
|
* allocated by user or by PaddleBuf itself, but in any case, the PaddleBuf
|
|
|
|
|
* should be reused for better performance.
|
|
|
|
|
*
|
|
|
|
|
*For user allocated memory, the following API can be used:
|
|
|
|
|
*- PaddleBuf(void* data, size_t length) to set an external memory by
|
|
|
|
|
*specifying
|
|
|
|
|
* the memory address and length.
|
|
|
|
|
*- Reset(void* data, size_t length) to reset the PaddleBuf with an external
|
|
|
|
|
* For user allocated memory, the following API can be used:
|
|
|
|
|
* - PaddleBuf(void* data, size_t length) to set an external memory by
|
|
|
|
|
* specifying the memory address and length.
|
|
|
|
|
* - Reset(void* data, size_t length) to reset the PaddleBuf with an external
|
|
|
|
|
*memory.
|
|
|
|
|
*ATTENTION, for user allocated memory, deallocation should be done by users
|
|
|
|
|
* ATTENTION, for user allocated memory, deallocation should be done by users
|
|
|
|
|
*externally after the program finished. The PaddleBuf won't do any allocation
|
|
|
|
|
*or deallocation.
|
|
|
|
|
*
|
|
|
|
|
*To have the PaddleBuf allocate and manage the memory:
|
|
|
|
|
*- PaddleBuf(size_t length) will allocate a memory of size `length`.
|
|
|
|
|
*- Resize(size_t length) resize the memory to no less than `length`, ATTENTION
|
|
|
|
|
* To have the PaddleBuf allocate and manage the memory:
|
|
|
|
|
* - PaddleBuf(size_t length) will allocate a memory of size `length`.
|
|
|
|
|
* - Resize(size_t length) resize the memory to no less than `length`, ATTENTION
|
|
|
|
|
* if the allocated memory is larger than `length`, nothing will done.
|
|
|
|
|
*
|
|
|
|
|
* Usage:
|
|
|
|
|
*
|
|
|
|
|
* Let PaddleBuf manage the memory internally.
|
|
|
|
|
* \code{cpp}
|
|
|
|
|
* const int num_elements = 128;
|
|
|
|
|
* PaddleBuf buf(num_elements * sizeof(float));
|
|
|
|
|
* \endcode
|
|
|
|
|
*
|
|
|
|
|
* Or
|
|
|
|
|
* \code{cpp}
|
|
|
|
|
* PaddleBuf buf;
|
|
|
|
|
* buf.Resize(num_elements * sizeof(float));
|
|
|
|
|
* \endcode
|
|
|
|
|
* Works the exactly the same.
|
|
|
|
|
*
|
|
|
|
|
* One can also make the `PaddleBuf` use the external memory.
|
|
|
|
|
* \code{cpp}
|
|
|
|
|
* PaddleBuf buf;
|
|
|
|
|
* void* external_memory = new float[num_elements];
|
|
|
|
|
* buf.Reset(external_memory, num_elements*sizeof(float));
|
|
|
|
|
* ...
|
|
|
|
|
* delete[] external_memory; // manage the memory lifetime outside.
|
|
|
|
|
* \endcode
|
|
|
|
|
*/
|
|
|
|
|
class PaddleBuf {
|
|
|
|
|
public:
|
|
|
|
@ -78,7 +107,7 @@ class PaddleBuf {
|
|
|
|
|
/** Tell whether the buffer is empty.
|
|
|
|
|
*/
|
|
|
|
|
bool empty() const { return length_ == 0; }
|
|
|
|
|
/** Get the memory address.
|
|
|
|
|
/** Get the data's memory address.
|
|
|
|
|
*/
|
|
|
|
|
void* data() const { return data_; }
|
|
|
|
|
/** Get the memory length.
|
|
|
|
@ -110,7 +139,8 @@ struct PaddleTensor {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class PaddlePlace { kUNK = -1, kCPU, kGPU };
|
|
|
|
|
/** Tensor without copy, currently only supports AnalysisPredictor.
|
|
|
|
|
|
|
|
|
|
/** Tensor without copy, currently only supports `AnalysisPredictor`.
|
|
|
|
|
*/
|
|
|
|
|
class ZeroCopyTensor {
|
|
|
|
|
public:
|
|
|
|
@ -269,9 +299,11 @@ struct NativeConfig : public PaddlePredictor::Config {
|
|
|
|
|
*
|
|
|
|
|
* Usage:
|
|
|
|
|
*
|
|
|
|
|
* \code{.cpp}
|
|
|
|
|
* NativeConfig config;
|
|
|
|
|
* ... // change the configs.
|
|
|
|
|
* auto native_predictor = CreatePaddlePredictor(config);
|
|
|
|
|
* \endcode
|
|
|
|
|
*
|
|
|
|
|
* FOR EXTENSION DEVELOPER:
|
|
|
|
|
* Different predictors are designated by config type. Similar configs can be
|
|
|
|
|