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

Method UploadData

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

Source from the content-addressed store, hash-verified

183}
184
185void NvOFBufferCudaDevicePtr::UploadData(const void* pData, CUmemorytype mem_type) {
186 CUstream stream = m_NvOFAPI->GetCudaStream(getBufferUsage());
187 CUDA_DRVAPI_CALL(cuCtxPushCurrent(m_cuContext));
188 CUDA_MEMCPY2D cuCopy2d;
189 memset(&cuCopy2d, 0, sizeof(cuCopy2d));
190 cuCopy2d.WidthInBytes = getWidth() * getElementSize();
191 mgb_assert(
192 CU_MEMORYTYPE_HOST == mem_type || CU_MEMORYTYPE_DEVICE == mem_type,
193 "do not imp mem type!!!");
194 cuCopy2d.srcMemoryType = mem_type;
195 if (CU_MEMORYTYPE_HOST == mem_type) {
196 cuCopy2d.srcHost = pData;
197 } else if (CU_MEMORYTYPE_DEVICE == mem_type) {
198 cuCopy2d.srcDevice = (CUdeviceptr)pData;
199 }
200 cuCopy2d.srcPitch = cuCopy2d.WidthInBytes;
201 cuCopy2d.dstMemoryType = CU_MEMORYTYPE_DEVICE;
202 cuCopy2d.dstDevice = getCudaDevicePtr();
203 cuCopy2d.dstPitch = m_strideInfo.strideInfo[0].strideXInBytes;
204 cuCopy2d.Height = getHeight();
205 CUDA_DRVAPI_CALL(cuMemcpy2DAsync(&cuCopy2d, stream));
206
207 if (getBufferFormat() == NV_OF_BUFFER_FORMAT_NV12) {
208 cuCopy2d.Height = (getHeight() + 1) / 2;
209 cuCopy2d.srcHost =
210 ((const uint8_t*)pData + (cuCopy2d.srcPitch * cuCopy2d.Height));
211 cuCopy2d.dstY = m_strideInfo.strideInfo[0].strideYInBytes;
212 CUDA_DRVAPI_CALL(cuMemcpy2DAsync(&cuCopy2d, stream));
213 }
214 CUDA_DRVAPI_CALL(cuCtxPopCurrent(&m_cuContext));
215}
216
217void NvOFBufferCudaDevicePtr::DownloadData(void* pData, CUmemorytype mem_type) {
218 CUstream stream = m_NvOFAPI->GetCudaStream(getBufferUsage());

Callers 1

extract_flowMethod · 0.80

Calls 1

GetCudaStreamMethod · 0.80

Tested by

no test coverage detected