我正在研究OpenCL概念以及一个小项目的CUDA架构,有一件事我不清楚:Warps的必要性。
我知道在这个问题上已经提出了很多问题,但是在阅读了一些文章后,我仍然没有得到经线的“含义”。
据我了解(说我的GPU卡是特斯拉,但我想这很容易转换为其他主板):
工作项链接到CUDA线程,其中一些线程可以由流处理器(SP)执行。顺便说一句,SP是否并行处理那些WI?
工作项分组为工作组。工作组在Stream Multiprocessor上运行,无法迁移。但是,工作组中的工作项可以通过共享内存(a.k.a本地内存)进行协作。一个或多个工作组可以由流多处理器执行。顺便说一句,SM是否并行处理这些工作组?
工作项在工作组内并行执行。但是,不保证同步,这就是你需要并发编程原语的原因,例如障碍。
据我所知,所有这些都是逻辑视图而非“物理”硬件视角。
如果以上都是正确的,您可以帮我解决以下问题。是这样说的:
1 - Warps同时执行32个线程或工作项。因此,他们将“消费”工作组的一部分。这就是为什么最终你需要像内存栅栏这样的东西来同步工作组中的工作项。
2 - Warp调度程序在变为活动状态时为32个warp线程分配寄存器。
3 - 另外,在warp中执行的线程是否同步?
感谢您对Warps的任何输入,特别是为什么它们在CUDA架构中是必要的。
答案 0 :(得分:2)
我最好的模拟是Warp是并行处理的矢量,与使用Intel CPU的AVX或SSE矢量不同。这使得SM成为32长矢量处理器。
然后,问题:
是的,所有32个元素将并行运行。请注意,GPU也将超线程推向极致:工作组将由多个Warp组成,这些Warp并行运行或多或少。您将需要内存屏障来同步所有内容。
是的,Warp中的所有32个工作元素(CUDA:thread)通常会并行工作。请注意,每个工作元素通常会有多个注册表。
不保证,AFAIK。