Это нормальное поведение для функции pycuda gpuarray.dot ()? - PullRequest
0 голосов
/ 03 июля 2019

Операция Pycuda gpuarray.dot () не делает то же самое, что операция numpy.dot (). Это специально?

Например, приведенный ниже код выполняет numpy.dot (), а затем gpuarray.dot (). Первый возвращает массив 5x5, а второй - одно число.

import numpy as np
import pycuda.autoinit
import pycuda.gpuarray as gpuarray
np.random.seed(1)

print ("\nNUMPY: result of np.dot - OK")
a = np.array(2 * np.random.random((5, 5)) - 1)
b = np.array(2 * np.random.random((5, 5)) - 1)
a_b_dot = np.dot(a, b)
print (type(a_b_dot), a_b_dot.shape)
print (a_b_dot)

print ("\nPYCUDA: result of gpuarray.dot - NOT OK")
a_gpu = gpuarray.to_gpu(a)
b_gpu = gpuarray.to_gpu(b)
a_b_dot = gpuarray.dot(a_gpu, b_gpu)
print (type(a_b_dot), a_b_dot.shape)
print (a_b_dot)

Выход:

NUMPY: result of np.dot - OK
<class 'numpy.ndarray'> (5, 5)
[[-0.4289689  -1.07826831  0.35264673  1.17316284  0.37989478]
 [-0.23539466  0.62140658  0.02890465  0.64194572 -0.90554719]
 [ 0.6308665  -0.5418927   0.15072667  1.53949101 -0.17648109]
 [-0.28165967 -1.06345895  0.17784186 -0.50902276  1.27061422]
 [ 0.15769648  0.01993701 -0.42621895 -0.07254009 -0.23463897]]

PYCUDA: result of gpuarray.dot - NOT OK
<class 'pycuda.gpuarray.GPUArray'> ()
-0.3611777016515303
...