首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >困惑使用scikits.cuda.cula

困惑使用scikits.cuda.cula
EN

Stack Overflow用户
提问于 2012-08-31 12:14:44
回答 1查看 931关注 0票数 0

我想使用一些cula功能,如LU分解或矩阵逆,但我有一些关于指针输入的问题。例如,对于使用scikits.cuda.cula.culaDeviceSgetrf(m,n,a,lda,ipiv)进行LU分解,需要使用指针f "a“参数,但在python中没有指针(我知道python中的所有变量都是by ref)。那么在这种情况下我该怎么办呢?我应该使用ctype库来创建python吗?

这就是我想要做的:

代码语言:javascript
复制
   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标量

当我试着

代码语言:javascript
复制
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‘

有解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-02 07:38:23

错误信息是非常清楚的。不能将一个gpuarray直接传递给这些例程,数组参数应该是一个设备指针,在内部被转换到Python ctypes.c_void_p以传递给CULA库。PyCUDA的gpuarray包括一个成员ptr,它将返回指向GPU内存的底层指针。

如果你做了这样的事情:

代码语言:javascript
复制
a_gpu = gpuarray.to_gpu(a)
scikits.cuda.cula.culaDeviceSgetrf(m,n,a_gpu.ptr,n,n)

它应该正确工作,免责声明:从不编译,或测试,使用自己的风险。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12215172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档