我想使用一些cula功能,如LU分解或矩阵逆,但我有一些关于指针输入的问题。例如,对于使用scikits.cuda.cula.culaDeviceSgetrf(m,n,a,lda,ipiv)进行LU分解,需要使用指针f "a“参数,但在python中没有指针(我知道python中的所有变量都是by ref)。那么在这种情况下我该怎么办呢?我应该使用ctype库来创建python吗?
这就是我想要做的:
import numpy as np
import scikits.cuda.cula as cula
import pycuda.gpuarray as gpuarray
cula.culaInitialize()
//I create a square matrix for simplicity
a=np.array([[1,2,3,4],[6,7,8,9],[7,2,3,5],[2,4,5,6]])
n=b.shape[0]
ida=ipv=m
scikits.cuda.cula.culaDeviceSgetrf(m,n,a,n,n)status = _libcula.culaDeviceSgetrf(m,n,int(a),lda,int(ipiv)) TypeError:只有长度-1数组可以转换为Python标量
当我试着
a_gpu = gpuarray.to_gpu(a)
scikits.cuda.cula.culaDeviceSgetrf(m,n,a_gpu,n,n) :追溯(最近一次调用):File "",第1行,在File "/usr/local/lib/python2.7/dist-packages/scikits.cuda-0.042-py2.7.egg/scikits/cuda/cula.py",第329行,在culaDeviceSgetrf status = _libcula.culaDeviceSgetrf(m,n,int(a),lda,int(ipiv)) TypeError: int()参数必须是字符串或数字,而不是'GPUArray‘
有解决办法吗?
发布于 2012-09-02 07:38:23
错误信息是非常清楚的。不能将一个gpuarray直接传递给这些例程,数组参数应该是一个设备指针,在内部被转换到Python ctypes.c_void_p以传递给CULA库。PyCUDA的gpuarray包括一个成员ptr,它将返回指向GPU内存的底层指针。
如果你做了这样的事情:
a_gpu = gpuarray.to_gpu(a)
scikits.cuda.cula.culaDeviceSgetrf(m,n,a_gpu.ptr,n,n)它应该正确工作,免责声明:从不编译,或测试,使用自己的风险。
https://stackoverflow.com/questions/12215172
复制相似问题