OpenCL



  • Danke, probiere ich aus.

    1. Ist es richtig, daß sowohl GPUs und CPUs, je nach vorliegender Technik, genutzt werden?

    2. Was ist, wenn ich jetzt SDK runterlade? Also ich habe eine NVIDIA GEFORCE* GT 540M CUDA TM . 2GB in meinem Profiprogrammiernotebook. Würde das fertige Programm bei anderen Grafikkarten wenigstens noch die CPU-Kerne alle berücksichtigen?

    3. Kann man durch Herunterladen einiger weiterer SDKs das eigene Programm so ausstatten, daß es entsprechend vielseitiger funktioniert?


  • Administrator

    Vernunftmensch schrieb:

    1. Ist es richtig, daß sowohl GPUs und CPUs, je nach vorliegender Technik, genutzt werden?

    Du kannst beide nutzen, aber das musst du selber machen, implementieren und vor allem eine kluge Möglichkeit finden, wie man die Arbeit am besten auf diese verteilt.

    Vernunftmensch schrieb:

    2. Was ist, wenn ich jetzt SDK runterlade? Also ich habe eine NVIDIA GEFORCE* GT 540M CUDA TM . 2GB in meinem Profiprogrammiernotebook. Würde das fertige Programm bei anderen Grafikkarten wenigstens noch die CPU-Kerne alle berücksichtigen?

    Musst du dafür sorgen. OpenCL ist Herstellerunabhängig, wenn du es richtig umsetzt, wird es auch eine AMD Graphikkarte mitverwenden, falls eine oder mehrere vorhanden sind.

    Vernunftmensch schrieb:

    3. Kann man durch Herunterladen einiger weiterer SDKs das eigene Programm so ausstatten, daß es entsprechend vielseitiger funktioniert?

    Nein, du benötigst nur die entsprechenden Treiber auf dem Zielcomputer. OpenCL hat das ICD (Installable Client Driver) Konzept:
    http://www.khronos.org/registry/cl/extensions/khr/cl_khr_icd.txt

    Die Graphikkarten installieren ihre OpenCL Treiber heutzutage automatisch und registrieren sie korrekt. Daher musst du da nichts machen, nur die Plattform (oder mehrere) auswählen und die Devices ansprechen, bzw. ihnen was zum Arbeiten geben.

    Bei den CPUs sieht das anders aus, da sind die OpenCL Treiber meistens nicht vorhanden auf dem Zielcomputer. Die Frage ist allerdings sowieso, ob es sich überhaupt lohnt die CPU miteinzubeziehen. Die GT 540M kann, glaub ich, 96 Threads physisch parallel verarbeiten. Ein Intel i7 mit HyperThreading dagegen maximal nur 8. Eine gute Desktopgraphikkarte kann sogar bis zu 512 und mehr Threads physisch parallel verarbeiten.

    Und warum buddelst du so alte Threads raus, statt einen neuen zu eröffnen?

    Grüssli



  • Dravere schrieb:

    Eine gute Desktopgraphikkarte kann sogar bis zu 512 und mehr Threads physisch parallel verarbeiten.

    Seit die GTX 680 heraußen ist, stehen wir bei 1536 Threads 😉


  • Administrator

    dot schrieb:

    Dravere schrieb:

    Eine gute Desktopgraphikkarte kann sogar bis zu 512 und mehr Threads physisch parallel verarbeiten.

    Seit die GTX 680 heraußen ist, stehen wir bei 1536 Threads 😉

    Und ich musste für meine Arbeit noch zwei GTX 560 Ti mit je 384 Cores verwenden - schweinerei. Ich will zwei GTX 680! 😃
    Der Aktuelle Code ist 50x schneller als auf der CPU (i7 2600), ich frage mich, wie schnell er mit zwei GTX 680 wäre 😋

    Grüssli



  • Dravere schrieb:

    Ich will zwei GTX 680! 😃

    Falsch, du willst eine 690 (zwei 680 auf einer Karte -> 3072 CUDA Cores) :p

    Abgesehen davon, hat die 680 leider einige Issues, die sie für Compute Anwendungen unter Umständen nicht ganz so attraktiv machen. Aber die demnächst kommenden Kepler Karten, werden da gewaltig Abhilfe schaffen 😉


  • Administrator

    dot schrieb:

    Dravere schrieb:

    Ich will zwei GTX 680! 😃

    Falsch, du willst eine 690 (zwei 680 auf einer Karte -> 3072 CUDA Cores) :p

    Oder zwei GTX 690 😃
    2x 1150 CHF = 2300 CHF ~ 1916 €
    Kein Problem, zahlt ja der Steuerzahler 😉

    Und die Dinger haben noch 4 GB Videospeicher. Danke für den Hinweis, werde ich in meine kommende Präsentation einbauen.

    Grüssli



  • Schone den Steuerzahler noch bis die GK110 Chips kommen, dann zahlt sich's wirklich aus. Die Dinger sind erst richtig awesome. Die 690 ist dagegen nur ein Appetithäppchen 😉



  • SDK installiert.

    1. Wo finde ich einigen Beispielcode für OpenCl?

    2. Gibt es ein Tool, welches mir anzeigt, wieviele GPUs aktuell aktiv sind?



  • Vernunftmensch schrieb:

    1. Wo finde ich einigen Beispielcode für OpenCl?

    Vermutlich in dem SDK, oder sonst im Internet...

    Vernunftmensch schrieb:

    2. Gibt es ein Tool, welches mir anzeigt, wieviele GPUs aktuell aktiv sind?

    Was genau meinst du damit?



  • *hust* 2013 soll doch schon Maxwell kommen, die sollen laut Nvidia acht mal effizienter werden.



  • Quellcode gefunden.

    Beim Compelieren der Projektmappe gibt es bei jedem Projekt Probleme mit der Konvertierung. Ich benutze Microsoft Visual C++ 2010 Express.

    1. Woran liegt das?

    2. Gibt es ein Tool, das die Auslastung aller GPUs anzeigen kann?





  • Danke.

    1. Warum habe ich Schwierigkeiten, den OpenCl-Quellcode in Microsoft Visual Studio c++ 2010 Express zu konvertieren? (Immerhin heißt die Projektmappe Microsoft Visual Studio Solution (.sln) )

    2. Ich habe hauptsächlich Skalarprodukte und andere Vektoroperationen vor. Habt ihr ganz einfache Beispiele?



  • Vernunftmensch schrieb:

    1. Warum habe ich Schwierigkeiten, den OpenCl-Quellcode in Microsoft Visual Studio c++ 2010 Express zu konvertieren? (Immerhin heißt die Projektmappe Microsoft Visual Studio Solution (.sln) )

    Wenn du darauf wirklich eine Antwort haben willst, dann solltest du uns vielleicht zumindest mal verraten, was genau für "Schwierigkeiten" du eigentlich hast...

    Vernunftmensch schrieb:

    2. Ich habe hauptsächlich Skalarprodukte und andere Vektoroperationen vor. Habt ihr einfache Beispiele?

    "Skalarprodukte und andere Vektoroperationen" ist ein wenig zu allgemein, als dass man da jetzt irgendwas konkretes drauf sagen könnte...



  • zu 1: http://www.occultusactus.de/Screenschots/Konvertierungsproblem.jpg

    zu 2:

    // Cut off sphere.
    void euclidianpointcloud::unmarksphere (cadcam::mwTPoint3d<double> msphere, double r)
    {
    	int x,y,z; //Arraypoint.
    	cadcam::mwTPoint3d<double> realpoint;//Real point.
    
    	//What to calculate?
    	cadcam::mwTPoint3d<double> c;
    	cadcam::mwTPoint3d<double> m_gew;//Rel. point cloud vector;
    	cadcam::mwTPoint3d<double> m_gew2;//Rel. point cloud vector;
    	m_gew=msphere-ref;
    	m_gew=m_gew/grid_delta;
    	double r_gew=r/grid_delta;
    	m_gew2=m_gew+r_gew*einsvektor+einsvektor;
    	if (m_gew2.x()>nx) m_gew2.x(nx);
    	if (m_gew2.y()>ny) m_gew2.y(ny);
    	if (m_gew2.z()>nz) m_gew2.z(nz);
    
    	x=(int) (m_gew.x()-r_gew-1);
    	if (x<0)
    	x=0;
    	while (x<m_gew2.x())
    	{
    	    y=(int) (m_gew.y()-r_gew-1);
    	    if (y<0)
    		y=0;
    		while (y<m_gew2.y())
    		{
    			z=(int) (m_gew.z()-r_gew-1);
    	        if (z<0)
    			z=0;
    			while (z<m_gew2.z())
    			{
    				//Calculate actuall rel. cloude-vector.
    				c.x(x);c.y(y);c.z(z);
    
    				//All points are c to check.
    				realpoint=ref+c*grid_delta;
    				if (~(realpoint-msphere)<=r)
    				mark (realpoint);
    
    				z++;
    			};
    			y++;
    		};
    		x++;
    	};
    };
    


  • dot schrieb:

    Dravere schrieb:

    Eine gute Desktopgraphikkarte kann sogar bis zu 512 und mehr Threads physisch parallel verarbeiten.

    Seit die GTX 680 heraußen ist, stehen wir bei 1536 Threads 😉

    halbes jahr vorher waren es noch 2048 als die 7970 rauskam.

    wobei die GPUs mehr 'threads' verarbeiten als das, das sind nur die ausfuehrungseinheiten fuer arithmetische berechnungen, die thread zahl die active ist, ist glaube ich 8192 bei GK104

    dot schrieb:

    Abgesehen davon, hat die 680 leider einige Issues, die sie für Compute Anwendungen unter Umständen nicht ganz so attraktiv machen. Aber die demnächst kommenden Kepler Karten, werden da gewaltig Abhilfe schaffen

    welche issues? meinst nicht die schlechten luxmark werte wegen fehlender treiber optimierung? was gab es denn da noch was mit neuer hardware gefixt wird?

    Zeus schrieb:

    *hust* 2013 soll doch schon Maxwell kommen, die sollen laut Nvidia acht mal effizienter werden.

    das war aber gegenueber fermi, oder? wuerde in die reihe passen, kepler ist laut NVidia paper ca 2x-3x effizienter

    2. Gibt es ein Tool, das die Auslastung aller GPUs anzeigen kann?

    es gibt z.B. NSight von nvidia, das kann dir sehr genau sagen zu welchem anteil du welche einheiten deiner GPU ausnutzt, zudem werden dir die limitierenden stellen angezeigt und es gibt sogar tipps, wie du noch effizienter die GPU auslasten koenntest.



  • rapso schrieb:

    Zeus schrieb:

    *hust* 2013 soll doch schon Maxwell kommen, die sollen laut Nvidia acht mal effizienter werden.

    das war aber gegenueber fermi, oder? wuerde in die reihe passen, kepler ist laut NVidia paper ca 2x-3x effizienter

    Mein Fehler in der Tat gegenüber Fermi.



  • Hat jemand hier schon ein größeres Projekt in OpenCl fertiggemacht?


  • Administrator

    Vernunftmensch schrieb:

    Hat jemand hier schon ein größeres Projekt in OpenCl fertiggemacht?

    Kommt darauf an, was du als grösseres Projekt bezeichnest. Ein wesentlicher Teil meiner Bachelorarbeit war/ist OpenCL. Ob ich bestehe, kommt allerdings erst noch raus *an den Fingernägeln kaut* 😃

    Die Arbeit ist zwar fertig, aber das Projekt wohl noch länger nicht. Gibt noch viel zu tun und aktuell bremsen auch die OpenCL Treiber von Nvidia. Zumindest scheint es an denen zu liegen. Die GTX 560 Ti will einfach keinerlei Befehle parallel ausführen, heisst z.B. parallel Daten hoch-,runterladen und Kernel ausführen. Habe auch von anderen Entwicklern mit dem gleichem Problem gehört. Wird wohl einfach von den Nvidia Treibern (unter Linux) nicht unterstützt. Bewusst oder unbewusst... Eine Stellungsnahme von Nvidia dazu gibt es jedenfalls nicht, bzw. ich konnte bisher dazu nichts finden.

    Grüssli



  • Kann man OpenCL und OpenGL eigentlich gleichzeitig benutzen?

    Also die GPU sowohl für Computing Sachen als auch für die 3d Darstellung zur selben Zeit nutzen oder braucht man dafür zwei GPUs?

    Und falls das gleichzeitig geht, kann man die Arbeit manuell aufteilen?
    Wenn eine GPU z.B. 100 Threads schafft, kann ich dann sagen, 60 Threads für die Grafik und 40 für das Computing?


Anmelden zum Antworten