我正在尝试使用 cupy 加速一些 numpy 代码,但我得到了一些意想不到的结果。
我正在使用 NVIDIA GeForce GTX 1080 Ti 的 Mac Pro 2013 年末 OSX 10.13.6 上运行它。我已经能够在如下所示的 ipython 中重现错误。在确定范数时,共轭与自身的乘积应该给出一个实数。在 numpy 中这是符合预期的,但是使用 cupy 我最终得到了一个虚构的部分。
In [54]: import numpy as np
In [55]: import cupy as cp
In [56]: q = np.arange(4)
In [57]: q.shape=[2,2]
In [58]: q=(0.23+0.33j)*(q+0.43)
In [59]: np.dot(np.conj(q).flatten(),q.flatten())
Out[59]: (3.21975528+0j)
In [60]: q_gpu = cp.asarray(q)
In [61]: cp.dot(cp.conj(q_gpu).flatten(),q_gpu.flatten())
Out[61]: array(3.21975528-1.93612215e-17j)
In [62]: cp.sum(cp.abs(q_gpu)**2)
Out[62]: array(3.21975528)
In [63]: sys.version
Out[63]: '3.7.3 | packaged by conda-forge | (default, Jul 1 2019, 14:38:56) \n[Clang 4.0.1 (tags/RELEASE_401/final)]'
In [64]: sys.version_info
Out[64]: sys.version_info(major=3, minor=7, micro=3, releaselevel='final', serial=0)
我已经意识到在 cupy 和 numpy 中运行代码之间的其他精度不一致。
我究竟做错了什么?