【问题标题】:Why doesn't CUDA allow us to use all of the SM memory as L1 cache?为什么 CUDA 不允许我们将所有 SM 内存用作 L1 缓存?
【发布时间】: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 及更高版本上,参数通过常量内存传递。

标签: cuda cpu-cache


【解决方案1】:

我相信这是计算机图形学的原因。在运行 OpenGL 或 Direct3D 代码时,SM 将直接映射内存(CUDA 共享)用于一个目的(例如顶点属性),并将组关联内存(L1 缓存)用于另一个目的。对于图形管道,架构师能够根据其他单元的顶点吞吐量限制(例如),专门调整他们需要多少内存来处理诸如顶点属性之类的事情。

在考虑 GPU 的架构决策(以及一般的处理器设计,就此而言)时,重要的是要记住,许多决策主要是经济的。 GPU 计算有一项日常工作:游戏和图形。如果不是这项日常工作,GPU 计算就不会在经济上变得可行,大规模并行计算也不太可能为大众所用。

GPU 的几乎所有计算功能都以某种方式在图形管道中使用。如果不是(想想 ECC 内存),那么必须为使用它的市场提供更高的产品价格(想想 HPC)。

【讨论】:

  • 特斯拉生产线也有日常工作吗?我不知道您是否可以在 Tesla 上将整个 64k 用于 L1 缓存,但 Tesla 不作为游戏卡或显卡出售,所以只为 Teslas 添加那个开关不是很好吗?
  • 特斯拉的日常工作 GeForce 和 Quadro。 Tesla 与高端 GeForce 和 Quadro 的 GPU 实际上是相同的。
猜你喜欢
  • 2012-07-01
  • 2011-04-11
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2012-08-10
  • 2013-02-07
  • 2011-06-06
相关资源
最近更新 更多