2015-06-10 11 views

Odpowiedz

4

CUDA jest propietary dla NVIDIA ale jest szeroko stosowany w obliczeniach naukowych. Julia ma kilka pakietów związanych z CUDA, ale używam CUDArt, który działa całkiem dobrze dla mnie.

https://github.com/JuliaGPU/CUDArt.jl

Zazwyczaj trzeba ręcznie przydzielić wolnej pamięci na GPU, ale ten pakiet ma zajęcia CudaArray które są zarejestrowane z Julia GC, więc nie trzeba się martwić o wycieki pamięci. Gdy Twoje potrzeby pamięciowe są bardziej wymagające, możesz oczywiście zarządzać pamięcią ręcznie.

Kiedy zaczynasz pisać swoje własne jądra, możesz je również wywołać bezpośrednio z Julii, jeśli skompilujesz je do PTX (nie do wspólnych obiektów/bibliotek dll). Możesz przeżyć na żywo je w ramach istniejącej sesji Julii, jeśli podejdziesz do tego w ten sposób.

+1

Nice. Ale nie mam karty graficznej NVIDIA. Używam radeona. I OpenCL jest agnostykiem Vendora, jak sądzę. – suryakrupa

4

Z powodzeniem używam biblioteki przy użyciu the Julia wrapper. Obsługuje zarówno CUDA, jak i OpenCL (i CPU).

Jest to dość łatwe do zrozumienia i zastosowania:

#Random number generation 
a = rand(AFArray{Float64}, 100, 100) 
#Basic arithmetic operations 
c = sin(a) + 0.5 
d = a * 5 

Oto wzorzec run:

julia> benchmark() 
INFO: Warmup done! 
INFO: Matmul 
Time (CPU): 0.042887455 
Time (GPU): 0.0417952754 
INFO: FFT 
Time (CPU): 0.074640831 
Time (GPU): 0.009890463 
INFO: Rand 
Time (CPU): 0.089245094 
Time (GPU): 0.0097255858 
INFO: Vec sort 
Time (CPU): 0.11730852 
Time (GPU): 0.0384733068 
+0

czy ArrayFire.jl jest nadal rozwijany? obecnie zawodzi Julia 0.4 i 0.5. –

Powiązane problemy