用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。
答
我是否正确地承认这一点?
没有
是否还有其他的数据类型,将工作?
没有
这里的问题是,你不能在这是有针对性地对numba GPU后台运行的代码使用numpy.linalg
。
+0
谢谢。正如有人删去他们的评论(?),我的'玩具'问题没有任何意义,但更普遍的说法是:只有numba/cuda套件中的对象/方法/函数才起作用?从我的问题中链接的示例问题看来,似乎cuda可以使用'ndarray',所以我认为我可以使用numba/cuda-wrapped函数中的一些numpy函数进行计算? – Mike
谢谢罗伯特。我刚刚使用'玩具'问题开始学习cuda工作流程。我想我没有选择一个好例子。 – Mike