相同数量的粒子的内核时间增加

时间:2012-12-12 02:08:15

标签: cuda

我正在尝试在NVIDIA的K10 GPU上运行我的代码。我正在使用5.0 CUDA Driver和4.2 CUDA运行时。问题是内核所花费的时间随着迭代而增加,其中每次迭代使用相同数量的源和目标(或粒子)。因此,内核最终需要花费很长时间,代码会因运行时错误而崩溃,这就像“GPU掉线”一样。

可以在此处看到显示增加内核运行时间和迭代次数的行为的图表:

https://docs.google.com/open?id=0B5QLL4ig3LVqODdmVjNBTlp5UFU

我尝试运行NVIDIA“nbody”示例,以了解此处是否也发生了同样的事情,是的确如此。对于粒子/物体(Np)= 1e5和10次迭代的数量,代码运行良好。对于Np = 1e5且迭代次数= 100,OR Np = 1e6且迭代次数= 10,代码将进入挂起整个系统的模式。

当我在使用Tesla C2050 NVIDIA卡(CUDA驱动程序版本:3.2和运行时版本:3.2)的不同机器上运行我自己的内核以及NVIDIA的nbody示例时,没有问题,并且内核需要相同的内核每次迭代的时间。

我想了解使用K10 GPU在机器上发生的事情。我在这台机器上尝试了不同的CUDA驱动程序和运行时版本组合,这就是我得到的:

对于5.0 CUDA驱动程序,4.2运行时,它只是挂起,有时会说“GPU掉线”。

对于4.2 CUDA驱动程序,4.2运行时,代码(nbody以及我的代码)因错误而崩溃:“CUDA Runtime API错误39:遇到无法纠正的ECC错误。”

对于5.0 CUDA驱动程序,5.0运行时,它只是挂起,有时会说“GPU掉线”。

这是一台64位的linux机器,我们最近与NVIDIA K10 GPU卡组装在一起。我正在使用gfortran44和gcc44。

如果有任何其他信息,请告诉我。需要跟踪问题。

提前感谢您的帮助!

中号

1 个答案:

答案 0 :(得分:4)

我主要只是创建一个答案,以便我们可以将此问题关闭,但我会尝试添加一些细节。

特斯拉GPU有两个不同的类别:带有风扇的那些和没有风扇的那些。那些带风扇的人(此时)随身携带" C"虽然K20产品系列命名略有不同,但仍有名称:

这些并非详尽无遗的列表:

  1. 带风扇的特斯拉GPU:C870,C1060,C2050,C2070,C2075,K20c(" C类")
  2. 没有风扇的Tesla GPU:M1060,M2050,M2070,M2075,M2090,K10,K20,K20X(" M class")
  3. (请注意,目前没有带风扇的K10型产品或" C"指定)

    带风扇的 Tesla GPU 旨在插入各种PC盒和机箱,包括各种工作站和服务器型号。由于它们有自己的风扇,它们需要供应低于某一温度水平的进气,但鉴于此,它们将保持冷却。随着工作量的增加,以及产生的热量增加,他们将使用自己的风扇来保持自己的冷却。解决此过程的主要方法是限制进气流量或将其置于比最大入口规格更热的环境空气环境中。

    特斯拉GPU 没有粉丝有一种称为被动散热器的东西,他们不能独立保持冷静,并在冷却中扮演被动角色处理。它们仍然有一个温度传感器,但是服务器BMC(基板管理控制器)负责监控这个温度传感器(这是直接在硬件/固件级别完成的,独立于任何操作系统或任何针对GPU的活动并且指示卡上的气流水平足以使卡基于其指示的温度保持冷却。 BMC通过增加设计到服务器机箱中的任何风扇来控制通过GPU的气流来实现这一点。通常情况下,底盘内将有遮盖/管道以帮助完成此过程。集成这些卡的服务器制造商有各种各样的责任,必须遵循NVIDIA的各种技术规范才能实现这一目标。

    如果您碰巧在没有风扇的情况下接触到Tesla GPU并且只是在一些随机机箱中拍了一下,那么您将非常保证以获得此问题中描述的行为。出于这个原因,特斯拉" M"系列和" K"系列GPU通常仅出售给已经过认证过程的OEM。

    由于普通的系统管理员/系统组装商不太可能设计合适的闭环风扇控制系统,并且通常无法轻松访问定义温度传感器和访问方法的必要规范,因此如果你有一个你只需要玩这些,就是在卡上放置高水平的持续气流,无论你放置什么设置。请注意,这很可能会很吵。如果您没有嘈杂的气流水平,您可能没有足够的气流来保持卡在高负荷情况下保持凉爽。此外,您应该关注GPU临时值。请注意,用于监控GPU临时值的nvidia-smi方法不适用于所有M类GPU(即没有风扇的GPU)。不幸的是,Fermi中的温度传感器访问方法以及M类GPU(不同于C类GPU)之前的方法是这样的,以至于无法通过nvidia-smi命令在系统中轻松监视,因此在这些情况下,您将得不到nvidia-smi的温度读数,这使得这种方法更难管理。事情随着开普勒产生而改变,所以现在可以通过nvidia-smi方法和服务器BMC在硬件/固件级别监控温度。

    带风扇的C级产品的温度可以用nvidia-smi监控,无论哪一代。但这通常是没有必要的,因为卡片有自己的控制系统来保持自己的凉爽。

    正如评论中所提到的,所有GPU都有各种保护机制,但都不能保证能够防止损坏。 (如果你将卡扔在火中,那就没有什么可做的了。)但第一种典型的机制是热量节流。在GPU的最大安全操作范围附近的某个预定高温下,GPU固件将独立地减少其时钟以试图防止进一步的温度上升。 (如果卡的时钟速度较慢,那么通常它产生热量的能力也会有所降低。)这是一种粗糙的机制,当这种热量节流发生时,冷却领域的某些东西已经已经失败且保护机制失败