簡體   English   中英

混淆使用scikits.cuda.cula

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM