我正在使用cuda程序,我设法将工作分配给一个Stream Multiprocessor。例如,我有工作A和B,我的GPU有2个SM(SM0和SM1)。有没有方法将工作A完全分配给SM0,将工作B分配给SM1?
你能告诉我一些方法吗?
感谢您的帮助。
答案 0 :(得分:1)
一种方法是在(比如说)kernelA中实现工作A,在kernelB中实现工作B,并在单独的流中作为1 * 1网格启动,因为在Fermi和Kepler GPU上这样的内核可以同时运行。 1 * 1网格启动的原因是,如果你有多个块,那么这些块可以在不同的SM上执行,在这种情况下,两个内核不能同时执行(即只有一个内核/ SM)
cudaStream_t stream1, stream2;
cudaStreamCreate ( &stream1 );
cudaStreamCreate ( &stream2 );
kernelA<<<1, 512, 0, stream1>>>(...);
kernelB<<<1, 512, 0, stream2>>>(...);
...
有关详细信息,请参阅this NVIDIA presentation