2017-10-05 67 views
2

我想解決一個使用numba和GPU處理使用CUDA的線性系統。用numba和CUDA解決使用Python的線性系統

我已經安裝了所有相關的軟件包並進行了測試,因此看起來我的GPU和CUDA等設置正確。

我的代碼是:

import numpy as np 
import time 

from numba import vectorize, cuda 


@vectorize(['float64(float64, float64)'], target='cuda') 
def solver(A, b): 
    return np.linalg.solve(A, b) 


def main(): 

    A = np.random.rand(100, 100).astype(np.float64) 
    b = np.random.rand(100, 1).astype(np.float64) 

    start = time.time() 
    C = solver(A, b) 
    vector_add_time = time.time() - start 

    print("Took " + str(vector_add_time) + " seconds to solve") 


if __name__ == '__main__': 
    main() 

談到了@vectorize...線,代碼運行正常。然而,當我嘗試用numba和CUDA做到這一點,我得到的錯誤的一個長長的清單,在那裏我覺得他最相關的一個是:

raise TypingError(msg) 
numba.errors.TypingError: Failed at nopython (nopython frontend) 
np.linalg.solve() only supported for array types 

我認爲問題是,numpy.linalg.solve不接受的數據類型cuda要求。

我是否正確地承擔了這個?是否還有其他數據類型可以使用?

this示例問題,相同的數據類型被傳遞給函數,所以我認爲問題在於numpy.linalg。

+0

謝謝羅伯特。我剛剛使用'玩具'問題開始學習cuda工作流程。我想我沒有選擇一個好例子。 – Mike

回答

1

我是否正確地承認這一點?

沒有

是否還有其他的數據類型,將工作?

沒有

這裏的問題是,你不能在這是有針對性地對numba GPU後臺運行的代碼使用numpy.linalg

+0

謝謝。正如有人刪去他們的評論(?),我的'玩具'問題沒有任何意義,但更普遍的說法是:只有numba/cuda套件中的對象/方法/函數才起作用?從我的問題中鏈接的示例問題看來,似乎cuda可以使用'ndarray',所以我認爲我可以使用numba/cuda-wrapped函數中的一些numpy函數進行計算? – Mike