Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CUDA OpenCV多处理-python_Python_Opencv_Multiprocessing - Fatal编程技术网

CUDA OpenCV多处理-python

CUDA OpenCV多处理-python,python,opencv,multiprocessing,Python,Opencv,Multiprocessing,我正在尝试使用多个GPU运行CUDA ORB关键点检测。工作原理是在可用的GPU设备之间分割视频帧列表(将其加载到GPU内存中)。然而,当我通过threading使用多个线程运行它时,我观察到每个GPU的速度都变慢了——我认为这是由多个GPU和所有线程都在其中运行的单个进程之间的通信引起的。因此,我尝试使用多处理而不是线程来利用多个CPU内核(用不同的GPU对不同的内核进行签名),但它给了我一个错误。下面我附上我的测试代码: 导入cv2 从线程导入线程 从多处理导入进程 从TQM导入TQM de

我正在尝试使用多个GPU运行CUDA ORB关键点检测。工作原理是在可用的GPU设备之间分割视频帧列表(将其加载到GPU内存中)。然而,当我通过
threading
使用多个线程运行它时,我观察到每个GPU的速度都变慢了——我认为这是由多个GPU和所有线程都在其中运行的单个进程之间的通信引起的。因此,我尝试使用
多处理
而不是
线程
来利用多个CPU内核(用不同的GPU对不同的内核进行签名),但它给了我一个错误。下面我附上我的测试代码:

导入cv2
从线程导入线程
从多处理导入进程
从TQM导入TQM
def cuda_测试(gpu_id、idx_开始、idx_结束、帧):
cv2.cuda.setDevice(gpu\U id)
cuda_orb=cv2.cuda.orb_create()
对于tqdm中的i(范围(idx_开始,idx_结束)):
gray\u frame=cv2.cuda.cvt颜色(frames[i],cv2.COLOR\u bgr2灰色)
kp,ds=cuda\u orb.detectAndComputeAsync(灰色帧,无)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
img=cv2.imread('1.png')
帧=[cv2.cuda_GpuMat(img)用于范围(1500)内的x]
打印('\n多线程部分:')
t1=线程(目标=cuda_测试,args=(0,0,len(帧),帧))
t1.start()
t1.join()
打印('\n多处理部件:')
p1=进程(目标=cuda_测试,args=(0,0,len(帧),帧))
p1.开始()
p1.join()
上面的示例代码仅在单线程/进程上运行,因为目前我无法访问具有多个GPU的机器。当
线程
部件成功运行时,
多处理
不起作用,并给mi带来以下错误:

多线程部分:
100%|██████████████████████████████████████| 1500/1500[00:08遵循多处理。例如,如果uuuu name_uuuu=='uuuu main_uuu':
,则必须使用
。。。