1

我正在尝试使用 TensorRT API 对多个图像进行推理。我的应用程序的伪代码片段是

context.enqueue(batchSize, buffers, stream, nullptr);

这里,

buffers[0] = batchSize * INPUT_C * INPUT_H * INPUT_W
        buffers[1] = batchSize * outputSize

如果我使用 batchSize=1 运行,我会得到正确的输出,但是如果使用 batchSize > 1 ,则对第一张图像以外的图像的检测是错误的。此外,在 batchSize=1 的情况下,推理时间为 7 毫秒,而在 batchSize=3 的情况下,推理时间约为 16 毫秒。所以解决这个问题会给我的应用程序带来很大的提升,就像一般情况一样。

有人可以建议我可以尝试解决此问题的所有方法。我以这种方式将内存分配给“缓冲区”

for (int b = 0; b < engine.getNbBindings(); b++)
    {
        DimsCHW dims = static_cast<DimsCHW&&>(engine.getBindingDimensions(b));
        size_t size = batchSize * dims.c() * dims.h() * dims.w() * sizeof(float);
        std::cout << "size of buff = " << size << std::endl;
        CudaCHECK(cudaMalloc(&buffers[b], size));
    }

它应该是一维向量还是二维向量?谢谢!

4

0 回答 0