我阅读了一些引用本地内存的 CUDA 文档。(主要是早期文档。)设备属性报告本地内存大小(每个线程)。“本地”内存是什么意思?什么是“本地”内存?“本地”内存在哪里?如何访问“本地”内存?是__device__
记忆,不是吗?
设备属性还报告:全局、共享和恒定的内存大小。这些陈述是否正确:
全局内存就是__device__
内存。它具有网格范围和网格(内核)的生命周期。
不变的记忆就是__device__ __constant__
记忆。它具有网格范围和网格(内核)的生命周期。
共享内存就是__device__ __shared__
内存。它具有单个块范围和该块(线程)的生命周期。
我认为共享内存是 SM 内存。即只有那个单一的SM可以直接访问的内存。相当有限的资源。SM不是一次分配一堆块吗?这是否意味着 SM 可以交错执行不同的块(或不能)?即运行块* A * 线程,直到它们停止。然后运行 block* B * 线程直到它们停止。然后再换回 block* A * 线程。或 SM 是否为 block* A * 运行一组线程,直到它们停止。然后换入另一组块* A * 线程。此交换继续进行,直到块* A * 用尽。然后才开始在块* B上工作*。我问是因为共享内存。如果单个 SM 正在从 2 个不同的块交换代码,那么 SM 如何快速换入/换出共享内存块?(我认为后面的 senerio 是真的,并且没有换入/换出共享内存空间。块 * A * 运行直到完成,然后块 * B * 开始执行。注意:块 * A * 可能是不同的内核比块* B *。)