我几乎不明白 multiProcessorCount 属性给出的值代表什么,因为我在掌握 CUDA 架构时遇到了困难。
如果以下某些陈述显得幼稚,我深表歉意。据我目前了解,这里是硬件“层”:
- CUDA 处理器是构建块的网格。
- 一个构建块由两个或多个流式多处理器组成。
- 流式多处理器由许多流式处理器组成,也称为核心。
- 流处理器是“大量”线程化的,这意味着它实现了许多硬件管理的线程。一个流处理器,一个核心,实际上一次只能计算一个线程,但它有许多“硬件线程”,可以在等待轮到它们被 SP 计算的同时加载数据。
在软件方面:
- 块由线程组成,由流式多处理器执行
- 如果启动的块多于卡上流式多处理器的数量,我猜块会在某种队列中等待执行。
- 软件线程被分配给流处理器,流处理器将它们分配给它们的硬件线程。与前一种情况类似,如果一个流处理器可以使用其硬件线程处理更多线程,则软件线程会在队列中等待。
在这两种情况下,允许启动的最大线程数和块数与卡上实际存在的流式多处理器、流式处理器和每个流式处理器的硬件线程数无关。这些概念是软件!
我至少接近现实吗?
话虽如此,multiProcessorCount 属性给出了什么?在我的 610M 上,它说我只有一个多处理器……这是否意味着我只有一个流式多处理器?我会拥有一个仅由一个流式多处理器组成的构建块吗?这对我来说似乎是不可能的。这意味着我一次只能执行一个块!此外,当我的卡规格说我有 48 个 cuda 核心时,他们是在谈论流处理器吗?