opencl



  • hallo hab da ein kleines Problem.

    ich will opencl benutzen um auf der grafikkarte zu rechnen.

    so hab jetzt einfach mal das tutorial http://developer.amd.com/gpu/ATIStreamSDK/pages/TutorialOpenCL.aspx

    angefangen.

    int main()
    {
    
     cl_int err = CL_SUCCESS;
    
     cl::Context context(CL_DEVICE_TYPE_CPU, 0, NULL, NULL, &err); 
    
     ersterTest e;
     e.checkErr(err, "Conext::Context()");
    
    	system("pause");
    	return 0;
    }
    

    bekomme dann folgenden fehler (linker fehler)

    1>------ Erstellen gestartet: Projekt: OpenCl, Konfiguration: Debug
    1>Main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_clCreateContextFromType" in Funktion ""public: __thiscall cl::Context::Context(unsigned __int64,int ,void (__cdecl)(char const *,void const *,unsigned int,void *),void *,int *)" (??0Context@cl@@QAE@_KPAHP6AXPBDPBXIPAX@Z41@Z)".
    1>Main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_clReleaseContext" in Funktion ""public: static int __cdecl cl::detail::ReferenceHandler<struct _cl_context *>::release(struct _cl_context *)" (?release@?========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    die funktion clCreateContextFromTypesieht in der headerdatei si aus

    extern sagt ja soweit ich weiss das die funktion bekannt gemacht wird aber nicht gesagt wird wo sie zu finden ist.

    ich glaube hier ist das problem. wenn ich mich nicht irre wie kann ich mein problem jetzt lösen?

    der header <CL/cl.hpp>
    ist inkludiert, dieser inkludiert die weiteren header. diese sind wiederum bekannt.

    extern CL_API_ENTRY cl_context CL_API_CALL
    clCreateContextFromType(const cl_context_properties * /* properties */,
                            cl_device_type                /* device_type */,
                            void (*pfn_notify)(const char *, const void *, size_t, void *) /* pfn_notify */,
                            void *                        /* user_data */,
                            cl_int *                      /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
    


  • Du musst noch eine Objektcode-Library dazulinken. (opencl.obj/.o/.a oder so), in den Headern findest du vmtl. nur Prototypen.



  • im tutorial steht daüber nichts.

    nun gut woher weiss ich dann welche ich dazu linken muss und wo finde ich die?

    wenn ich was dazu linken will dann ´muss ich doch unter linker -> Eingabe -> zusätzliche Abhängikeiten gehen
    oder?

    dort kann ich aber nicht browsen , kann nur manuell eintippen und noch auf makros klicken.

    wie gebe ich da die libs ein? wobei ich nicht mal weiss welche



  • ich denke es ist die opencl.lib

    kann das sein? ich weiss auch wo die ist habs auch schon über #pragma comment(lib, "OpenCL.lib")versucht wobei ich dann die opencl.lib in den projektordner kopiert habe



  • Ja, es kann auch eine .lib sein, die Datei sollte richtig sein. Entweder du schiebst die Datei dorthin, wo auch deine CPPs sind und fügst die vorhandene Datei dem Projekt hinzu, oder du machst einen Eintrag unter Optionen, in welchem Pfad die IDE nach libs suchen soll und fügst die lib, wie du's gesagt hast, entweder mit Projektoptionen o. pragma hinzu. Der Weg mit den Standardpfaden ist der gängigste (o. DLLs), Google wird dir helfen.



  • ja das hab ich ja gemacht, da wo die cpps sind ist die lib datei und hab sie über #pragma comment(lib, "OpenCL.lib")
    denke ich hinzugefügt.
    der fehler kommt aber trotzdem.

    hab auch über projekt vorhandenes elemt hinzufühen die lib datei hizugefügt.
    sie ist jetzt im projektbaum zu sehen.

    ich google schon ungefähr seit 12 uhr 😞
    hab auch einen post in diesem forum con opencl gemacht noch ohne antwort.



  • hab jetzt gesehen das ich etwas vom tutorial nicht gemacht habe

    define __NO_STD_VECTOR // Use cl::vector and cl::string and 
    #define __NO_STD_STRING  // not STL versions, more on this later#include <CL/cl.hpp>
    

    diese defines machen zunächst die eine fehlermeldung weg aber dafür habe ich jetzt 11 von diesen hier

    ...ects\opencl\opencl\cl\cl.hpp(1408) : error C3861: "alloca": Bezeichner wurde nicht gefunden.
    


  • Irgendein include fehlt, schau in der Referenz, wo diese low-level-Funktion herkommt, evtl. <alloca.h>, aber keine Ahnung.



  • Ich hatte das gleiche Problem. Hab in der cl.hpp malloc.h zu den includes hinzugefügt.


Anmelden zum Antworten