cython float64 error хотя float32 специально установлен - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь реализовать пользовательское @rkp решение для собственного вопроса о том, как ускорить разреженные умножения матриц с помощью Cython с помощью библиотеки pycuda (обратите внимание, этоих второе решение в их посте).

После установки pycuda, pymetis и т. Д. И запуска их точно такого же кода (в IDLE Python 3.5.2) я получаю:

TypeError: 'numpy.float64' object cannot be interpreted as an integer

Получается (воспроизводимо)часть, которая производит эту ошибку:

import numpy as np
import pycuda.autoinit
import pycuda.driver as drv
import pycuda.gpuarray as gpuarray
from pycuda.sparse.packeted import PacketedSpMV
from pycuda.tools import DeviceMemoryPool
from scipy.sparse import csr_matrix

COUNT = 100
N = 5000
P = 0.1
DTYPE = np.int32

#construct objects
np.random.seed(0)
a_dense = np.random.rand(N, N).astype(DTYPE)
a_dense[np.random.rand(N, N) >= P] = 0
a_sparse = csr_matrix(a_dense)

#PacketedSpMV produces the error
spmv = PacketedSpMV(a_sparse, is_symmetric=False, dtype=DTYPE)

И полная ошибка:

Traceback (most recent call last):
  File "C:/Users/svobodov/Desktop/data/tests/cython/t.py", line 23, in <module>
    spmv = PacketedSpMV(a_sparse, is_symmetric=False, dtype=DTYPE)
  File "C:\Python35\lib\site-packages\pycuda\sparse\packeted.py", line 185, in __init__
    local_row_costs)
  File "pkt_build_cython.pyx", line 22, in pycuda.sparse.pkt_build_cython.build_pkt_data_structure
TypeError: 'numpy.float64' object cannot be interpreted as an integer

Сначала я думал, что это ошибка двойной точности, связанная с Cython, но это, очевидно, что-то другоепоскольку он ожидает целое число, а не float32 ..

, я попытался настроить pkt_build_cython.pyx, но без какого-либо успеха или уверенности, что я сделал это правильно.

Есть идеи, как решить эту проблему, пожалуйста?

...