Witam w pierwszej części krótkiego kursu OpenCL. Postanowiłem opisać swoje pierwsze kroki z technologią OpenCL.
Nie będę tutaj przytaczał teorii na temat działania karty graficznej czy historii OpenCL. Skupię się na trzech rzeczach: pobraniu potrzebnych plików, konfiguracji środowiska w systemie Windows oraz podaniu kilku działających przykładów.
Środowisko
W trakcie kursu będziemy używali środowiska Microsoft Visual C++ 2010 Express, ale możemy użyć do tego celu dowolnego środowiska dla języka C++. Przed utworzeniem projektu wchodzimy do ustawień (menu Tools – Options) i dodajemy rozszerzenie „cl”(Text Editor – File Extension). Dzięki temu kod OpenCL będzie kolorowany przez środowisko.
Tworzymy nowy projekt wybierając z menu pozycję File – New – Project, a następnie Win32 Console Application. W kreatorze wybieramy opcje Console Application oraz Empty Project. Dodajemy jeden plik o nazwie Main.cpp i uzupełniamy go standardową funkcją „main”.
OpenCL
Do wyboru mam dwa SDK, jedno dla kart AMD, a drugie NVIDII.
http://developer.amd.com/tools/heterogeneous-computing/amd-accelerated-parallel-processing-app-sdk/
https://developer.nvidia.com/cuda-downloads
W katalogu, w którym zainstalowaliśmy SDK szukamy plików „cl.h” oraz „OpenCL.lib”. Jeżeli pobraliśmy SDK NVIDII, to znajdziemy je w katalogach:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include\CL C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\Win32
Biblioteka dla systemu 64-bitowego w katalogu:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64
Ścieżki do powyższych katalogów dodajemy w ustawieniach projektu:
Configuration-Properties - C/C++ - General - Additional Include Directories Configuration-Properties - Linker - General - Additional Library Directories
Polecam jednak nie ustawiać ścieżek bezwzględnych w projekcie, a zamiast tego skopiować odpowiednie pliki do katalogu z projektem i ustawić ścieżki względne.
Dodajemy również bibliotekę OpenCL.lib w:
Configuration-Properties - Linker - Input - Additional Dependencies
Po wykonaniu tych operacji struktura katalogów powinna wyglądać następująco:
- dependencies - OpenCL - include - CL - cl.h - cl_d3d9_ext.h - ... - lib - OpenCL.lib - OpenCL.sln - OpenCL.vcxproj - OpenCL.vcxproj
Kod programu
Sprawdzamy czy wszystko działa poprawnie. W plik Main.cpp dołączamy plik CL/cl.h oraz definiujemy zmienną typu „cl_int”. Jeżeli program skompiluje się bez błędów, to znaczy, że poprawnie przygotowaliśmy nasze środowisko do pracy z OpenCL-em.
Cały kod powinien wyglądać tak:
#include
#include
#include <CL/cl.h>
int main()
{
cl_int hello = 0;
return 0;
}
Źródła w serwisie GitLab.
W kolejnej części kursu sprawdzimy czy nasz sprzęt obsługuje OpenCL.
Linki
https://developer.nvidia.com/opencl
http://www.khronos.org/registry/cl/specs/opencl-1.0.29.pdf
http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/
http://www.thebigblob.com/getting-started-with-opencl-and-gpu-computing/