我们有一个涉及昂贵的线性代数计算的Python代码。数据存储在NumPy数组中。该代码使用numpy.dot和一些BLAS和LAPACK函数,这些函数目前通过scipy.linalg.blas和scipy.linalg.lapack访问。当前代码是为CPU编写的。我们想要转换代码,以便在GPU上执行一些NumPy,BLAS和LAPACK操作。
我正在努力确定最佳方法。据我所知,Numba不支持GPU上的BLAS和LAPACK功能。似乎PyCUDA可能是最好的路线,但我无法确定PyCUDA是否允许使用BLAS和LAPACK功能。
编辑:我们需要将代码移植到不同的GPU架构,包括AMD和Nvidia。虽然PyCUDA似乎提供了所需的功能,但CUDA(以及PyCUDA)无法在AMD GPU上运行。
答案 0 :(得分:3)
您是否尝试过调查scikit-cuda? https://scikit-cuda.readthedocs.io/en/latest/#
似乎使用pyCUDA来访问CUDA-toolkit库(CUBLAS,CUSOLVER,CUFFT,CULA)以及基于CUBLAS提供它们自己的一些LAPACK例程的实现。
我已经将它用于CUBLAS例程,这是一个愉快的经历,我希望它对LAPACK来说是一样的
答案 1 :(得分:0)
另一个选择是ArrayFire。虽然此程序包不包含完整的BLAS和LAPACK实现,但它确实提供了许多相同的功能。它与OpenCL和CUDA兼容,因此与AMD和Nvidia架构兼容。它有Python的包装器,使其易于使用。