【问题标题】:Role of Warps in NVIDIA GPU architecture with OpenCLWarps 在带有 OpenCL 的 NVIDIA GPU 架构中的作用
【发布时间】: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的目的是提出“美丽”的问题(哈哈)还是从他人那里获得知识?无论如何,感谢您的反馈。

标签: cuda opencl


【解决方案1】:

我最好的类比是 Warp 是并行处理的向量,与英特尔 CPU 的 AVX 或 SSE 向量不同。这使得 SM 成为 32 长度的矢量处理器。

那么,对于你的问题:

  1. 是的,所有 32 个元素将并行运行。请注意,GPU 也将超线程发挥到了极致:一个工作组将由多个 Warp 组成,它们或多或少地并行运行。您将需要内存栅栏来同步所有内容。

  2. 是的,通常 Warp 中的所有 32 个工作元素(CUDA:线程)都将并行工作。请注意,每个工作元素通常会有多个注册者。

  3. 不保证,AFAIK。

【讨论】:

  • 一个warp中的线程总是以锁步执行,这意味着每个warp有一个指令计数器,并且warp中的所有线程总是在相同的时钟周期内执行相同的指令,如果它们在全部。 warp 中的一些线程可能会被屏蔽掉,也就是说,不会对内存访问和寄存器产生影响。这允许代码分支。
  • @void_ptr 锁步执行并不一定意味着warp的所有线程都在同一个时钟周期内执行。例如,在某些硬件上,warp 调度程序不能一次向整个 warp 发出指令,而是会在几个时钟周期内重复该指令到 warp 的子集,然后再转到下一条指令。
  • @ParkYoung-Bae 没错,我现在试图让它更简单。安排一次扭曲可能需要多达 32 个时钟周期。关键是每个 warp 有一个指令指针。
  • 所以,似乎 3. 的答案是这个 保证的。即使半扭曲在不同的周期等执行,处理器的行为就像所有扭曲线程同时执行,这意味着它们保证完全同步以用于所有目的。 IIANM。
猜你喜欢
  • 2019-06-15
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 2018-07-21
  • 2014-03-19
  • 2022-06-11
  • 2014-05-30
  • 1970-01-01
相关资源
最近更新 更多