4

我在 Mathematica 中使用 NVIDIA K20 GPU。K20 的白皮书规定了以下规格:

  1. 2496 个单精度内核(每个多处理器 192 个 x 13 个多处理器)
  2. 832 个双精度内核(每个多处理器 64 个 x 13 个多处理器)
  3. 416 个特殊功能单元(每个多处理器 32 个 x 13 个多处理器)

但是,当我启动 Mathematica 并在加载 OpenCL 或 CUDA 后查看 GPU 的规格时,它说我只有 416 个内核(我附上了 Mathematica 命令的屏幕截图和报告的规格)。这是否与双精度内核或特殊功能单元的数量有关?Mathematica 在我告诉它我将编写什么样的代码(例如双精度、超越函数)之前报告了这些规范。在此处输入图像描述

4

2 回答 2

6

您的 Mathematica 很可能还不了解 Kepler 架构,因此将多处理器计数错误地转换为内核计数。

由于无论如何“核心”主要是一种营销发明,你可以放心地忽略这个数字。Mathematica 仍将使用整个 GPU(尽管 Kepler 感知版本可能仍会通过其他优化带来一些加速)。

于 2013-04-05T22:11:29.930 回答
3

这是一个 OpenCL 工件,而不是 Mathematica 的问题。Mathematica 通过供应商驱动程序 API(如 CUDA 或 OpenCL)与 GPU 设备通信。在这种情况下,信息是通过调用 OpenCL 的

OpenClGetDeviceInfo (.. )

请求 CL_DEVICE_MAX_COMPUTE_UNITS

OpenCL 驱动程序说它有 13 个 SMU,每个可以运行 32 个线程。因此有 416 个计算单元。OpenCL 规范对计算单元是什么含糊不清。所以 OpenCl 给出了 SMU * Warp 大小的总和。OpenCL 在 AMD 上也做了类似的事情,报告 7950 有 28 个计算单元,它有 1792 个流单元。AMD 79xx 每个 SMU 运行 64 个线程。

于 2013-04-06T15:03:55.880 回答