CUDA模型中硬件与程序的层次对应

CUDA模型中硬件与程序的层次对应,cuda,Cuda,在我目前的理解中,CUDA模型的硬件层次是GPU卡->流式多处理器(SMs)->内核,程序层次是内核->网格->块->扭曲->单线程。我想知道硬件和程序层次结构之间的对应关系。也就是说,内核一般由几个网格组成吗?网格是包含在GPU卡中还是包含在SMs中?如果GPU卡中包含网格,那么GPU卡中只能包含一个网格还是多个网格?块是否对应于SMS?SMs只能包含一个块还是多个块?一个区块可以跨越多条短信吗?核心只能执行一个线程还是多个线程?等等。内核是在GPU上运行的函数 网格是与内核启动关联的所有线程

在我目前的理解中,CUDA模型的硬件层次是GPU卡->流式多处理器(SMs)->内核,程序层次是内核->网格->块->扭曲->单线程。我想知道硬件和程序层次结构之间的对应关系。也就是说,内核一般由几个网格组成吗?网格是包含在GPU卡中还是包含在SMs中?如果GPU卡中包含网格,那么GPU卡中只能包含一个网格还是多个网格?块是否对应于SMS?SMs只能包含一个块还是多个块?一个区块可以跨越多条短信吗?核心只能执行一个线程还是多个线程?等等。

内核是在GPU上运行的函数

网格是与内核启动关联的所有线程块。内核启动会创建一个网格。 网格可以在整个GPU设备(GPU中的所有SM)上运行。 网格由螺纹块组成

线程块是一组线程。出于执行目的,线程被分组为扭曲(32个线程),因此我们也可以说threadblock是扭曲组

螺纹块(它们包含的扭曲)在SM上执行。一旦threadblock开始在特定SM上执行,它将留在该SM上,并且不会迁移到另一个SM

SMs由内核组成。每个核心执行一个线程。核心执行引擎可能具有一次处理多条指令的能力,因此它实际上可以处理多个线程,但不能来自同一个线程。这一部分变得很复杂,对于初学者理解GPU的工作原理并不是至关重要的,因此,考虑一个内核在任何给定的瞬间(指令周期)只处理一个线程是方便和有用的

SM可以同时处理多个块

请不要发布包含许多问题的问题。 关于SO的问题应该显示出一些研究成果

对于这样的问题,很好的研究工作需要从网络上进行一些基本的研讨会,这只需要几个小时的研究

首先尝试以下两种方法:

使用CUDA C的GPU计算–简介(2010) 介绍使用CUDA C进行GPU计算的基础知识。概念将通过代码示例演练加以说明。无需GPU计算经验

使用CUDA C的GPU计算–高级1(2010)
第一级优化技术,如全局内存优化和处理器利用率。将使用真实代码示例演示概念

您阅读了吗?谢谢。我以这种方式发布这个问题,因为出于某种原因,我需要一个快速的答案。我搜索和阅读了一些材料,似乎能够在“几个小时”内熟悉自己,但所有这些材料都未能给我提供硬件和软件层次结构之间的明确对应关系;它们只会让我越来越困惑。这就是为什么我必须在这里提问,并在帖子中包含了这么多问题。一些离题的评论。有人可能会认为我应该先深入研究一些全面的介绍材料,比如答案末尾列出的材料。我非常同意这是一个很好的方法来深入和全面地理解CUDA架构,我甚至希望我能阅读有关现代计算机架构和操作系统的教科书,这些都是CUDA技术的基础。但出于某种原因,我不能这么做。人们总是因为一些别人无法理解甚至鄙视的原因而做一些事情。我唯一能说的是:……请表现出相互理解。没有人能绝对肯定地说他/她永远不会遇到这种情况。当你开始鄙视或贬低别人时,如果你在过去或将来有过类似的困难处境,不妨考虑一下。好的,非常感谢你的回答。这比我在过去12个小时里读到的材料要好得多。我没有否决你的问题。这是一个开放的论坛。任何人都可以投票否决任何事情。我可以告诉你,你是SO(和CUDA)的新手,所以我提供一些建议,我认为这些建议会对你的SO(和CUDA)有所帮助。顺便说一句,否决票机制是有效的。它鼓励人们改进他们的问题和答案。我过去曾被否决过。不要为此感到难过。