【问题标题】:On Double Precision Units (DPUs) on Kepler K20Xm关于 Kepler K20Xm 上的双精度单元 (DPU)
【发布时间】:2013-12-10 05:29:25
【问题描述】:

根据Kepler architecture whitepaper,SMX 具有192 CUDA 内核和64 双精度单元 (DPU)。对于 K20Xm,有14 SMX 总计为2688 核心,这意味着只计算 CUDA 核心。那么 DPU 的用途到底是什么,它们的用途与内核有何关系?

我的想法:

a) CUDA 内核不能进行双精度运算,只有 DPU 可以。因此,当 DPU 忙时,CUDA 内核可用于其他工作。

b) CUDA 内核不知何故需要一个双精度单元来执行双精度操作,因此只有 128192 CUDA 内核可用于其他东西。

干杯 安迪

【问题讨论】:

  • 我不确定为什么这个问题被标记为不清楚。我正在投票重新打开它。
  • @Talonmies 等人:我不明白如何使用双精度单位。它们与某些工作有何关系,即它们是否会阻止 CUDA 单精度内核?或者那些可以免费从事其他工作?为什么它们不包含在 K20Xm 规格中的内核总数中?或者用更粗暴的方式:如果我想以最有效的方式使用开普勒卡,我需要注意什么。
  • 请仔细阅读 Robert Crovella 的回答。他明确表示 DPU 独立于“CUDA 内核”,因此我不希望它们阻塞 CUDA 单精度内核(单精度和双精度内核可以同时工作)。对于之前的sm=2.0 Fermi 架构,只有32 单精度内核,每条双精度指令消耗2 单精度内核。因此,双精度指令不支持任何其他操作的双重分派。现在,双问题也可以使用双精度操作。
  • 啊,我刚刚找到了困惑的根源。 K20Xm 每个 DPU 有 3 个 CUDA 内核,这意味着它的单精度性能应该是双精度性能的三倍(根据他们的论文)但不知何故我以为我读到它只会提供 2 的加速. 很抱歉造成混乱...感谢您的回答

标签: cuda double kepler


【解决方案1】:

双精度单元实际上是执行双精度算术的独立硬件浮点单元。它们独立于“cuda cores”,大致可以认为是单精度单元。

所以对于单精度算术,吞吐量可以基于“cuda 核心”或单精度单元来计算。对于双精度算术,吞吐量必须基于双精度单位计算。

在 Kepler K20 SMX 中,ratio of double-precision units to single precision units 为 1:3。因此,每种算术类型的吞吐量遵循相同的比率。 “算术”是指浮点乘法或浮点加法。

【讨论】:

  • 所以换句话说,如果我对每条双精度指令有 3 条单精度指令,我将得到最“高效”的内核(忽略可能的依赖关系)
  • @user2267896 我不确定这个评论是否有意义。通常,您可以使用单精度或双精度算术,并且不要将两者混合使用。如果混合使用单精度和双精度,那么最终结果的精度将低于双精度,这使得随后发出双精度操作毫无意义。您可以说的是,您现在可以将(双问题)整数和双精度运算混合在一起,与 Fermi 不同,正如 Robert Crovella 已经说过的,单精度吞吐量是双精度的三倍。
  • 您无法同时从任何 GPU 中获得峰值双精度吞吐量和峰值单精度吞吐量。您的问题现在似乎主要基于日程安排。您不能在 Kepler SMX 中同时停用 192 个 SP 浮点运算和 64 个 DP 浮点运算。
猜你喜欢
  • 2023-03-03
  • 2013-04-11
  • 2012-10-29
  • 2014-04-18
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多