如何将在GPU上完成预处理的数据的显存地址赋值给zerocopytensor?
开放中
如何将在GPU上完成预处理的数据的显存地址赋值给zerocopytensor?
Created by: HustShepherd
如何将在GPU上完成预处理的数据的显存地址赋值给zerocopytensor?
版本、环境信息
1)PaddlePaddle版本:1.8.4 2)CPU仅做后处理,GPU完成前处理和推理,T4,cuda10.2 cudnn7 3)系统:centos 7.6.1810
问题描述:
- 自定义了gpu kernel在gpu上完成了前处理操作如crop resize等,前处理之后如何将数据所在的显存赋值给zerocopytensor?,大概的代码结构如下:
cudamemcpy() // 将图片从主存读取到显存
float *device_pointer = gpu_preprocess(); // 在显存上完成预处理
input_t = predictor -> GetInputTensor
input_t->Reshape({chan, height, width})
???????? // 如果前处理数据在主存上,按照教程是使用 input_t->copy_from_cpu(float * host_pointer)
this->predictor -> ZeroCopyRun();
代码片段中的????应该使用哪个api?我在paddle_api.h中找到另一个api mutable_data(),进行了如下尝试:
float *d_input = input_t->mutable_data(PaddlePlace::kGPU)
cudamemcpy(d_input, device_pointer)
但推理的结果不对。
这里确认gpu前处理的数据是没有问题的,进行了如下测试:将gpu预处理后的数据拷贝回主存之后,将主存上的预处理数据,调用copy_from_cpu(),推理结果正常。
请注册或登录再回复