CLPong

goldmomo

Ensign
Registriert
Sep. 2013
Beiträge
143
Hi,

falls es jemanden interessierte, ich habe heute mal wieder mit OpenCL rumgespielt und das Paradebeispiel für Parallelisierung programmiert -> Pong :o

Source/Binaries gibt’s unter www.goldmomo.de/store/CLPong.zip

Das Programm läuft bei mir zumindest auf einer AMD-Karte (ich hoffe alle DLLs sind dabei (deswegen etwas groß)).
Das Projekt braucht zum kompilieren Qt (+AMD APP SDK), ist vielleicht ein brauchbares Template für jemanden …

Achso, meine Grafikarte hat es natürlich nicht ausgelastet .. :cool_alt:
 
Der CL-Kernel war unter einer Stunde fertig (ist auch nicht optimaler Code, der Rest ist aus meinen Bastelprojekten kopiert).

Eigentlich war es nur eine „Denksportaufgabe“ mit dem gleichen Kernel/Code für jedes Pixel (also theoretisch max. 1269000 Threads) Pong hinzubekommen, der Sinn sei mal dahingestellt … :streicheln:
 
Ich sehe nur einen Bluescreen, sonst nichts.
Ergänzung ()

Ah doch: Ein paar Schieber unten.
 
Dann ist etwas beim Kernel-Kompilieren schief gegangen, habe es nur auf meinen Rechner getestet ... Fehlerhandling = Blaues Bild im Fenster...

NVidia Karte?
 
Zuletzt bearbeitet:
Ich baue morgen mal vernünftige Fehlermeldungen ein, würde schon gern wissen wo das Problem liegt, habe irgendwie keinen Rechner mit NV-Karte in der Nähe.
 
So, habe es mal geupdated (jetzt gibt's Textbox mit Status-Meldungen). Einfach mal hier Ausgabe posten, wenn es nicht funktioniert.
 
Found 2 OpenCl platforms
Platform #0: AMD Accelerated Parallel Processing
Platform #1: NVIDIA CUDA
Selected platform is 'NVIDIA CUDA'
Device #0: GeForce GTX 1050 Ti use this one
Use compile flags = ''
CLProgram was not successfull because:
�U)IA CUDA
Found 2 OpenCl platforms
Platform #0: AMD Accelerated Parallel Processing
Platform #1: NVIDIA CUDA
Selected platform is 'NVIDIA CUDA'
No GPU device available.
Choose CPU as default device.
Use compile flags = '-Werror'
CLProgram was not successfull because:
��IA CUDA
 
Und wenn du als Platform "AMD Accelerated Parallel Processing" auswählst?
 
Found 2 OpenCl platforms
Platform #0: AMD Accelerated Parallel Processing
Platform #1: NVIDIA CUDA
Selected platform is 'AMD Accelerated Parallel Processing'
No GPU device available.
Choose CPU as default device.
Device #0: Intel(R) Core(TM) i7 CPU 930 @ 2.80GHz use this one
Use compile flags = ''
CLProgram was not successfull because:
Internal error: Compilation init failed.

Found 2 OpenCl platforms
Platform #0: AMD Accelerated Parallel Processing
Platform #1: NVIDIA CUDA
Selected platform is 'AMD Accelerated Parallel Processing'
Device #0: Intel(R) Core(TM) i7 CPU 930 @ 2.80GHz use this one
Use compile flags = ''
CLProgram was not successfull because:
Internal error: Compilation init failed.
 
Na so ein ...
 
new Account() schrieb:
Selected platform is 'AMD Accelerated Parallel Processing'
Du mußt die AMD-CPU-Plattform rausnehmen (registry), das funktioniert sonst nicht.

Ansonsten kannst Du die Quellen mit Qt 5.11 kompilieren, wenn Du Cuda installiert hast (OpenCLPong.pro):
Makefile:
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = openCLPong
TEMPLATE = app

INCLUDEPATH += "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.2/include"
INCLUDEPATH += "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.2/include/CL"
LIBS        += -L"C:/Program Files\NVIDIA GPU Computing Toolkit/CUDA/v9.2/lib/x64" -lOpenCL

SOURCES +=  main.cpp\
            mainwindow.cpp \
            displaywidget.cpp \
            clworker.cpp \
            platformdialog.cpp \
            debugprinter.cpp

HEADERS  += mainwindow.h \
            displaywidget.hpp \
            resolution.h \
            clworker.h \
            platformdialog.h \
            debugprinter.h

FORMS    += mainwindow.ui \
            platformdialog.ui

DISTFILES += \
    PongKernel.cl

RESOURCES += \
    resource.qrc
=> goldmomo1.jpg

Was ich nicht im Quelltext gefunden habe: an welcher Stelle werden die (Pfeil?) Tasten an die Slider gebunden? ich wollte das nämlich umändern ...
 
Die Pfeiltasten werden von Qt scheinbar direkt an den aktiven Slider gemapped.
Man könnte sie auch rausschmeissen und Keyevents verarbeiten.

Hab den Code 'geupdated' (Taste A,Y ist linkes Paddle, K,M rechtes).

Im Mainwindow ctor
installEventFilter(this);

und

Code:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
 if(event->type() == QEvent::KeyPress)
 {
    QKeyEvent *keyEvent = (QKeyEvent*)event;

    int s1 = ui->horizontalSliderX->value();
    int s2 = ui->horizontalSliderY->value();
    int updateValue = 2;

    switch(keyEvent->key())
    {
        case Qt::Key_A: s1-=updateValue; break;
        case Qt::Key_Y: s1+=updateValue; break;
        case Qt::Key_K: s2-=updateValue; break;
        case Qt::Key_M: s2+=updateValue; break;
    }

    ui->horizontalSliderX->setValue(s1);
    ui->horizontalSliderY->setValue(s2);

 }
 return false;
}

im header
Code:
protected:
 bool eventFilter(QObject *obj, QEvent *event);
 
Zuletzt bearbeitet:
Zurück
Oben