[英]Confused Using scikits.cuda.cula
我想使用一些cula功能,例如LU分解或矩陣求逆,但是我對指針輸入有一些問題。 例如對於使用scikits.cuda.cula.culaDeviceSgetrf(m,n,a,lda,ipiv)進行LU分解,則需要使用指針f“ a”參數,但是python中沒有指針(我知道其中的所有變量python是由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:只有length-1數組可以轉換為Python標量
當我嘗試
a_gpu = gpuarray.to_gpu(a)
scikits.cuda.cula.culaDeviceSgetrf(m,n,a_gpu,n,n) :
追溯(最近一次通話):文件“ /usr/local/lib/python2.7/dist-packages/scikits.cuda-0.042-py2.7.egg/scikits/cuda/cula中的文件“”,行1 .py“,第329行,位於culaDeviceSgetrf狀態= _libcula.culaDeviceSgetrf(m,n,int(a),lda,int(ipiv))TypeError:int()參數必須為字符串或數字,而不是'GPUArray'
有什么辦法嗎?
該錯誤信息是非常自我解釋。 您不能將gpuarray
直接傳遞給這些例程,array參數應該是設備指針,該設備指針在內部ctypes.c_void_p
為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)
它應該可以正常工作[免責聲明:未經編譯或測試,使用后果自負]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.