1#ifndef TMVA_SOFIE_RMODEL
2#define TMVA_SOFIE_RMODEL
32 std::unordered_map<std::string, std::pair<std::vector<Dim>,
bool>>
fShapeTensors;
74 void AddOperator(std::unique_ptr<ROperator> op,
int order_execution = -1);
76 std::shared_ptr<void> data);
78 std::shared_ptr<void> data);
80 void AddAliasTensor(
const std::string & tensor_name,
const std::string & orig_tensor_name);
86 std::shared_ptr<void> data_ptr(
malloc(length *
sizeof(T)),
free);
87 std::memcpy(data_ptr.get(), (
void*) data, length *
sizeof(T));
92 void AddConstantTensor(
const std::string &
name,
const std::vector<size_t> & shape,
const std::vector<T> & data) {
93 size_t length = data.size();
94 std::shared_ptr<void> data_ptr(
malloc(length *
sizeof(T)),
free);
95 std::copy(data.begin(), data.end(), (T*) data_ptr.get());
100 template <
typename T>
101 void AddInitializedTensor(
const std::string & tensor_name,
const std::vector<std::size_t> & shape, T *raw_data)
105 std::memcpy(data.get(), raw_data,
size *
sizeof(T));
109 void AddShapeTensor(
const std::string &
name,
const std::vector<Dim> & shapeValues,
bool scalar =
false);
143 UpdateOutputTensorList(std::vector<std::string> curr_output_tensor, std::vector<std::string> modify_output_tensor);
145 std::shared_ptr<void> data);
151 void Initialize(
int batchSize = -1,
bool verbose =
false);
152 void Initialize(
const std::map<std::string,size_t> & inputParams,
bool verbose =
false);
154 void Generate(std::underlying_type_t<Options> options,
int batchSize = -1,
long pos = 0,
bool verbose =
false);
157 Generate(
static_cast<std::underlying_type_t<Options>
>(options), batchSize, pos, verbose);
253 return std::vector<T>(data, data+
size);
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
#define ClassDefNV(name, id)
RModel_Base()=default
Default constructor.
size_t GetOtherTensorSize() const
void AddShapeParam(const std::string &name, size_t def_value=0)
std::vector< size_t > GetTensorShape(const std::string &name) const
void PrintIntermediateTensors() const
std::vector< Dim > GetDimTensorShape(const std::string &name) const
std::unordered_map< std::string, DynamicTensorInfo > fDynamicTensorInfos
bool IsDynamicTensor(const std::string &name) const
const std::vector< std::string > & GetOutputTensorNames() const
void AddAliasTensor(const std::string &tensor_name, const std::string &orig_tensor_name)
void AddIntermediateTensor(std::string tensor_name, ETensorType type, std::vector< Dim > dim_shape)
void GenerateIntermediateTensorInfo()
size_t GetIntermediateTensorSize() const
std::string GenerateInferSignature(bool isdecl=true)
RModel(std::string function_name)
void GenerateOperatorDeclarations()
size_t fWeightsTensorSize
bool CheckIfTensorAlreadyExist(std::string tensor_name)
std::vector< std::unique_ptr< ROperator > > fOperators
void GenerateRequiredInputTensorInfo()
To emit the dimensions of the input tensors as a data member of a session, which is helpful when vali...
void OutputGenerated(std::string filename="", bool append=false)
std::unordered_map< std::string, std::string > fAliasTensors
void AddInputTensorInfo(std::string input_name, ETensorType type, std::vector< Dim > shape)
std::unordered_map< std::string, TensorInfo > fIntermediateTensorInfos
void SetOptimizationLevel(OptimizationLevel optim_level)
void AddOutputTensorNameList(std::vector< std::string > output_tensor_names)
std::unordered_map< std::string, TensorInfo > fReadyInputTensorInfos
void AddConstantTensor(std::string tensor_name, ETensorType type, std::vector< std::size_t > shape, std::shared_ptr< void > data)
void AddDynamicTensor(std::string tensor_name, ETensorType type, std::vector< Dim > shape)
std::vector< std::string > fDimShapeNames
void AddInitializedTensor(std::string tensor_name, ETensorType type, std::vector< std::size_t > shape, std::shared_ptr< void > data)
std::unordered_map< std::string_view, size_t > fIntermediateTensorFrequencyLookup
! lookup table for intermediate tensor frequency (transient)
void AddInputTensorName(std::string name)
std::vector< std::string > fOutputTensorNames
void PrintRequiredInputTensors() const
void GenerateSessionCode()
bool IsDimInputTensor(const std::string &name) const
void GenerateDynamicTensorInfo()
void PrintDynamicTensors() const
bool IsShapeTensor(const std::string &name) const
check if a tensor is a shape tensor
size_t GetConstantTensorSize() const
bool IsInitializedTensor(const std::string &name) const
bool IsAliasTensor(const std::string &name) const
check if a tensor is a alias tensor
void AddInitializedTensor(const std::string &tensor_name, const std::vector< std::size_t > &shape, T *raw_data)
size_t fConstantTensorSize
void CheckAndFlushIntermediateMemory(std::span< const std::string_view > op_output_tensors, const size_t &op_idx)
void AddOperator(std::unique_ptr< ROperator > op, int order_execution=-1)
void PrintOutputTensors() const
RModel()=default
Default constructor.
void HeadInitializedTensors(std::string name, int n_print=50)
bool IsConstantTensor(const std::string &name) const
void Initialize(int batchSize=-1, bool verbose=false)
size_t GetWeightsTensorSize() const
long WriteInitializedTensorsToFile(std::string filename="")
OptimizationLevel fOptimizationLevel
void Generate(std::underlying_type_t< Options > options, int batchSize=-1, long pos=0, bool verbose=false)
void PrintSummary() const
std::vector< std::string > CollectTensorMemberNames(const std::string &input)
Collects all identifiers starting with "tensor_" in the input code, provided that the occurrence is n...
std::vector< Dim > GetDynamicTensorShape(const std::string &name) const
void PrintInitializedTensors() const
void AddConstantTensor(const std::string &name, const std::vector< size_t > &shape, const std::vector< T > &data)
std::unordered_map< std::string, InputTensorInfo > fInputTensorInfos
std::shared_ptr< void > GetInitializedTensorData(std::string tensor_name)
MemoryPoolInfo fIntermediateMemoryInfo
! intermediate memory info (transient)
void GenerateIntermediateMemoryPool()
void ReadInitializedTensorsFromFile(long)
std::string AllocateIntermediateMemory(std::span< const std::string_view > op_output_tensors)
std::unordered_map< std::string, std::pair< std::vector< Dim >, bool > > fShapeTensors
std::vector< T > GetTensorData(const std::string &name)
void SetFilename(std::string filename)
void InitializeSubGraph(std::shared_ptr< RModel > graph)
std::unordered_map< std::string, std::string > fShapeParams
void SetNotWritableInitializedTensor(const std::string &tensor_name)
ETensorType GetTensorType(std::string name) const
void GenerateInitializedTensorInfo()
std::vector< std::string > fInputTensorNames
const std::vector< std::string > & GetInputTensorNames() const
std::unordered_map< std::string, InitializedTensor > fInitializedTensors
void UpdateInitializedTensor(std::string tensor_name, ETensorType type, std::vector< std::size_t > shape, std::shared_ptr< void > data)
const std::vector< Dim > & GetShapeTensorValues(const std::string &tensor_name) const
std::vector< std::shared_ptr< RModel > > fSubGraphs
! sub-graph models (transient)
bool IsReadyInputTensor(const std::string &name) const
void UpdateOutputTensorList(std::vector< std::string > curr_output_tensor, std::vector< std::string > modify_output_tensor)
const std::vector< std::string > & GetDimShapeNames() const
RModel(std::string name, std::string parsedtime)
void AddShapeTensor(const std::string &name, const std::vector< Dim > &shapeValues, bool scalar=false)
void AddConstantTensor(const std::string &name, const std::vector< size_t > &shape, const T *data)
void Generate(Options options=Options::kDefault, int batchSize=-1, int pos=0, bool verbose=false)
bool IsInputTensorShapeParam(std::string const &name) const
Check if a given parameter is used for the shape of an input tensor.
std::size_t ConvertShapeToLength(const std::vector< size_t > &shape)
ETensorType GetTemplatedType(T)
create variable transformations