Cuda 使用具有更多流式多处理器的GPU卡

Cuda 使用具有更多流式多处理器的GPU卡,cuda,gpu,Cuda,Gpu,目前我正在使用一个GeForce GPU卡和2个SM。我在GPU卡上运行了一些实验,发现代码的执行速度比类似的CPU实现快5倍。我很好奇,如果我在功能更强大的GPU卡(如特斯拉GPU)中运行完全相同的代码,与使用GeForce卡时获得的时间相比,我会获得更好的执行时间吗。如果是,为什么会这样?如果没有,我应该如何修改我的代码(在高级别上),因为我希望一个更强大的GPU卡可以给我更多的加速。每个SM一次最多可以运行8个左右的块(通常更少,对于需要更多资源的块,例如共享内存),因此具有更多SMs的G

目前我正在使用一个GeForce GPU卡和2个SM。我在GPU卡上运行了一些实验,发现代码的执行速度比类似的CPU实现快5倍。我很好奇,如果我在功能更强大的GPU卡(如特斯拉GPU)中运行完全相同的代码,与使用GeForce卡时获得的时间相比,我会获得更好的执行时间吗。如果是,为什么会这样?如果没有,我应该如何修改我的代码(在高级别上),因为我希望一个更强大的GPU卡可以给我更多的加速。

每个SM一次最多可以运行8个左右的块(通常更少,对于需要更多资源的块,例如共享内存),因此具有更多SMs的GPU可以运行相应更多的块


为了使您的代码能够在更大的GPU上运行,请在内核调用中指定基于(或大于)系统中SMs数量的块数。通过查看
deviceProp::multiProcessorCount
或使用
CU\u DEVICE\u ATTRIBUTE\u MULTIPROCESSOR\u COUNT
调用
cuDeviceGetAttribute
,可以查询到这一点。每个SM一次最多可以运行8个左右的块(对于需要更多资源(如共享内存)的块,通常更少),因此,具有更多SMs的GPU可以运行相应更多的块


为了使您的代码能够在更大的GPU上运行,请在内核调用中指定基于(或大于)系统中SMs数量的块数。这可以通过查看
deviceProp::multiProcessorCount
或使用
CU\u DEVICE\u ATTRIBUTE\u MULTIPROCESSOR\u COUNT
调用
cuDeviceGetAttribute
来查询,如果满足以下所有条件,则具有更多SMs的GPU应具有更好的性能:

  • 新的GPU具有与现有GPU相同或更新的体系结构
  • 新的GPU具有相同或更好的时钟速度
  • 新的GPU具有相同或更好的内存吞吐量,并且
  • (到目前为止最重要的是),该代码使用了足够的线程块来保持2条以上的SMs繁忙

请注意,当前的硬件趋势是增加内核数量,因此最大化线程数量通常非常重要。例如,与费米体系结构相比,开普勒体系结构的内核数增加了三倍。

如果满足以下所有条件,则具有更多SMs的GPU应具有更好的性能:

  • 新的GPU具有与现有GPU相同或更新的体系结构
  • 新的GPU具有相同或更好的时钟速度
  • 新的GPU具有相同或更好的内存吞吐量,并且
  • (到目前为止最重要的是),该代码使用了足够的线程块来保持2条以上的SMs繁忙
请注意,当前的硬件趋势是增加内核数量,因此最大化线程数量通常非常重要。例如,开普勒体系结构相对于费米体系结构使核心数量增加了三倍