Простой пример API пользовательского уровня (TensorRT 2.1)?

я использую TensorRT 2.1 и хотите реализовать простой пользовательский слой. (Цель состоит в том, чтобы бежать Single Shot Detector с помощью TensorRT на системе вложения.)

На практике я хотел сделать Inc слой (просто добавив 1.0 к значениям входного тензора и сохранив размерность одинаковой).

Я реализую Inc класс, следующий за class Reshape : public Iplugin в sampleFasterRNN.cpp пример. Я сохранил почти все, кроме getOutputDimensions() чтобы сохранить то же измерение. (это выглядит хорошо.)

Где я должен реализовать часть «добавление 1.0»? Я думаю, это должно быть в «enqueue ()». Итак, я попробовал

int enqueue(int batchSize, const void*const *inputs, void** outputs, void*, cudaStream_t stream) override
{
# the below is from the Reshape class. seems to copy from input to output
CHECK(cudaMemcpyAsync(outputs[0], inputs[0], mCopySize * batchSize, cudaMemcpyDeviceToDevice, stream));
# add 1.0 to first ten values
float* foutputs = (float*) outputs[0];
int i; for (i = 0; i < 10; i++) foutputs[i] += 1.0;
return 0;
}

Однако эта часть приводит к ошибке «ошибка сегментации».

Мои вопросы:

  1. Где и как я могу реализовать некоторые вычисления между входом и выходом?
  2. Кто-нибудь может привести простой пример?

0

Решение

Обратитесь к файлу samples/samplePlugin/samplePlugin.cpp и посмотрите на FCPlugin учебный класс. Ваше фактическое вычисление должно идти в enqueue метод. Возможно, вам придется написать ядро ​​CUDA, которое выполняет приращение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]