什么';CUDA中翘曲和倾斜的机制是什么?

什么';CUDA中翘曲和倾斜的机制是什么?,cuda,bank-conflict,Cuda,Bank Conflict,我是学习CUDA并行编程的新手。现在我对设备的全局内存访问感到困惑。这是关于扭曲模型和合并的 有几点: 据说一块中的线被分成了一条线。每个经纱最多有32根线。这意味着同一个扭曲的所有线程将在同一个处理器上同时执行。那么半扭曲的感觉是什么呢 当涉及到一个块的共享内存时,它将被分成16个存储组。为了避免库冲突,多个线程可以同时读取一个库,而不是在同一个库中写入。这是正确的解释吗 提前谢谢 “半翘曲”的主要用途应用于CUDA处理器 在费米一代之前(例如,“特斯拉”或GT200一代, 以及最初的G80/

我是学习CUDA并行编程的新手。现在我对设备的全局内存访问感到困惑。这是关于扭曲模型和合并的

有几点:

  • 据说一块中的线被分成了一条线。每个经纱最多有32根线。这意味着同一个扭曲的所有线程将在同一个处理器上同时执行。那么半扭曲的感觉是什么呢

  • 当涉及到一个块的共享内存时,它将被分成16个存储组。为了避免库冲突,多个线程可以同时读取一个库,而不是在同一个库中写入。这是正确的解释吗

  • 提前谢谢

  • “半翘曲”的主要用途应用于CUDA处理器 在费米一代之前(例如,“特斯拉”或GT200一代, 以及最初的G80/G92一代)。 warp的定义仍然相同,但实际的HW 一次执行“半扭曲”。其实 颗粒细节比这更复杂,但足以 假设执行模型导致发出内存请求 根据半经纱的需要,即经纱内有16根线。 因此,命中内存事务的完全扭曲将生成 该事务总共有2个请求

    。 因此,一个内存事务在一个完整的数据库中立即可见 弯曲因此,内存请求是在每次扭曲时发出的 水平,而不是每半个扭曲。但是,一个完整的内存请求 一次只能检索128个字节。因此,对于数据大小 每个事务的每个线程的内存大于32位 控制器仍然可以将请求分解为半扭曲大小

    我的观点是,特别是对于初学者来说,没有必要 对半翘曲有详细的了解。一般来说 足以理解它指的是一组16个线程 同时执行,这对内存请求有影响

  • 共享内存,例如在 分为32家银行。在…上 它被分为16家银行。银行冲突随时都会发生 单个银行由同一数据库中的多个线程访问 内存请求(即源自同一代码指令)。 为避免银行冲突,基本策略与 合并内存请求的策略,如全局内存。在Fermi和较新的GPU上,多个线程可以读取相同的地址,而不会导致银行冲突,但一般来说,银行冲突的定义是当多个线程从同一银行读取时。为了进一步了解共享内存以及如何避免银行冲突,我建议使用on
  • “半翘曲”的主要用途应用于CUDA处理器 在费米一代之前(例如,“特斯拉”或GT200一代, 以及最初的G80/G92一代)。 warp的定义仍然相同,但实际的HW 一次执行“半扭曲”。其实 颗粒细节比这更复杂,但足以 假设执行模型导致发出内存请求 根据半经纱的需要,即经纱内有16根线。 因此,命中内存事务的完全扭曲将生成 该事务总共有2个请求

    。 因此,一个内存事务在一个完整的数据库中立即可见 弯曲因此,内存请求是在每次扭曲时发出的 水平,而不是每半个扭曲。但是,一个完整的内存请求 一次只能检索128个字节。因此,对于数据大小 每个事务的每个线程的内存大于32位 控制器仍然可以将请求分解为半扭曲大小

    我的观点是,特别是对于初学者来说,没有必要 对半翘曲有详细的了解。一般来说 足以理解它指的是一组16个线程 同时执行,这对内存请求有影响

  • 共享内存,例如在 分为32家银行。在…上 它被分为16家银行。银行冲突随时都会发生 单个银行由同一数据库中的多个线程访问 内存请求(即源自同一代码指令)。 为避免银行冲突,基本策略与 合并内存请求的策略,如全局内存。在Fermi和较新的GPU上,多个线程可以读取相同的地址,而不会导致银行冲突,但一般来说,银行冲突的定义是当多个线程从同一银行读取时。为了进一步了解共享内存以及如何避免银行冲突,我建议使用on