【发布时间】:2012-03-29 12:41:28
【问题描述】:
在 CUDA 设备中,每个 SM 都有 64KB 的片上内存,靠近它放置。默认情况下,这被划分为 48KB 的 共享内存 和 16KB 的 L1 缓存。对于内存访问模式难以确定的内核,可以将此分区更改为 16KB 的共享内存和 48KB 的 L1 缓存。
为什么 CUDA 不允许所有 64KB per-SM 片上内存用作L1 缓存?
有很多内核不使用共享内存,但可以使用额外的 16KB 一级缓存。
【问题讨论】:
-
只是纯粹的推测,但也许实现的方式是有两个独立的 RAM 块,一个 48KiB 和一个 16KiB。并且配置只是切换哪个逻辑连接到哪个块。
-
即使您不使用共享内存,其中一些用于存储作为参数传递的数据。如果您使用
--ptxas-options=-v,则可以将其视为smem。 -
@Jay 仅适用于 pre-fermi 架构。
-
@Pavan 是正确的,在 Fermi 及更高版本上,参数通过常量内存传递。