2017-10-05 3 views
2

Ich versuche ein lineares System mit numba mit GPU-Verarbeitung mit CUDA zu lösen.Lineares System mit Python mit Numba und CUDA lösen

Ich habe alle relevanten Pakete installiert und getestet, so scheint es, dass meine GPU und CUDA usw. richtig eingerichtet ist.

Mein Code ist:

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() 

kommentierte die @vectorize... Linie, wird der Code in Ordnung läuft. Allerdings, wenn ich versuche, es mit numba und CUDA zu tun, ich eine lange Liste von Fehlern kommen, wo ich denke, dass er am wichtigsten ist:

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

Ich nehme an, das Problem ist, dass numpy.linalg.solve nicht die Datentypen akzeptiert von cuda gefordert.

Bin ich richtig bei der Annahme? Gibt es andere Datentypen, die funktionieren?

In this Beispiel Problem, der gleiche Datentyp wird an die Funktion übergeben, so denke ich, das Problem liegt bei numpy.linalg.

+0

Danke Robert. Ich habe gerade ein "Spielzeug" -Problem benutzt, um mit dem Cuda-Arbeitsablauf zu beginnen. Ich nehme an, ich habe kein gutes Beispiel gewählt. – Mike

Antwort

1

Bin ich richtig bei der Annahme?

Keine

Gibt es andere Datentypen, die funktioniert?

Kein

Das Problem hierbei ist, dass Sie nicht numpy.linalg in Code verwenden können, die auf dem numba GPU Backend laufen ausgerichtet ist.

+0

Danke. Wie von jemandem hervorgehoben, der seinen Kommentar (?) Gelöscht hat, macht mein "Spielzeug" -Problem keinen Sinn, aber allgemeiner: werden nur Objekte/Methoden/Funktionen aus der Numba/Cuda-Suite funktionieren? Aus dem Beispielproblem, das in meiner Frage verlinkt ist, scheint es, dass cuda mit dem 'ndarray' arbeiten kann, also nehme ich an, dass ich Berechnungen mit einigen anonymen Funktionen innerhalb einer numba/cuda-gewickelten Funktion durchführen kann. – Mike

Verwandte Themen