Theano:使用 CPU 与 GPU 获取矩阵点时与 Numpy 的差异

Theano: Discrepancy vs Numpy when taking matrix dot with CPU vs GPU

我最近让 Theano 使用 CUDA v7.5、CUDNN v3 和 Visual Studio 2013 社区版开发 Windows 10。为了验证它是否正常工作,我使用 CPU 和 GPU 从 Theano Windows install page 测试了以下代码:

import numpy as np
import time
import theano
A = np.random.rand(10000,10000).astype(theano.config.floatX)
B = np.random.rand(10000,10000).astype(theano.config.floatX)
np_start = time.time()
AB = A.dot(B)
np_end = time.time()
X,Y = theano.tensor.matrices('XY')
mf = theano.function([X,Y],X.dot(Y))
t_start = time.time()
tAB = mf(A,B)
t_end = time.time()
print "NP time: %f[s], theano time: %f[s] (times should be close when run on CPU!)" %(
                                           np_end-np_start, t_end-t_start)
print "Result difference: %f" % (np.abs(AB-tAB).max(), )

我得到了以下结果:

G:\ml\Theano\Projects>python Test.py
NP time: 10.585000[s], theano time: 10.587000[s] (times should be close when run on CPU!)
Result difference: 0.000000

G:\ml\Theano\Projects>python Test.py
Using gpu device 0: GeForce GTX 970 (CNMeM is disabled)
NP time: 10.838000[s], theano time: 1.294000[s] (times should be close when run on CPU!)
Result difference: 0.022461

如您所见,在 GPU 上进行计算时存在 0.022 的显着差异。只是想知道这是意料之中还是我做错了什么。

这是我的 .theanorc:

[global]
device = gpu
floatX = float32

[nvcc]
fastmath = True

GPU 的加法和乘法运算顺序不一致。由于浮点数不准确,出现一些差异是正常的。

如果相对差异较小,则该大小的绝对差异可能是正常的。

要更多地比较它们 "correctly" 使用 theano.tensor.basic._allclose(result1, result2)