Jesteś tutaj: Strona Główna > Podstawy Pythona > pyCuda - dostęp do platformy nVidia CUDA w Pythonie
pyCuda to Pythonowe API dla bibliotek platformy nVidia CUDA - służącej do obliczeń w GPU karty graficznej. Opis platformy CUDA dostępny jest w Bibliotece Linuksa. By cieszyć się działającym modułem pyCUDA potrzebujemy odpowiednią kartę graficzną obsługującą tą platformę, pakiet SDK CUDA, a także moduły numpy, lapack i pytools (ze strony pycuda). pyCuda można zainstalować ręcznie, bądź też za pomocą easy_install. W razie wątpliwości należy sięgnąć do dokumentacji.
Podstawy pyCuda
By móc dokonywać obliczeń za pomocą PyCuda na początek trzeba moduł załadować i stworzyć "kontekst" CUDA: Kolejnym etapem będzie zazwyczaj przesłanie danych do karty graficznej. W przypadku PyCuda najczęściej przesyłane będą dane z tablic/macierzy numpy. Dla przykładu stwórzmy macierz 4x4 złożoną z losowych liczb: Domyślnie numpy używa liczb o podwójnej precyzji, których CUDA obecnie nie obsługuje. Należy zastosować liczby o pojedynczej precyzji: A gdy mamy macierz musimy mieć miejsce, do którego ją prześlemy. Należy zaalokować na to pamięć w karcie graficznej: I przesłać dane: Jako prosty przykład napiszemy kod, który podwoi wszystkie liczby w a_gpu. By tego dokonać należy napisać odpowiadający tej operacji kod w CUDA C i przekazać go do konstruktora Jeżeli nie ma błędów, to kod zostanie skompilowany i załadowany w karcie graficznej. Po załadowaniu funkcji można uzyskać do niej dostęp i ją wykonać na naszej macierzy: lang="python"]func = mod.get_function("doublify") func(a_gpu, block=(4,4,1))[/rk:syntax] Po dokonaniu obliczeń pobieramy dane z karty i wyświetlamy, wraz z oryginałem: lang="python"] a_doubled = numpy.empty_like(a) cuda.memcpy_dtoh(a_doubled, a_gpu) print a_doubled print a[/rk:syntax] Przykładowy wynik to:[[ 0.51360393 1.40589952 2.25009012 3.02563429] [-0.75841576 -1.18757617 2.72269917 3.12156057] [ 0.28826082 -2.92448163 1.21624792 2.86353827] [ 1.57651746 0.63500965 2.21570683 -0.44537592]] [[ 0.25680196 0.70294976 1.12504506 1.51281714] [-0.37920788 -0.59378809 1.36134958 1.56078029] [ 0.14413041 -1.46224082 0.60812396 1.43176913] [ 0.78825873 0.31750482 1.10785341 -0.22268796]]
- Dodane: 17.11.2008 przez riklaunim