in lab1/deepstream_plugin/neodlr_plugin.cc [78:115]
int NeoDLRLayer::enqueue(int batchSize, const void* const* inputs, void** outputs, void* workspace,
cudaStream_t stream) noexcept {
// Set inputs.
for (size_t i = 0; i < input_names_.size(); ++i) {
DLTensor dltensor;
dltensor.device = {kDLCUDA, 0};
dltensor.ndim = input_shapes_[i].size();
dltensor.shape = input_shapes_[i].data();
dltensor.strides = 0;
dltensor.byte_offset = 0;
dltensor.dtype = {kDLFloat, 32, 1}; // todo allow other types
dltensor.data = const_cast<void*>(inputs[i]);
if (SetDLRInputTensor(&model_, input_names_[i].c_str(), &dltensor) != 0) {
std::cout << DLRGetLastError() << std::endl;
return -1;
}
}
// Run.
if (RunDLRModel(&model_) != 0) {
std::cout << DLRGetLastError() << std::endl;
return -1;
}
// Get outputs.
for (size_t i = 0; i < output_shapes_.size(); ++i) {
DLTensor dltensor;
dltensor.device = {kDLCUDA, 0};
dltensor.ndim = output_shapes_[i].size();
dltensor.shape = output_shapes_[i].data();
dltensor.strides = 0;
dltensor.byte_offset = 0;
dltensor.dtype = {kDLFloat, 32, 1}; // todo allow other types
dltensor.data = outputs[i];
if (GetDLROutputTensor(&model_, i, &dltensor) != 0) {
std::cout << DLRGetLastError() << std::endl;
}
}
return 0;
}