MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / DownloadData

Method DownloadData

src/opr/impl/nvof/NvOFCuda.cpp:217–247  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

215}
216
217void NvOFBufferCudaDevicePtr::DownloadData(void* pData, CUmemorytype mem_type) {
218 CUstream stream = m_NvOFAPI->GetCudaStream(getBufferUsage());
219 CUDA_DRVAPI_CALL(cuCtxPushCurrent(m_cuContext));
220 CUDA_MEMCPY2D cuCopy2d;
221 memset(&cuCopy2d, 0, sizeof(cuCopy2d));
222 cuCopy2d.WidthInBytes = getWidth() * getElementSize();
223
224 mgb_assert(
225 CU_MEMORYTYPE_HOST == mem_type || CU_MEMORYTYPE_DEVICE == mem_type,
226 "do not imp mem type!!!");
227 cuCopy2d.dstMemoryType = mem_type;
228 if (CU_MEMORYTYPE_HOST == mem_type) {
229 cuCopy2d.dstHost = pData;
230 } else if (CU_MEMORYTYPE_DEVICE == mem_type) {
231 cuCopy2d.dstDevice = (CUdeviceptr)pData;
232 }
233 cuCopy2d.dstPitch = cuCopy2d.WidthInBytes;
234 cuCopy2d.srcMemoryType = CU_MEMORYTYPE_DEVICE;
235 cuCopy2d.srcDevice = getCudaDevicePtr();
236 cuCopy2d.srcPitch = m_strideInfo.strideInfo[0].strideXInBytes;
237 cuCopy2d.Height = getHeight();
238 CUDA_DRVAPI_CALL(cuMemcpy2DAsync(&cuCopy2d, stream));
239 if (getBufferFormat() == NV_OF_BUFFER_FORMAT_NV12) {
240 cuCopy2d.Height = (getHeight() + 1) / 2;
241 cuCopy2d.dstHost = ((uint8_t*)pData + (cuCopy2d.dstPitch * cuCopy2d.Height));
242 cuCopy2d.srcY = m_strideInfo.strideInfo[0].strideYInBytes;
243 CUDA_DRVAPI_CALL(cuMemcpy2DAsync(&cuCopy2d, stream));
244 }
245 CUDA_DRVAPI_CALL(cuStreamSynchronize(stream));
246 CUDA_DRVAPI_CALL(cuCtxPopCurrent(&m_cuContext));
247}
248
249NvOFBufferCudaArray::NvOFBufferCudaArray(
250 std::shared_ptr<NvOFCudaAPI> ofAPI, const NV_OF_BUFFER_DESCRIPTOR& desc,

Callers 1

extract_flowMethod · 0.80

Calls 1

GetCudaStreamMethod · 0.80

Tested by

no test coverage detected