【发布时间】:2014-10-17 21:02:12
【问题描述】:
我在一本书中读到,在波前或扭曲中,所有线程共享一个公共程序计数器。那么它的后果是什么?为什么这很重要?
【问题讨论】:
-
有人可以提供参考来证明“波前/扭曲具有公共程序计数器”这一说法吗?
-
这本书声称相反“每个GPU线程都有自己的标量寄存器、线程私有内存、线程执行状态、线程ID、独立执行和分支路径、有效程序计数器,并且可以独立寻址内存. 虽然当线程的 PC 相同时,一组线程(例如,32 个线程的扭曲)执行效率更高,但这不是必需的。 (见books.google.de/…)
-
我自己找到了解决方案。重要的是上面引文中的“有效”一词。事实上,每个扭曲/波前只有 1 个程序计数器,因为硬件组织为 SIMD,您只能为所有 SIMD 通道发出 1 条指令(禁用这些通道,其控制路径发散并在下一个时钟周期执行它们)。但是从逻辑上讲,每个 CUDA 线程/OpenCL 工作项似乎有 1 台 PC。也就是说,为什么 SIMT 在 SIMD 硬件上有时称为 SPMD。 (计算机架构:定量方法和haifux.org/lectures/267/Introduction-to-GPUs.pdf)
标签: cuda opencl gpgpu program-counter