用numba和CUDA解决使用Python的线性系统

问题描述:

我想解决一个使用numba和GPU处理使用CUDA的线性系统。用numba和CUDA解决使用Python的线性系统

我已经安装了所有相关的软件包并进行了测试,因此看起来我的GPU和CUDA等设置正确。

我的代码是:

import numpy as np 
import time 

from numba import vectorize, cuda 


@vectorize(['float64(float64, float64)'], target='cuda') 
def solver(A, b): 
    return np.linalg.solve(A, b) 


def main(): 

    A = np.random.rand(100, 100).astype(np.float64) 
    b = np.random.rand(100, 1).astype(np.float64) 

    start = time.time() 
    C = solver(A, b) 
    vector_add_time = time.time() - start 

    print("Took " + str(vector_add_time) + " seconds to solve") 


if __name__ == '__main__': 
    main() 

谈到了@vectorize...线,代码运行正常。然而,当我尝试用numba和CUDA做到这一点,我得到的错误的一个长长的清单,在那里我觉得他最相关的一个是:

raise TypingError(msg) 
numba.errors.TypingError: Failed at nopython (nopython frontend) 
np.linalg.solve() only supported for array types 

我认为问题是,numpy.linalg.solve不接受的数据类型cuda要求。

我是否正确地承担了这个?是否还有其他数据类型可以使用?

this示例问题,相同的数据类型被传递给函数,所以我认为问题在于numpy.linalg。

+0

谢谢罗伯特。我刚刚使用'玩具'问题开始学习cuda工作流程。我想我没有选择一个好例子。 – Mike

我是否正确地承认这一点?

没有

是否还有其他的数据类型,将工作?

没有

这里的问题是,你不能在这是有针对性地对numba GPU后台运行的代码使用numpy.linalg

+0

谢谢。正如有人删去他们的评论(?),我的'玩具'问题没有任何意义,但更普遍的说法是:只有numba/cuda套件中的对象/方法/函数才起作用?从我的问题中链接的示例问题看来,似乎cuda可以使用'ndarray',所以我认为我可以使用numba/cuda-wrapped函数中的一些numpy函数进行计算? – Mike