--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
CUDA w przykadach. Wprowadzenie do oglnego programowania procesorw GPU
README.txt
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Lipiec 2010
Copyright (C) 2010 NVIDIA Corp.



Zawarto
----------------------------------------------------
Licencja (license.txt)
Przykady kodu do rozdziaw 3-11
Pliki uywane w wielu projektach
Niniejszy plik README.txt



Kompilacja przykadw
----------------------------------------------------
Wikszo przykadowych programw mona skompilowa przy uyciu kompilatora CUDA firmy NVIDIA nvcc. Aby skompilowa program, np. o nazwie przyklad.cu, naley wpisa polecenie:

> nvcc przyklad.cu

W wyniku kompilacji powstanie plik wykonywalny o nazwie a.exe (Windows) lub a.out (Linux).
Aby wygenerowa plik o innej nazwie, naley uy opcji -o <nazwa-pliku>. Aby przeczyta informacje o innych opcjach kompilatora nvcc, wpisz polecenie

> nvcc --help



Kompilowanie przykadw dla kart grafiki z potencjaem obliczeniowym  > 1.0
----------------------------------------------------
Programy z rozdziau 9, hist_gpu_gmem_atomics.cu i hist_gpu_shmem_atomics.cu wymagaj potencjau obliczeniowego wyszego od 1.0. To samo dotyczy programw dot.cu i hashtable_gpu.cu z dodatku A.

Przykady te wymagaj take do kompilacji i poprawnego dziaania dodatkowego argumentu wiersza polece. Poniewa do poprawnego dziaania programowi hist_gpu_gmem_atomics.cu potrzebny jest potencja obliczeniowy 1.1, najlepiej jest go skompilowa przy uyciu nastpujcego polecenia:

> nvcc -arch=sm_11 hist_gpu_gmem_atomics.cu


Analogicznie program hist_gpu_shmem_atomics.cu wymaga potencjau obliczeniowego 1.2, a wic mona go skompilowa nastpujco:

> nvcc -arch=sm_12 hist_gpu_shmem_atomics.cu




Kompilowanie programw korzystajcych z OpenGL i GLUT
----------------------------------------------------

Nastpujce programy wymagaj do poprawnego dziaania bibliotek OpenGL i GLUT (GL Utility Toolkit):

Rozdzia  4                       Rozdzia  7
    julia_cpu.cu                    heat.cu 
    julia_gpu.cu                    heat_2d.cu

Rozdzia 5                       Rozdzia 8
    ripple.cu                       basic.cu
    shared_bitmap.cu                basic2.cu
                                    heat.cu
Rozdzia 6                           ripple.cu
    ray.cu
    ray_noconst.cu


Aby skompilowa programy z uyciem bibliotek OpenGL i GLUT, naley doda pewne parametry do polece kompilatora nvcc. W systemie Windows s one inne ni w Linuksie.


Linux
-----------------------
W systemie Linux naley najpierw sprawdzi, czy jest zainstalowana biblioteka GLUT. Jednym ze sposobw sprawdzenia tego jest po prostu sprbowanie skompilowania programu, ktry wymaga tej biblioteki. W wierszu polece naley doda parametr -lglut oznaczajcy, e podczas kompilacji programu ma zosta uyta biblioteka libglut. Na przykad:

> nvcc -lglut julia_gpu.cu

Jeli zostanie wywietlony komunikat informujcy o braku pliku GL/glut.h lub bd konsolidacji podobny do poniszego, oznacza to, e biblioteka GLUT nie jest poprawnie zainstalowana:

    /usr/bin/ld: cannot find -lglut


Jeli musisz zainstalowa bibliotek GLUT w systemie Linux, to zalecamy uycie freeglut. Jak to zwykle bywa w Linuksach, kady pakiet mona zainstalowa na wiele sposobw, np. ten opisywany mona pobra w postaci kodu rdowego pod adresem http://freeglut.sourceforge.net/, a nastpnie skompilowa.

Najprostszym sposobem jest skorzystanie z jakiego standardowego menedera pakietw. Poniej pokazane s dwie czsto uywane metody:

> yum install freeglut-devel

> apt-get install freeglut-dev



Windows
-----------------------
Ten pakiet plikw zawiera zarwno 32- jak i 64-bitow wersj biblioteki GLUT skompilowane dla systemu Windows. Moesz ich nie uywa, ale to najszybszy sposb na rozpoczcie pracy.

Aby na przykad skompilowa symulacj wymiany ciepa z rozdziau 7, naley pokaza kompilatorowi, gdzie znajduje si biblioteka GLUT. Jeli jeste w katalogu, w ktrym zostay wypakowane te pliki, to moesz  doda argument -Llib, ktry nakae nvcc szukanie dodatkowych bibliotek w katalogu.\lib. 

> nvcc -Llib chapter07\heat.cu

Aby nastpnie moliwe byo uruchomienie skompilowanego programu a.exe, naley umieci plik glut32.dll (Windows 32-bitowy) lub glut64.dll (Windows 64-bitowy) na ciece PATH (albo zapisa jego kopi w folderze zawierajcym plik a.exe). Pliki te mona znale w folderze bin\ tego pakietu.

Uytkownikom systemu Linux zalecamy uywanie biblioteki freeglut. Biblioteka ta jest dostpna take dla systemu Windows, a wiec uytkownicy Windowsa rwnie mog z niej korzysta. Jednak wwczas pozostae instrukcje bd niewane.


Uwagi dot. systemu Windows
-------------

o Do kompilacji programw przy uyciu wiersza polece najlepiej jest uywa skrtu do wiersza polece instalowanego przez Visual Studio. W wersjach 64-bitowych, w ktrych nie ma zainstalowanego rodowiska Visual Studio Express Edition, skrt ten ma nazw Visual Studio <wersja> x64 Win64 Command Prompt. W systemach 32- i 64-bitowych z zainstalowanym rodowiskiem Visual Studio Express Edition, nazwa ta brzmi Visual Studio <wersja> Command Prompt.

o Jeli uywasz 64-bitowego systemu z zainstalowanym rodowiskiem Visual Studio Express Edition, aby skompilowa 32-bitowe pliki wykonywalne, musisz kompilatorowi nvcc przekaza dodatkowy argument. Jest to konieczne, poniewa Express Edition nie zawiera 64-bitowych narzdzi kompilacji. Bez argumentu -m32, nvcc stosuje domylnie kompilacj 64-bitow, jeli dziaa w systemie 64-bitowym (operacja konsolidacji nie powiedzie si, poniewa Visual Studio  Express Edition zawiera tylko 32-bitowe biblioteki). 

 Aby na przykad skompilowa program Witaj, wiecie z rozdziau 3:

  > nvcc -m32 hello_world.cu

o W systemach Windows Vista i Windows 7 funkcja jdra nie moe dziaa duej ni 2 sekundy. Przekroczenie tego limitu spowoduje uruchomienie mechanizmu Timeout Detection and Recovery (TDR). 
  Wicej informacji na ten temat znajduje si na stronie 
  http://www.microsoft.com/whdc/device/display/wddm_timeout.mspx.
  
Problem ten moe powodowa trudnoci na wolniejszych GPU przy uruchamianiu programw z rozdziau 9 i  dodatku A. Aby tego unikn, sprbuj je uruchamia z mniejsz wartoci SIZE.

