Cuda multiProcessorCount是否提供流式多处理器的数量?

Cuda multiProcessorCount是否提供流式多处理器的数量?,cuda,Cuda,我很难理解multiProcessorCount属性给出的值代表什么,因为我在掌握CUDA体系结构时遇到了困难 我很抱歉,如果下面的一些陈述看起来很幼稚。根据我目前的理解,以下是硬件“层”: CUDA处理器是由构建块组成的网格 构建块由两个或多个流式多处理器组成 流式多处理器由许多流式处理器组成,也称为核心 流处理器是“大规模”线程化的,这意味着它实现了许多硬件管理的线程。一个流处理器,一个内核,一次只能计算一个线程,但它有许多“硬件线程”,可以在等待SP计算时加载数据 在软件方面: 块由

我很难理解multiProcessorCount属性给出的值代表什么,因为我在掌握CUDA体系结构时遇到了困难

我很抱歉,如果下面的一些陈述看起来很幼稚。根据我目前的理解,以下是硬件“层”:

  • CUDA处理器是由构建块组成的网格
  • 构建块由两个或多个流式多处理器组成
  • 流式多处理器由许多流式处理器组成,也称为核心
  • 流处理器是“大规模”线程化的,这意味着它实现了许多硬件管理的线程。一个流处理器,一个内核,一次只能计算一个线程,但它有许多“硬件线程”,可以在等待SP计算时加载数据
在软件方面:

  • 块由线程组成,由流式多处理器执行
  • 如果启动的块数超过卡上的流式多处理器数,我猜块会在某种队列中等待执行
  • 软件线程被分配到流处理器,流处理器将其分配到硬件线程。与前一种情况类似,如果启动了流处理器可以用其硬件线程处理的多个线程,那么软件线程将在队列中等待
在这两种情况下,允许启动的最大线程数和块数与卡上实际存在的流式多处理器、流式处理器和每个流式处理器的硬件线程数无关。这些概念就是软件

我至少接近现实了吗

话虽如此,multiProcessorCount属性给出了什么?在我的610M上,它说我只有一个多处理器。。。这是否意味着我只有一个流式多处理器?我会有一个只由一个流式多处理器组成的构建块?那对我来说似乎不可能。这意味着我一次只能执行一个块! 此外,当我的卡的规格说明我有48个cuda内核时,他们是在谈论流处理器吗?

也许会有所帮助。它现在有点过时了,因为它指的是旧的体系结构,但原则是一样的

GPU完全可能由单个SM(流式多处理器)组成,特别是如果它是移动GPU。单个SM由多个CUDA内核组成,可以容纳多个线程块(在最新一代开普勒GPU上最多16个)


在您的情况下,您的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网络研讨会。它如果你想进一步理解这些概念,可以花几个小时。