1

我在一台配备 TESLA C2075 的机器上安装了 pycuda。我在安装了 CUDA-6.0 编译器的 Ubuntu 14.04 上运行。

使用 python 2.7.9(通过 anaconda 发行版)和 numpy 1.9.0,我从 Andreas Kloeckner 在他的网站上提供的 ZIP 文件中安装了 pycuda 2014.1。(http://mathema.tician.de/software/pycuda/

运行该 ZIP 文件提供的测试一切顺利,除了该test_cumath.py文件。我收到以下错误:

E               AssertionError: (2.3841858e-06, 'cosh', <type 'numpy.complex64'>)`
E               assert <built-in method all of numpy.bool_ object at 0x7f00747f3880>()`
E                +  where <built-in method all of numpy.bool_ object at 0x7f00747f3880> = 2.3841858e-06 <= 2e-06.all

test_cumath.py:54: AssertionError`
===== 1 failed, 27 passed in 12.57 seconds =====

有没有人建议cosh的GPU和CPU结果之间的这种差异来自哪里?测量值 2.38e-6 略高于 2e-6 的容差,这对我来说有点奇怪。尤其是其他的测试都成功了……?

4

1 回答 1

1

在 GPGPU/CUDA 社区中,确实知道不同的硬件平台和 CUDA 库版本在使用相同的 API 时可能会产生不同的结果。差异总是很小的。因此,跨平台存在一些异质性。

事实上,这使得基于数值结果编写测试变得乏味。的分类变得不那么清晰,必须回答“什么是足够好的?”。人们可能会认为这很疯狂,在许多情况下是有问题的,甚至是错误的。我认为这不应该在这里争论。

你怎么看,最初的2e-6宽容是从哪里来的?我想说有人试图在他/她认为足够正确的方差与他/她实际上期望的方差之间找到一个折衷。在CPU世界2e-6里已经很大了。因此,这里有人选择了较大的容差,以考虑 GPU 平台之间预期的异质性程度。

在这种情况下,实际上,这可能意味着没有选择容差来反映 GPU 平台的实际异构性。

话虽如此,GPGPU 社区也意识到了一个事实,即数量惊人的 GPU 卡是不稳定的(基本上是坏的)。在运行严肃的应用程序之前,必须对GPU 卡进行详尽的测试。特别是,GPU 卡应该产生可重现的结果。波动是卡片损坏的指标。特斯拉通常不会像消费卡那样受到影响,但即使在那里我们也看到了。你有第二张同类型的 GPU 卡吗?它会产生相同的结果吗?

要么您将您的 GPU 卡识别为“损坏”(通过与相同类型的其他卡进行比较),要么您应该向 PyCUDA 提交错误报告并告诉他们容差不足。

于 2015-03-03T12:04:47.310 回答