首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用了多少线程/工作项?

使用了多少线程/工作项?
EN

Stack Overflow用户
提问于 2015-06-15 17:11:06
回答 1查看 81关注 0票数 2

我正在尝试理解GPU的架构,并在不编译或运行的情况下估计一条算术语句的延迟。

我认为下面的代码将只使用一个线程/工作项,尽管我指定了local size = 32。这是正确的吗?

代码语言:javascript
复制
int k = 0;
for (; k < 32000; k++){
     A = C * (B + D);
}

如果我使用双精度单元( DPU )运行程序,并且NVIDIA Tesla GPU上的每个SM有1个DPU,那么翘曲的大小是多少?它仍然是32个线程(1个线程使用DPU,加上31个线程使用SP)吗?

还有一个问题:根据这个GPU architecture,在真正的图形处理器上没有线程。线程对于程序员来说是一个虚拟的概念吗?

EN

回答 1

Stack Overflow用户

发布于 2015-06-16 09:41:12

我正在尝试理解图形处理器的体系结构,并在不编译或运行的情况下估计一条算术语句的延迟。

我不相信这在任何地方都是公开指定的,而且它在供应商和型号之间有所不同。AMD和NVIDIA的现代独立GPU通常有大约20级的流水线。

我认为下面的代码将只使用一个线程/工作项,尽管我指定了local size = 32。这是正确的吗?

如果您指定32个工作项的NDRange,而不管本地大小如何,您将获得32个工作项。您还没有展示如何启动内核,所以这里的问题并不明确。

如果我使用双精度单元( DPU )运行程序,并且NVIDIA Tesla GPU上的每个SM有1个DPU,那么翘曲的大小是多少?

warp的大小不取决于要执行的指令的类型。翘曲是一个物理概念,类似于SIMD通道。您不能更改它。在NVIDIA硬件上,该值始终为32。

这与SPU和DPU无关。SPU和DPU的数量限制了可以在每个周期发出/停用的单精度和双精度指令的数量(确切的约束因硬件而异,在同一周期内并不总是可以同时发出两种类型的指令)。

假设一个虚构的SM具有32个DPU和1个DPU,这意味着您可以在每个周期发出32条单精度指令和1条双精度指令。

如果所有的32个线程都需要执行一条精度指令,那么它将在一个周期内发出。如果它们都需要执行双精度,它将在32个周期内发出。如果我们假设SM可以并行执行这两个操作,那么它也可以在一个周期内发出1条双精度指令和31条单精度指令。

对程序员来说线程是一个虚拟的概念吗?

是的,在CUDA的说法中,术语“线程”与通常的含义完全无关,它类似于"SIMD通道“。但是请注意,OpenCL没有使用术语线程,它是工作项。底层执行机制是未指定的,并且不需要映射到任何硬件概念。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30841358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档