OpenCL



  • vernunftmensch@ubuntu:~/NVIDIA_GPU_Computing_SDK/OpenCL$ echo $PATH

    /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/cuda/bin:/usr/local/cuda/lib

    vernunftmensch@ubuntu:~/NVIDIA_GPU_Computing_SDK/OpenCL$ echo $LD_LIBRARY_PATH

    :/usr/local/cuda/lib64:/usr/local/cuda/lib

    vernunftmensch@ubuntu:~/NVIDIA_GPU_Computing_SDK/OpenCL$ make

    make[1]: Betrete Verzeichnis '/home/vernunftmensch/NVIDIA_GPU_Computing_SDK/OpenCL/common'

    a - obj/release/oclUtils.cpp.o

    make[1]: Verlasse Verzeichnis '/home/vernunftmensch/NVIDIA_GPU_Computing_SDK/OpenCL/common'

    make[1]: Betrete Verzeichnis '/home/vernunftmensch/NVIDIA_GPU_Computing_SDK/shared'

    make[1]: Verlasse Verzeichnis '/home/vernunftmensch/NVIDIA_GPU_Computing_SDK/shared'

    make[1]: Betrete Verzeichnis '/home/vernunftmensch/NVIDIA_GPU_Computing_SDK/OpenCL/src/oclSortingNetworks'

    /usr/bin/ld: cannot find -lOpenCL

    collect2: ld gab 1 als Ende-Status zurück

    make[1]: *** [../../..//OpenCL//bin//linux/release/oclSortingNetworks] Fehler 1

    make[1]: Verlasse Verzeichnis '/home/vernunftmensch/NVIDIA_GPU_Computing_SDK/OpenCL/src/oclSortingNetworks'

    make: *** [src/oclSortingNetworks/Makefile.ph_build] Fehler 2

    vernunftmensch@ubuntu:~/NVIDIA_GPU_Computing_SDK/OpenCL$

    Bei mir läuft jetzt der neuste Treiber NVIDEA GEFORCE GT 540M CUDA 2GB. Nach der Installation der Treiber habe ich erst das Toolkit CODA, dann das GPUPROGRAMMING-Zeugs von http://developer.nvidia.com/cuda-downloads heruntergeladen unb beides ordentlich installiert. Danach habe ich PATH und LD_LIBRARY_PATH ~/.bashrc angepaßt.

    Warum meckert ld?



  • Vernunftmensch schrieb:

    Warum meckert ld?

    Deswegen:

    Vernunftmensch schrieb:

    /usr/bin/ld: cannot find -lOpenCL

    Offenbar gibt es keine Datei namens libOpenCL.irgendwas im Library-Suchpfad.



  • Warum fragst du nicht Google? Zweiter Treffer.

    http://ubuntuforums.org/showthread.php?t=1877568



  • Problem durch richtiges Setzen der Umgebungsvariablen gelöst.

    Neues Problem: ../../..//shared//inc/GL/glxew.h:62:22: schwerwiegender Fehler: X11/Xlib.h: Datei oder Verzeichnis nicht gefunden



  • Auch danach kanns du googeln. Tip: Mehr Treffer gibt's, wenn du die Sprache der Ausgaben auf Englisch stellst.



  • vernunftmensch@ubuntu:~/NVIDIA_GPU_Computing_SDK/OpenCL/bin/linux/release$ sudo optirun ./oclDotProduct
    
    [oclDotProduct] starting...
    
    Error -1001 in clGetPlatformIDs Call !!!
    
    !!! Error # -1000 (Unspecified Error) at line 81 , in file oclDotProduct.cpp !!!
    
    Exiting...
    
    vernunftmensch@ubuntu:~/NVIDIA_GPU_Computing_SDK/OpenCL/bin/linux/release$
    

    Mitlerweile weiß ich, daß damit gemeint sein könnte, daß keine GPUs gefunden werden. 😞

    Was nu?



  • Vernunftmensch schrieb:

    Mitlerweile weiß ich, daß damit gemeint sein könnte, daß keine GPUs gefunden werden. 😞

    frage vorweg, google hat nichts ergeben? ich haette gedacht, dass du da nicht der einzige mit diesem fehler bist.



  • Im Netz finde ich garnichts. Das ist ja das Problem.



  • versuch es mit
    linux Error "-1001" in clGetPlatformIDs
    das sieht nach einer ganzen menge aus, klingt als ob es ein generischer error waere der viele gruende haben koennte.



  • Ich weiß nicht mehr weiter. Google kriege ich auch nichts raus.



  • Jetzt habe ich es unter Windows geschafft. OpenCl läuft.



  • void Dummy()
     {
    	int i=0;
    	while (i<1000)
    	{
    	i++;
    	};
     }
    
     // OpenCL Kernel Function for element by element vector addition
    __kernel void VectorAdd(__global const float* a, __global const float* b, __global float* c, int iNumElements)
    {
        // get index into global data array
        int iGID = get_global_id(0);
    
        // bound check (equivalent to the limit on a 'for' loop for standard/serial C code
        if (iGID >= iNumElements)
        {   
            return; 
        }
    
    	dummy ();
    
        // add the vector elements
        c[iGID] = a[iGID] + b[iGID];
    }
    

    Das klappt nicht. Wie muß man das abändern?



  • Sorry, klappt doch. Problem nur, daß dummy einmal klein und Dummy einmal groß geschrieben ist. 🙂


  • Administrator



  • // to mark a point
    void mark (float3 p, float3 ref, int nx, int ny, int nz, float grid_delta, __global char* resultcloud)
    {
    	//Postpone in reference point.
    	float3 c=p-ref;
    	int xxx;
    	int yyy;
    	int zzz;
    
    	//Strech according to grid_delta.
    	c=c/grid_delta;
    
    	xxx=(int) c.x;
    	yyy=(int) c.y;
    	zzz=(int) c.z;
    
    	//Calculate position in array to be marked.
    	if (xxx<nx)
    	if (yyy<ny)
    	if (zzz<nz)
    	if (xxx>=0)
    	if (yyy>=0)
    	if (zzz>=0) ;;;
    	//resultcloud [ (xxx+yyy*nx+zzz*nx*ny)]=1;
    }
    

    Wo könnte mein Fehler liegen? Ich möchte falsche Punkte rausfiltern, damit mein
    OpenCl nicht abbricht. Obiger Code ist in der selben OpenCl *.cl Datei.



  • Vernunftmensch schrieb:

    [code]
    Wo könnte mein Fehler liegen?

    uns den fehler nicht zu nennen den du beheben moechtest ist der einzige den ich entdecken kann. ansonsten sieht es fehlerfrei aus ;).



  • Die Prozedure umgehe ich jetzt.
    Der Fehler bleibt.
    Unter bestimmten Voraussetzungen (die ich noch nicht kenne) wird schon resultcloud[100]=1; nicht mehr von OpenCl akzeptiert.
    Ich hoffe, daß nicht die Größe des Codeblocks bzw. die Größe der interngenutzten Variablen überschritten wird.

    Gibt ja leider keine Fehlermeldung 😞


  • Administrator

    Was heisst "Fehler"? Was heisst "nicht mehr von OpenCL aktzeptiert"?

    Vernunftmensch schrieb:

    Gibt ja leider keine Fehlermeldung 😞

    Doch, gibt es verschiedentlich. Jede Funktion gibt Fehlercodes zurück, welche man prüfen kann. Zudem gibt es, wie in meinem letzten Beitrag hier erwähnt, auch ein Buildlog.

    Aber solange du uns nicht sagst, was deine Erwartungen vom Programm sind und was du stattdessen erhälst, bzw. was stattdessen passiert, uns somit beschreibst, was du als Fehler siehst, können wir dir unmöglich helfen.

    Grüssli



  • Folgender Code ist innerhalb der richtigen *.cl und läuft.

    Nehme ich aber wesentlich größere Werte als 10*10*10 sehe ich kurz schwarz, der NVIDIA-Treiber lädt neu und dann FAILED beim Zurückschreiben den Ergebnisbuffers.

    min_gew.x=min_gew.y=min_gew.z=0;
    	max_gew.x=10;	max_gew.y=10;	max_gew.z=10;
    
    	x=(int)min_gew.x;
    	while (x<max_gew.x)
    	{
    
    		y=(int)min_gew.y;
    		while (y<max_gew.y)
    		{
    			z=(int)min_gew.z;
    			while (z<max_gew.z)
    			{
    
    				//Calculate point 
    				c.x=(x);
    				c.y=(y);
    				c.z=(z);
    				//std::cout << c;
    
    				//Calculating
    				realpoint=ref+c*grid_delta;
    
    				t=(dotproduct(realpoint,pointc)-fest_oben)/fest_unten;
    
    				quermittelpunkt=pointa+t*pointc;
    
    		         if (t>=0)
    				 if (t<=1)
    					if (vectorlength(realpoint-quermittelpunkt)<=r)
    				      {
    
    						resultcloud [x+y*nx+z*nx*ny]=1;
    
    			          };
    
    				z++;
    			};
    			y++;
    		};
    
    		x++;
    	};
    

    Warum funktioniert hier 10*10*10, aber mehr nicht? Oder baue ich hier zu OpenCl unbemerkt ein Feld auf oder sowas?


  • Administrator

    Und wie rufst du den Kernel auf? Was übergibst du? Wie hast du die verschiedenen Grössen gesetzt? Kannst du es in einem KLEINEN Projekt reproduzieren? usw.

    Sollen wir hellsehen? Da muss ich dich leider enttäuschen. Der GROSSADMINISTRATOR hat alle Glaskugeln konfisziert.

    Grüssli


Anmelden zum Antworten