PyCUDA test_cumath.py 在 cosh 上失败

PyCUDA test_cumath.py fails on cosh

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

使用 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 与 cosh 的 CPU 结果之间的差异从何而来?测量值 2.38e-6 略微超过 2e-6 的公差对我来说有点奇怪。特别是,由于其他测试成功...?

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

的确,这使得基于数值结果编写测试变得乏味。 正确错误的分类变得不那么清晰,必须回答"what is good enough?"。人们可能会认为这很疯狂,而且在许多情况下是有问题的,甚至是错误的。我觉得这不应该在这里争论。

你怎么看,2e-6 容忍度最初是从哪里来的?我会说有人 试图 在多少方差 he/she 认为足够正确和多少方差 he/she 预期,实际上。在 CPU 世界中 2e-6 已经 。因此,这里有人选择 容差,以考虑 GPU 平台之间预期的异构程度。

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

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

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