我在装有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对我来说有点奇怪。特别是,由于其他测试成功了......?
答案 0 :(得分:1)
在GPGPU / CUDA社区中,确实知道当使用相同的API时,不同的硬件平台和CUDA库版本可能会产生不同的结果。差异总是很小。因此,跨平台存在一些异质性。
实际上,这使得根据数值结果编写测试变得冗长乏味。 右和错误的分类变得不那么尖锐,必须回答“什么是好的?”。人们可能会认为这很疯狂,在许多情况下会出现问题,甚至是错误的。我认为这不应该在这里提出异议。
您如何看待2e-6
容忍从何而来?我会说某人尝试在他/她认为足够正确的方差与他/她预期的差异之间找到一个权衡取舍,几乎。在CPU世界2e-6
已经大。因此,这里有人选择了大容差,以便考虑GPU平台之间预期的异构程度。
在这种情况下,实际上,它可能意味着没有选择容差来反映GPU平台的真实异构性。
话虽如此,GPGPU社区也意识到,令人难以置信的GPU卡数量很多(基本上是坏的)。在运行严肃的应用程序之前,必须对GPU卡进行详尽的测试。特别是,GPU卡应该可以产生可重复的结果。波动是卡损坏的指标。特斯拉通常不会像消费卡那样受到影响,但即使在那里我们也看到过它。你有第二张相同类型的GPU卡吗?它会产生相同的结果吗?
您要么将GPU卡识别为“已损坏”(与相同类型的其他卡相比较),或者您应该向PyCUDA提交错误报告并告诉他们容差是不够的。