Я пытаюсь создать оболочку pycuda, вдохновленную библиотекой scikits-cuda, для некоторых операций, представленных в новой библиотеке cuSolver от Nvidia. Я хочу решить линейную систему вида AX=B с помощью факторизации LU, для этого сначала используйте cublasSgetrfBatched из scikits-cuda, который дает мне факторизацию LU; затем с помощью этой факторизации я хочу решить систему, используя cusolverDnSgetrs из cuSolve, который я хочу обернуть, когда я выполняю вычисление, возвращаю статус 3, матрицы, которые должны дать мне ответ, не меняются, НО *devInfo равен нулю, глядя в документацию cusolver, говорится :
CUSOLVER_STATUS_INVALID_VALUE=Функции было передано неподдерживаемое значение или параметр (например, отрицательный размер вектора).
libcusolver.cusolverDnSgetrs.restype=int
libcusolver.cusolverDnSgetrs.argtypes=[_types.handle,
ctypes.c_char,
ctypes.c_int,
ctypes.c_int,
ctypes.c_void_p,
ctypes.c_int,
ctypes.c_void_p,
ctypes.c_void_p,
ctypes.c_int,
ctypes.c_void_p]
"""
handle is the handle pointer given by calling cusolverDnCreate() from cuSolver
LU is the LU factoriced matrix given by cublasSgetrfBatched() from scikits
P is the pivots matrix given by cublasSgetrfBatched()
B is the right hand matix from AX=B
"""
def cusolverSolveLU(handle,LU,P,B):
rows_LU ,cols_LU = LU.shape
rows_B, cols_B = B.shape
B_gpu = gpuarray.to_gpu(B.astype('float32'))
info_gpu = gpuarray.zeros(1, np.int32)
status=libcusolver.cusolverDnSgetrs(
handle, 'n', rows_LU, cols_B,
int(LU.gpudata), cols_LU,
int(P.gpudata), int(B_gpu.gpudata),
cols_B, int(info_gpu.gpudata))
print info_gpu
print status
handle= cusolverCreate() #get the initialization of cusolver
LU, P = cublasLUFactorization(...)
B = np.asarray(np.random.rand(3, 3), np.float32)
cusolverSolveLU(handle,LU,P,B)
Выход:
[0]
3
Что я делаю неправильно?
'n'
является допустимым выбором для параметра транспонирования. Это должно быть что-то вродеCUBLAS_OP_N
(или, возможно, 0), хотя я не уверен, как это выглядит в python. - person Robert Crovella   schedule 22.04.2015N
илиn
в реализации Fortran BLAS. - person Robert Crovella   schedule 22.04.2015