HelloWorld fuer OpenCL
======================
Liste der Dateien:
------------------
hello.cc     das Hauptprogramm
hello.h      Vordeklarationen von Hauptprogramm
hello_kernel.cc  Kernel ist der Teil, der auf der Grafikkarte laufen soll
hello_kernel-opt5.cc  eine Optimierte Variante
myopencl.cc  Unterprogramme um Kernel und Daten auf Grafikkarte zu bringen
myopencl.h   Vordeklarationen dazu
makefile     Steuerdatei zum compilieren (uebersetzen des Programms)
kernelcheck.h  Hilfsdatei zur Fehlersuche

Compilieren:
------------
make clean_all
make

Laufen lassen:
--------------
./hello

Optimierte Version ausprobieren:
--------------------------------
Im Hauptprogramm folgende Zeile aendern:
#define OPTIMIERUNG 5  // 0=ohne Optimierung, 5=staerkste Optimierung
Dann mit "make" und "./hello" ausprobieren.
Falls Fehler passiert: mit "make check" optimierten Kernel ueberpruefen.
Als weitere Optimierung kann man den Wert von TPB in myopencl.cc
noch aendern. Sollte ein durch 32 teilbarer Wert sein, bis maximal 1024.


Geschwindigkeitsvergleiche in GFLOPS
====================================
PC:   Gaming-PC		alter Desktop	Uni Desktop	HP-Laptop
GK:   RTX 2080		GT 630 OEM	GT 625		GTX 850M
-----------------------------------------------------------------
CPU:  2.3 GFLOPS	2.6		2.4		2.1
      1530		22		36.2		138 (TPB=128)
opt5: 5150 (TPB=128)	200		99.9		1006 (TPB=512)


Typische Fehlermeldung bei fehlerhaftem Kernel:
-----------------------------------------------
program.build()
Build log for GeForce GT 625:

ptxas info    : 0 bytes gmem
ptxas info    : Compiling entry function 'hello' for 'sm_21'
ptxas info    : Function properties for hello
ptxas         .     0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 31 registers, 32800 bytes smem, 64 bytes cmem[0]
program.build() erfolgreich
kernel_compilieren() erfolgreich
Kernel "hello_kernel.cc" erfolgreich compiliert.
bool kernel_aufrufen()
Optimierung=5
Fehler10: Kernelaufruf misslungen:
  clFinish(-36) CL_INVALID_COMMAND_QUEUE
device_speicher_freigeben()
terminate called after throwing an instance of 'cl::Error'
  what():  clFinish
Abgebrochen (Speicherabzug geschrieben)
-----------------------------------------------

Typische Ausgabe wenn erfolgreich compiliert:
---------------------------------------------
Using platform: NVIDIA CUDA
Using device: GeForce GT 625
Build log for GeForce GT 625:

ptxas info    : 0 bytes gmem
ptxas info    : Compiling entry function 'hello' for 'sm_21'
ptxas info    : Function properties for hello
ptxas         .     0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 31 registers, 32800 bytes smem, 64 bytes cmem[0]
---------------------------------------------
