【发布时间】:2015-02-06 16:59:53
【问题描述】:
我正在研究 OpenCL 概念以及一个小型项目的 CUDA 架构,但有一点我不清楚:Warps 的必要性。
我知道有人问过很多关于这个问题的问题,但是在阅读了一些文章后,我仍然不明白扭曲的“含义”。
据我所知(我的 GPU 卡是 Tesla,但我想这很容易转化为其他板):
一个工作项链接到一个 CUDA 线程,其中几个可以由流处理器 (SP) 执行。顺便说一句,SP 是否并行处理这些 WI?
工作项被分组到工作组中。工作组在流多处理器上运行,不能迁移。但是,工作组中的工作项可以通过共享内存(也称为本地内存)进行协作。一个或多个工作组可以由 Stream MultiProcessor 执行。顺便说一句,SM 是否并行处理这些 WG?
工作项在工作组内并行执行。但是,不能保证同步,这就是您需要并发编程原语(例如屏障)的原因。
据我了解,所有这一切都是一种逻辑观点,而不是“物理”的硬件观点。
如果以上所有内容都正确,您能帮我解决以下问题吗?是不是这样说:
1 - Warp 同时执行 32 个线程或工作项。因此,他们将“消耗”工作组的一部分。这就是为什么最终你需要像内存栅栏这样的东西来同步工作组中的工作项。
2 - Warp 调度程序在激活时为 32 个 warp 线程分配寄存器。
3 - 另外,warp 中执行的线程是否完全同步?
感谢您对 Warps 的任何意见,特别是为什么它们在 CUDA 架构中是必要的。
【问题讨论】:
-
标题有问题。 “带有 OpenCL 的 CUDA 架构”只是……错误。 “带有 OpenCL 的 NVIDIA GPU 架构”更适合 IMO。
-
@ParkYoung-Bae 投反对票是愚蠢的。我在问一个关于扭曲的简单问题,因为我不明白。我公开了我对我设法理解的概念的理解。怎么办? SO的目的是提出“美丽”的问题(哈哈)还是从他人那里获得知识?无论如何,感谢您的反馈。