Cuda sm13上块的实际共享内存量是多少?

Cuda sm13上块的实际共享内存量是多少?,cuda,Cuda,提到 每个多处理器的最大驻留块数8 每个多处理器的最大共享内存量为16 KB 这是否意味着,如果我有很多运行块,它们中的每个块只能有2 KB的共享内存?如果不是这样,并且每个块仍然有16KB的共享内存,那么当两个16KB内存的块在signle MP上执行时,就会存储它。在多处理器上运行的所有块都必须共享所有资源(寄存器、共享内存等) 如果您的threadblock使用共享内存,那么它必须满足的第一条规则是,它使用的内存不能超过SM中可用的内存(即在本例中为16KB) 如果threadbloc

提到

  • 每个多处理器的最大驻留块数8
  • 每个多处理器的最大共享内存量为16 KB

这是否意味着,如果我有很多运行块,它们中的每个块只能有2 KB的共享内存?如果不是这样,并且每个块仍然有16KB的共享内存,那么当两个16KB内存的块在signle MP上执行时,就会存储它。

在多处理器上运行的所有块都必须共享所有资源(寄存器、共享内存等)

如果您的threadblock使用共享内存,那么它必须满足的第一条规则是,它使用的内存不能超过SM中可用的内存(即在本例中为16KB)

如果threadblock所需的内存小于16KB,则可以在SM上执行多个threadblock。例如,如果每个线程块仅使用大约8KB,则可能会执行两个线程块。如果每个线程块最多使用(略小于)4KB(通常会有一些开销),则可以执行四个线程块

如果希望在给定的SM(多处理器)上一次最多执行8个threadblock,则必须在代码中确保threadblock使用的共享内存不超过2KB(可能略小于2KB)

如果每个threadblock使用了16KB的共享内存,这意味着其他threadblock将在队列中等待,直到该SM上的threadblock完成,然后才开始执行


如果threadblock试图使用超过16KB的内存(在本例中),则会出现内核启动错误。

在多处理器上运行的所有块必须共享所有资源(寄存器、共享内存等)

如果您的threadblock使用共享内存,那么它必须满足的第一条规则是,它使用的内存不能超过SM中可用的内存(即在本例中为16KB)

如果threadblock所需的内存小于16KB,则可以在SM上执行多个threadblock。例如,如果每个线程块仅使用大约8KB,则可能会执行两个线程块。如果每个线程块最多使用(略小于)4KB(通常会有一些开销),则可以执行四个线程块

如果希望在给定的SM(多处理器)上一次最多执行8个threadblock,则必须在代码中确保threadblock使用的共享内存不超过2KB(可能略小于2KB)

如果每个threadblock使用了16KB的共享内存,这意味着其他threadblock将在队列中等待,直到该SM上的threadblock完成,然后才开始执行


如果threadblock试图使用超过16KB的内存(在本例中),则会出现内核启动错误。

请停止。在24小时内提出8个问题,其中大部分可以通过阅读CUDA编程指南中的几页来回答,这几乎是滥用。@Talonmes,对不起,我现在还真的找不到。.看起来Nvidia已经删除了所有与CCPLESE stop相关的内容。在24小时内提出8个问题,其中大部分可以通过阅读CUDA编程指南中的几页来回答,这几乎是滥用。@Talonmes,对不起,我现在还真的找不到。.看起来Nvidia已经删除了与ccI guess相关的所有内容,如果可以的话,最好每次在SM上设置8个块(可以在内核中进行while循环并用其他2KB的数据块重新填充共享内存)?或者没有区别?一般来说,在SM上执行更多线程块可能会提高性能(这与占用率有关)。但这是一种泛化,并非所有情况都是如此。更多的线程块通常会提供更多可用(准备执行)的扭曲。拥有更多可用的扭曲意味着,在一个或多个扭曲停止(可能等待读取数据)的情况下,SM更有可能执行有用的工作。我想,如果可用的话,最好每次在SM上有8个块(可以在内核中进行while循环并用其他2KB的数据块重新填充共享内存)?或者没有区别?一般来说,在SM上执行更多的线程块可能会提高性能(这与占用有关).但这是一种泛化,并非在所有情况下都是如此。更多的线程块通常会提供更多可用(准备执行)的扭曲。拥有更多可用的扭曲意味着,在一个或多个扭曲暂停(可能等待读取数据)的情况下,SM更有可能执行有用的工作。