ONE - On-device Neural Engine
Loading...
Searching...
No Matches
onert::backend::trix::ops::BulkPipelineModel Class Reference

#include <BulkPipelineModel.h>

Public Member Functions

 BulkPipelineModel (const std::string &model_path, int device_id)
 
 ~BulkPipelineModel ()
 
 BulkPipelineModel (const BulkPipelineModel &)=delete
 
BulkPipelineModeloperator= (const BulkPipelineModel &)=delete
 
bool initialize ()
 
bool prepare ()
 
void release ()
 
bool isPrepared () const
 
void run (const std::vector< const IPortableTensor * > &inputs, std::vector< IPortableTensor * > &outputs)
 
void waitForBufferReady ()
 
void markBufferReady ()
 
const npubin_meta * metadata () const
 
uint64_t programSize () const
 
uint64_t weightSize () const
 
uint32_t modelId () const
 
npudev_h device () const
 
const std::string & modelPath () const
 

Detailed Description

Definition at line 41 of file BulkPipelineModel.h.

Constructor & Destructor Documentation

◆ BulkPipelineModel() [1/2]

onert::backend::trix::ops::BulkPipelineModel::BulkPipelineModel ( const std::string &  model_path,
int  device_id 
)

Definition at line 32 of file BulkPipelineModel.cc.

33 : _model_path(model_path), _device_id(device_id)
34{
35 // DO NOTHING
36}

◆ ~BulkPipelineModel()

onert::backend::trix::ops::BulkPipelineModel::~BulkPipelineModel ( )

Definition at line 38 of file BulkPipelineModel.cc.

References release().

◆ BulkPipelineModel() [2/2]

onert::backend::trix::ops::BulkPipelineModel::BulkPipelineModel ( const BulkPipelineModel )
delete

Member Function Documentation

◆ device()

npudev_h onert::backend::trix::ops::BulkPipelineModel::device ( ) const
inline

Definition at line 66 of file BulkPipelineModel.h.

66{ return _dev; }

◆ initialize()

bool onert::backend::trix::ops::BulkPipelineModel::initialize ( )

Definition at line 40 of file BulkPipelineModel.cc.

41{
42 if (_initialized.load())
43 {
44 return true;
45 }
46
47 if (!loadMetadata())
48 {
49 return false;
50 }
51
52 _initialized = true;
53 return true;
54}

◆ isPrepared()

bool onert::backend::trix::ops::BulkPipelineModel::isPrepared ( ) const
inline

Definition at line 54 of file BulkPipelineModel.h.

54{ return _prepared; }

◆ markBufferReady()

void onert::backend::trix::ops::BulkPipelineModel::markBufferReady ( )

Definition at line 157 of file BulkPipelineModel.cc.

158{
159 {
160 std::lock_guard<std::mutex> lock(_buffer_mutex);
161 _buffer_ready = true;
162 }
163 _buffer_cv.notify_all();
164}

Referenced by prepare().

◆ metadata()

const npubin_meta * onert::backend::trix::ops::BulkPipelineModel::metadata ( ) const
inline

Definition at line 62 of file BulkPipelineModel.h.

62{ return _meta.get(); }

◆ modelId()

uint32_t onert::backend::trix::ops::BulkPipelineModel::modelId ( ) const
inline

Definition at line 65 of file BulkPipelineModel.h.

65{ return _model_id; }

◆ modelPath()

const std::string & onert::backend::trix::ops::BulkPipelineModel::modelPath ( ) const
inline

Definition at line 67 of file BulkPipelineModel.h.

67{ return _model_path; }

◆ operator=()

BulkPipelineModel & onert::backend::trix::ops::BulkPipelineModel::operator= ( const BulkPipelineModel )
delete

◆ prepare()

bool onert::backend::trix::ops::BulkPipelineModel::prepare ( )

Definition at line 56 of file BulkPipelineModel.cc.

57{
58 if (_prepared.load())
59 {
60 return true;
61 }
62
63 try
64 {
65 openDevice();
66 allocateBuffers();
67 fillBuffers();
69 registerModel();
70
71 _prepared = true;
72 return true;
73 }
74 catch (const std::exception &e)
75 {
76 std::cerr << "Failed to prepare model " << _model_path << ": " << e.what() << std::endl;
77 release();
78 return false;
79 }
80}

References markBufferReady(), and release().

◆ programSize()

uint64_t onert::backend::trix::ops::BulkPipelineModel::programSize ( ) const
inline

Definition at line 63 of file BulkPipelineModel.h.

63{ return _meta->program_size; }

◆ release()

void onert::backend::trix::ops::BulkPipelineModel::release ( )

Definition at line 82 of file BulkPipelineModel.cc.

83{
84 if (!_prepared.load())
85 {
86 return;
87 }
88
89 unregisterModel();
90 closeDevice();
91
92 if (_fp)
93 {
94 fclose(_fp);
95 _fp = nullptr;
96 }
97
98 _program_buffer.reset();
99 _weight_buffer.reset();
100 _meta.reset();
101 _meta_size = 0;
102 _model_id = 0;
103
104 _prepared = false;
105}

Referenced by prepare(), and ~BulkPipelineModel().

◆ run()

void onert::backend::trix::ops::BulkPipelineModel::run ( const std::vector< const IPortableTensor * > &  inputs,
std::vector< IPortableTensor * > &  outputs 
)

Definition at line 107 of file BulkPipelineModel.cc.

109{
110 if (!_prepared.load())
111 {
112 throw std::runtime_error("Model is not prepared: " + _model_path);
113 }
114
115 if (!_meta)
116 {
117 throw std::runtime_error("Model metadata is not loaded: " + _model_path);
118 }
119
120 // Prepare input buffers
121 input_buffers input;
122 input.num_buffers = _meta->input_seg_num;
123 for (uint32_t i = 0; i < input.num_buffers; i++)
124 {
125 uint32_t idx = _meta->input_seg_idx[i];
126 input.bufs[i].addr = inputs[i]->buffer();
127 input.bufs[i].type = BUFFER_MAPPED;
128 input.bufs[i].size = _meta->segment_size[idx];
129 }
130
131 // Prepare output buffers
132 output_buffers output;
133 output.num_buffers = _meta->output_seg_num;
134 for (uint32_t i = 0; i < output.num_buffers; i++)
135 {
136 uint32_t idx = _meta->output_seg_idx[i];
137 output.bufs[i].addr = outputs[i]->buffer();
138 output.bufs[i].type = BUFFER_MAPPED;
139 output.bufs[i].size = _meta->segment_size[idx];
140 }
141
142 // Execute the model
143 int ret = runNPU_model(_dev, _model_id, NPU_INFER_BLOCKING, &input, &output, nullptr, nullptr);
144 if (ret < 0)
145 {
146 throw std::runtime_error("runNPU_model() failed for " + _model_path +
147 ", ret: " + std::to_string(ret));
148 }
149}

◆ waitForBufferReady()

void onert::backend::trix::ops::BulkPipelineModel::waitForBufferReady ( )

Definition at line 151 of file BulkPipelineModel.cc.

152{
153 std::unique_lock<std::mutex> lock(_buffer_mutex);
154 _buffer_cv.wait(lock, [this] { return _buffer_ready.load(); });
155}

◆ weightSize()

uint64_t onert::backend::trix::ops::BulkPipelineModel::weightSize ( ) const
inline

Definition at line 64 of file BulkPipelineModel.h.

64{ return _meta->weight_size; }

The documentation for this class was generated from the following files: