我正在使用一个 cuda 程序,我设法将一个工作分配给一个流多处理器。例如,我有作品 A 和 B,我的 GPU 有 2 个 SM(SM0 和 SM1)。有没有办法将工作 A 精确分配给 SM0,将工作 B 分配给 SM1?
你能建议我一些方法吗?
谢谢你的帮助。
我正在使用一个 cuda 程序,我设法将一个工作分配给一个流多处理器。例如,我有作品 A 和 B,我的 GPU 有 2 个 SM(SM0 和 SM1)。有没有办法将工作 A 精确分配给 SM0,将工作 B 分配给 SM1?
你能建议我一些方法吗?
谢谢你的帮助。
一种方法是在(比如说)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>>>(...);
...
有关详细信息,请参阅此 NVIDIA 演示文稿