在cosh上PyCUDA test_cumath.py失败

时间:2015-03-03 10:33:17

标签: python numpy pycuda tesla

我在装有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/

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

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 =====

有没有人建议GPU和CPU之间的差异来自cosh?略高于2e-6的容差,测量值为2.38e-6对我来说有点奇怪。特别是,由于其他测试成功了......?

1 个答案:

答案 0 :(得分:1)

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

实际上,这使得根据数值结果编写测试变得冗长乏味。 错误的分类变得不那么尖锐,必须回答“什么是好的?”。人们可能会认为这很疯狂,在许多情况下会出现问题,甚至是错误的。我认为这不应该在这里提出异议。

您如何看待2e-6容忍从何而来?我会说某人尝试在他/她认为足够正确的方差与他/她预期的差异之间找到一个权衡取舍,几乎。在CPU世界2e-6已经。因此,这里有人选择了容差,以便考虑GPU平台之间预期的异构程度。

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

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

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