QT und OpenCL, dll Problem

Alles rund um die Programmierung mit Qt
Antworten
Boonnoob
Beiträge: 3
Registriert: 4. April 2013 22:31

QT und OpenCL, dll Problem

Beitrag von Boonnoob »

Hallo zusammen,

ich versuche seit einer Weile eine QT Anwendung zu bauen, die mit OpenCL zusammenarbeitet.
Grundsätzlich ist das kein Problem, wenn da nicht das folgende Problem wäre:

(a) Starte ich eine Deploy Version mit verlinkter OpenCL.dll der Anwendung auf einem Rechner der die OpenCL.dll verfügbar hat, ist alles in Ordnung

(b) Verlinke ich die OpenCL.dll nicht und nutze statt dessen QLibrary mit .resolve bekomme ich auf 32-Bit Windows Systemen bei einer x86 Version falsche Werte aus der .dll geliefert

Code: Alles auswählen

    typedef cl_int (*CLGetPlatformIDs)(cl_uint, cl_platform_id*, cl_uint*);
    CLGetPlatformIDs clGetPlatformIDs;
    m_OpenCL_Dll.setFileName("OpenCL");

    if (m_OpenCL_Dll.load())
    {
     clGetPlatformIDs = (CLGetPlatformIDs)m_OpenCL_Dll.resolve("clGetPlatformIDs");
     CHECK_FUNC_PTR(clGetPlatformIDs, "clGetPlatformIDs");
    
     cl_uint num_platforms;
     err = clGetPlatformIDs(0, NULL, &num_platforms);
     //num_platforms erhält unter 32-Bit Werte wie 5732531?!?
    }  
(c) Starte ich eine Deploy Version mit verlinkter OpenCL.dll der Anwendung auf einem Rechner ohne OpenCL.dll, bekomme ich die Meldung "Programm konnte nicht gestartet werden, da OpenCL.dll fehlt", die Anwendung startet also gar nicht erst

Wie bekommt man es hin, dass entweder
- mit QLibrary.resolve unter 32-Bit Win mit einer x86 Anwendung die richtigen Werte zurückkommen (Fall (b))
- oder (Fall (c)) die fehlende Library nicht zum Abbruch der Anwendung führen

Hat irgendjemand eine gute Idee?

Danke Euch!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QT und OpenCL, dll Problem

Beitrag von Christian81 »

Und warum lieferst du die opencl.dll nicht einfach mit wenn dein Programm sie schon braucht??
Und bei b) muss die DLL ja auch vorliegen sonst gehts ja auch nicht. Was meinst Du mit x86 und 32Bit? Kompilierst Du mit 64 Bit Qt oder was?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Boonnoob
Beiträge: 3
Registriert: 4. April 2013 22:31

Re: QT und OpenCL, dll Problem

Beitrag von Boonnoob »

Christian81 hat geschrieben:Und warum lieferst du die opencl.dll nicht einfach mit wenn dein Programm sie schon braucht??
Soweit ich gesehen habe, gibt es hier unterscheidliche OpenCL.dll's für NVidia, ATI, Intel etc.
Die Frage an dieser Stelle ist, kann ich eine OpenCL.dll von einer z.B. Ati Treiber Installation nehmen und einfach dem Programm hinzufügen oder müsste hier ein Installer auswerten, welche Graka eingebaut ist und welche OpenCL.dll die "richtige" ist.
Christian81 hat geschrieben:Und bei b) muss die DLL ja auch vorliegen sonst gehts ja auch nicht. Was meinst Du mit x86 und 32Bit? Kompilierst Du mit 64 Bit Qt oder was?
Grundsätzlich nicht, da das Programm zumindest starten kann, wenn die Dll per resolve nicht gefunden wird. Die Ursprünglichen GPU Funktionen werden dann von CPU Funktionen übernommen.
Mit x86 ist die Zielplatform gemeint, also 32Bit, QT ist natürlich in 32 und 64Bit kompiliert und wird je nach Zielplatform eingesetzt.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QT und OpenCL, dll Problem

Beitrag von Christian81 »

Das mit 32 und 64 Bit hab ich noch nicht verstanden... 32Bit Qt muss auch 32 Bit opencl.dll sein und umgekehrt. Wenn dem nicht so ist kann es nicht gehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Boonnoob
Beiträge: 3
Registriert: 4. April 2013 22:31

Re: QT und OpenCL, dll Problem

Beitrag von Boonnoob »

Christian81 hat geschrieben:Das mit 32 und 64 Bit hab ich noch nicht verstanden... 32Bit Qt muss auch 32 Bit opencl.dll sein und umgekehrt. Wenn dem nicht so ist kann es nicht gehen.
Das habe ich auch gedacht. Die Anwendung ist auf einem Win64-System gebaut, als Zielplatform aber Win32. Und auf einem native 32Bit Windows kommt es zu Fehlzugriffen bei "clGetPlatformIDs(0, NULL, &num_platforms);" aus der OpenCL.dll (die aufgrund des Win32 System ja garantiert 32Bit ist)
Antworten