Cuda multiProcessorCount是否提供流式多处理器的数量?
我很难理解multiProcessorCount属性给出的值代表什么,因为我在掌握CUDA体系结构时遇到了困难 我很抱歉,如果下面的一些陈述看起来很幼稚。根据我目前的理解,以下是硬件“层”:Cuda multiProcessorCount是否提供流式多处理器的数量?,cuda,Cuda,我很难理解multiProcessorCount属性给出的值代表什么,因为我在掌握CUDA体系结构时遇到了困难 我很抱歉,如果下面的一些陈述看起来很幼稚。根据我目前的理解,以下是硬件“层”: CUDA处理器是由构建块组成的网格 构建块由两个或多个流式多处理器组成 流式多处理器由许多流式处理器组成,也称为核心 流处理器是“大规模”线程化的,这意味着它实现了许多硬件管理的线程。一个流处理器,一个内核,一次只能计算一个线程,但它有许多“硬件线程”,可以在等待SP计算时加载数据 在软件方面: 块由
- CUDA处理器是由构建块组成的网格
- 构建块由两个或多个流式多处理器组成
- 流式多处理器由许多流式处理器组成,也称为核心
- 流处理器是“大规模”线程化的,这意味着它实现了许多硬件管理的线程。一个流处理器,一个内核,一次只能计算一个线程,但它有许多“硬件线程”,可以在等待SP计算时加载数据
- 块由线程组成,由流式多处理器执行
- 如果启动的块数超过卡上的流式多处理器数,我猜块会在某种队列中等待执行
- 软件线程被分配到流处理器,流处理器将其分配到硬件线程。与前一种情况类似,如果启动了流处理器可以用其硬件线程处理的多个线程,那么软件线程将在队列中等待
在您的情况下,您的610M GPU有一个流式多处理器(SM),由48个CUDA内核(也称为流式处理器,SP)组成。是,
multiProcessorCount
给出了GPU拥有的流式多处理器(即SMs)的数量。移动GPU通常最多只有几个。你的GPU只有一个并不是不合理的。SM的内部结构(即确切地说,什么是“CUDA核心”以及有多少)变得模糊。我还可以访问一台拥有GT 440的机器。它不是一个移动GPU,尽管很便宜。multiProcessorsCount属性显示:2。我很困惑,因为书籍和文章总是显示许多构建块,并且说一个构建块至少包含两个流处理器。另外,你同意我的说法吗?我发现无论我去哪里看,这些概念都没有得到很好的解释……书籍和文章都倾向于强调当前的旗舰芯片,它通常有十几条短信或更多。即使一个构建块(有时称为TPC)由一条或多条SMs组成,也可以销售禁用了其中一些SMs的GPU。这叫“扫地”,好的。所以,只要我不需要比一个块包含的线程更多的线程,我就没有兴趣在我的610M上启动多个块,对吗?(GT440上有两个以上)。我想知道为什么我从未见过任何代码使用multiProcessorCount属性来选择块和线程的数量。。。相反,你给我的堆栈溢出答案中的链接是:“你应该确保当你启动一个GPU功能时,你的网格由大量的块(至少数百个)组成,以确保它可以跨任何GPU扩展”。我不明白你说的是什么意思。”最后一点需要指出的是,SM在任何给定时间都可以执行多个块。“你的意思是,一个块可以在另一个块当前正在执行时暂停?我们通常希望编写比SMs块多得多的代码(比如至少多2-4倍)因此有很多很多线程。这就是机器隐藏各种延迟的方式。这就是为什么没有人根据机器架构细节(如SMs的数量)来选择块或线程的总数。是的,多个块可以驻留在单个SM上并一起执行。你可能想参加一些基本的cuda网络研讨会。它如果你想进一步理解这些概念,可以花几个小时。