我机子上现在有4块GPU
我输入的有四个摄像头的数据
我现在想每块GPU处理一个摄像头的数据
使用cudaSetDevice()函数,
我想请问下,申请现存的cudaMalloc是不是得在每个cudaSetDevice()函数之后进行?
如果是的话,我是应该只用一个线程,写成:
cudaSetDevice(0);
…
cudaSetDevice(1);
…
…
这样能否让他们同时工作?
还是应该开四个线程?
LZ您好:
1:您可以先cudaSetDevice()指定一个GPU,然后对当前指定的GPU操作,包括cudaMalloc(),包括cudaMemcpy(),以及invoke kerenl等。
2:您可以在一个host端线程里面实现这样的操作,以及也可以使用多个host端的线程。使用多个host端线程有助于逻辑的划分具备更大的灵活性。
大致如此,祝您编码顺利~
版主你好!
如果是单线程操作,由于是视频信息,我需要反复使用这些存储空间,我如果有个初始化函数init()
在该函数里面用cudaMalloc申请好空间时需要使用cudaSetDevice么?
LZ您好:
这个需要的,否则您所有的cudaMalloc()都在默认的设备上。
祝您编码顺利~
版主你好!
我看到samples里面的simpleMultiGPU例子里面,在分配显存的时候每个cudaSetDevice后面调用了cudaStreamCreate这个函数来创建流。这个是不是必须的呢?
LZ您好:
这个需要的,stream必须遵循先创建,再使用的原则。
以及如果您打算一个host端线程控制多个GPU的话,请您参照该例子的框架使用,可保正确。
祝您编码顺利~