функция getrs cuSolver над pycuda не работает должным образом

Я пытаюсь создать оболочку 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

Что я делаю не так?

Ответы на вопрос(0)

Ваш ответ на вопрос