MCPcopy Create free account
hub / github.com/NVIDIA-AI-IOT/CUDA-PointPillars / EngineImplement

Class EngineImplement

src/common/tensorrt.cpp:151–282  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149};
150
151class EngineImplement : public Engine {
152 public:
153 std::shared_ptr<__native_engine_context> context_;
154 std::unordered_map<std::string, int> binding_name_to_index_;
155
156 virtual ~EngineImplement() = default;
157
158 bool construct(const void *data, size_t size, const char *message_name) {
159 context_ = std::make_shared<__native_engine_context>();
160 if (!context_->construct(data, size, message_name)) {
161 return false;
162 }
163
164 setup();
165 return true;
166 }
167
168 bool load(const std::string &file) {
169 auto data = load_file(file);
170 if (data.empty()) {
171 printf("An empty file has been loaded. Please confirm your file path: %s\n", file.c_str());
172 return false;
173 }
174 return this->construct(data.data(), data.size(), file.c_str());
175 }
176
177 void setup() {
178 auto engine = this->context_->engine_;
179 int nbBindings = engine->getNbBindings();
180
181 binding_name_to_index_.clear();
182 for (int i = 0; i < nbBindings; ++i) {
183 const char *bindingName = engine->getBindingName(i);
184 binding_name_to_index_[bindingName] = i;
185 }
186 }
187
188 virtual int index(const std::string &name) override {
189 auto iter = binding_name_to_index_.find(name);
190 Assertf(iter != binding_name_to_index_.end(), "Can not found the binding name: %s", name.c_str());
191 return iter->second;
192 }
193
194 virtual bool forward(const std::vector<const void *> &bindings, void *stream, void *input_consum_event) override {
195 return this->context_->context_->enqueueV2((void **)bindings.data(), (cudaStream_t)stream, (cudaEvent_t *)input_consum_event);
196 }
197
198 virtual std::vector<int> run_dims(const std::string &name) override { return run_dims(index(name)); }
199
200 virtual std::vector<int> run_dims(int ibinding) override {
201 auto dim = this->context_->context_->getBindingDimensions(ibinding);
202 return std::vector<int>(dim.d, dim.d + dim.nbDims);
203 }
204
205 virtual std::vector<int> static_dims(const std::string &name) override { return static_dims(index(name)); }
206
207 virtual std::vector<int> static_dims(int ibinding) override {
208 auto dim = this->context_->engine_->getBindingDimensions(ibinding);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected