在CUDA中从块尺寸转换为warp

时间:2015-07-07 21:22:06

标签: cuda

我对某些尺寸的块如何映射到32号经线感到困惑。

我已经阅读并亲身体验过,块的内部维度是32的倍数可以提高性能。

假设我创建了一个尺寸为16x16的块。 经线是否可以包含来自两个不同y维度的线,例如1和2?

为什么内部维度为32可以提高性能,即使技术上有足够的线程可以安排到变形?

1 个答案:

答案 0 :(得分:1)

About warp and threadsHow are CUDA threads divided into warps?已经回答了你最大的问题。所以,我把这个答案集中在 why

CUDA中的blocksize总是经线大小的倍数。 warp大小是实现定义的,而numbe 32主要与共享内存组织,数据访问模式和数据流控制有关[1]。

因此,块大小为32的倍数并不会提高性能,但意味着所有线程都将被用于某些东西。请注意,用于某些内容的 取决于您对块内线程的处理方式。

即使您请求的线程较少,blockize也不是32的倍数将向上舍入到最接近的倍数。请参阅NVIDIA的Cliff Woolley的GPU Optimization Fundamentals演示 开发者技术小组对性能提出了有趣的提示。

此外,每个warp都会执行内存操作和指令,因此您可以了解此数字的重要性。我认为它是32而不是16或64的原因没有记载。所以我喜欢将经线尺寸记住为" 生命,宇宙和万物的终极问题的答案" [2]。

[1] David B Kirk和W Hwu Wen-mei。大规模并行处理器编程:实践方法。 Elsevier,2010年。

[2] Hitchhiker的银河系指南。