【发布时间】:2019-08-22 12:34:01
【问题描述】:
我正在 NVIDIA Jetson Nano 上开发一个程序,该程序使用 opencv 从网络摄像头/视频中捕获帧。之后,它在 gpu 上对帧进行一些计算。这是为每一帧完成的。为了减少运行时间,我使用映射内存来避免主机和设备之间的显式复制。问题是我仍然必须将帧复制到共享指针地址,即 HOST 到 HOST 复制,这需要大量时间。我怎样才能减少/减少这个时间,或者如果重新表述,我怎样才能每次有效地更新共享内存位置的帧数据?
目前,我使用np.copyto将框架复制到共享地址
frame = cap.read()
sharedadd = cuda.pagelocked_empty((1,3,500,500), dtype=np.float32),mem_flags=cuda.host_alloc_flags.DEVICEMAP) # allocate mapped memory
np.copyto(sharedadd, frame.ravel()) # takes quite some time
我尝试使用ctype 指针取消引用共享内存位置并为其分配新值。但是,它也希望帧是一个 ctype 指针。
frame = cap.read()
sharedadd = cuda.pagelocked_empty((1,3,500,500),dtype=np.float32),mem_flags=cuda.host_alloc_flags.DEVICEMAP) # allocate mapped memory
c_float_p = ctypes.POINTER(ctypes.c_float)
sharedptr = sharedadd.ctypes.data_as(c_float_p)
ctypes.cast(ctypes.addressof(sharedptr), ?).contents # second argument is expected to be a ctype pointer to frame
【问题讨论】:
标签: numpy optimization ctypes pycuda