2011-09-12 24 views
6

Jestem nowy w świecie programowania GPU, próbowałem czytać na Wikipedii i Googling, ale mam jeszcze kilka pytań:Programowanie GPU?

  • Pobrałem kilka przykładów GPU CUDA, byli tacy .cu pliki i niektóre pliki CPP, ale cały kod był normalny C/C++ Kod tylko kilka dziwnych funkcji, takich jak cudaMemcpyToSymbol, a reszta to czysty kod c. Pytanie brzmi, czy kod .cu jest skompilowany z nvcc, a następnie połączony z gcc? Albo jak jest zaprogramowany?

  • jeśli zakodowałem coś do uruchomienia na GPU, czy będzie działać na WSZYSTKICH GPU? czy po prostu CUDA? lub czy istnieje metoda zapisu dla CUDA i metoda zapisu dla ATI oraz metoda zapisu dla obu?

Odpowiedz

10

Aby odpowiedzieć na drugie q podsumowanie:

OpenCL to (jedyna) droga, jeśli chcesz napisać niezależny od platformy kod GPGPU.

Witryna ATI ma w rzeczywistości sporo zasobów do OpenCL, jeśli poszukujesz trochę, a ich przykładowe projekty można bardzo łatwo modyfikować do potrzebnych lub po prostu zrozumieć kod.

OpenCL Spec i referencyjne strony jest również bardzo dobrym źródłem wiedzy: http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/ http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf

Istnieje wiele rozmów, które wyjaśniają niektóre z podstawowych pojęć, a także, że wyjaśnienie, jak napisać szybki kod które polecam (dotyczy to również CUDA).

Aby prawie odpowiedzieć na pierwsze pytanie: W OpenCL kod jest kompilowany w czasie wykonywania do określonego procesora graficznego, którego używasz (w celu zagwarantowania prędkości).

+0

Skompilowany w czasie wykonywania? czy mój kod będzie jak kod bajtowy skopiowany do pamięci w czasie wykonywania i wykonany od tego? – killercode

+0

Twój kod GPGPU będzie ciągiem kodu źródłowego skompilowanym przy użyciu środowiska wykonawczego do obiektu kodu na GPU – nulvinge

5

Prawdopodobnie chcesz zrobić czytanie w tle na CUDA - to nie jest coś, co możesz po prostu odszukać, patrząc na kilka próbek kodu. Obecnie na Amazonie dostępnych jest około 3 różnych książek CUDA, a na stronie http://developer.nvidia.com znajduje się wiele materiałów referencyjnych.

Aby odpowiedzieć na Twoje pytania:

  • tak, .cu pliki zostały skompilowane z nvcc do pośredniej postaci (PTX) - ten jest następnie przekształcany do kodu specyficznego GPU w czasie wykonywania

  • wygenerowany kod będzie działać na podzbiór procesorów graficznych nVIDIA, wielkość podzbioru w zależności od możliwości CUDA użyć w kodzie

+0

Dodanie linku: tak, możesz połączyć '.o'-pliki wygenerowane przez' nvcc' z 'gcc' lub innym kompilatorem C (++). Jednak w większości przypadków łatwiej jest łączyć się z 'nvcc', ponieważ automatycznie łączy twój program ze wszystkimi niezbędnymi bibliotekami cuda (jeśli użyjesz' gcc', będziesz musiał określić je ręcznie). – aland

3

wypełniając odpowiedź udzieloną przez @nulvinge, powiedziałbym, że OpenCL jej do GPU Programowanie jak OpenGL jest do GPU Rendering. Ale nie jest to jedyna opcja dla rozwoju wielu architektur, możesz również użyć DirectCompute, ale nie powiedziałbym, że jest to najlepsza opcja, tylko jeśli chcesz, aby twój kod działał na każdym GPU zgodnym z DirectX11, zawierającym niektóre układy kart graficznych Intel zbyt dobrze?

Ale nawet jeśli myślisz o programowaniu GPU z OpenCL, nie zapomnij przestudiować architektury platform, z których korzystasz. Procesory ATI, procesory graficzne i procesory graficzne NVIDIA mają duże różnice i twój kod jest potrzebny do dostrojenia się do każdej platformy, z której korzystasz, jeśli chcesz ją w pełni wykorzystać ...

szczęście zarówno NVIDIA i AMD mają Programowanie Guides pomóc :)

1

Oprócz poprzednich odpowiedzi, dla CUDA byś potrzebował karty NVIDIA/GPU, chyba że masz dostęp do zdalnego jeden, który chciałbym języki

Heterogeneous Parallel Programming

to nie tylko daje wprowadzenie do CUDA i OpenCL, model pamięci, kafli, obsługa warunków brzegowych i dotyczące wydajności, ale również dyrektywę oparte takich jak OpenACC, wysoki: polecam ten kurs od Coursera język poziomu dla wyrażania paralelizmu w twoim kod, pozostawiając głównie równoległe prace programistyczne dla kompilatora (dobrze zacząć od początku). Ponadto, kurs ten ma platformę internetową, na której można korzystać z ich procesorów graficznych, co jest dobre, aby rozpocząć programowanie GPU bez względu na konfigurację oprogramowania/sprzętu.

0

Jeśli chcesz napisać przenośny kod, który możesz wykonać na różnych urządzeniach GPU, a także na procesorach. Musisz użyć OpenCL.

Właściwie, aby skonfigurować jądro, musisz wpisać kod hosta w C. Plik konfiguracyjny może być krótszy, jeśli chcesz zapisać go dla jądra CUDA w porównaniu do OpenCL.