OpenCL
-
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?
-
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?
-
So siehts aus schrieb:
Kann man OpenCL und OpenGL eigentlich gleichzeitig benutzen?
Ja, also gemeinsam im selben Programm. OpenGL und OpenCL können miteinander kommunizieren.
So siehts aus schrieb:
Wenn eine GPU z.B. 100 Threads schafft, kann ich dann sagen, 60 Threads für die Grafik und 40 für das Computing?
Nein, zumindest nicht im Moment.
-
dot schrieb:
So siehts aus schrieb:
Kann man OpenCL und OpenGL eigentlich gleichzeitig benutzen?
Ja, also gemeinsam im selben Programm. OpenGL und OpenCL können miteinander kommunizieren.
So siehts aus schrieb:
Wenn eine GPU z.B. 100 Threads schafft, kann ich dann sagen, 60 Threads für die Grafik und 40 für das Computing?
Nein, zumindest nicht im Moment.
Hm, okay und wie wird das dann aufgeteilt?
Macht das die GPU automatisch?Kann ich wenigstens Prioritäten setzten?
-
So siehts aus schrieb:
dot schrieb:
So siehts aus schrieb:
Kann man OpenCL und OpenGL eigentlich gleichzeitig benutzen?
Ja, also gemeinsam im selben Programm. OpenGL und OpenCL können miteinander kommunizieren.
So siehts aus schrieb:
Wenn eine GPU z.B. 100 Threads schafft, kann ich dann sagen, 60 Threads für die Grafik und 40 für das Computing?
Nein, zumindest nicht im Moment.
Hm, okay und wie wird das dann aufgeteilt?
die werden in der reihenfolge abgearbeitet in der du die kommandos schickst.
Macht das die GPU automatisch?
ja, die arbeitet job fuer job ab, sobald genug resourcen fuer einen neuen job vorhanden sind, wird dieser ausgefuehrt.
Kann ich wenigstens Prioritäten setzten?
nur indem du die wichtigen sachen zuerst schickst und mit niedriger prioritaet spaeter.
-
Wobei sich da mit der nächsten GPU Generation was tun wird.
-
dot schrieb:
Wobei sich da mit der nächsten GPU Generation was tun wird.
Hört sich interessant an, hast du mehr Infos dazu?
@rapso
Wirkt sich das nicht in Ruckler aus, wenn z.B: die Grafik im Zeitschlitzverfahren berechnet wird, und das Comuting für z.B. die Physik immer dazwischen berechnet wird?
-
So siehts aus schrieb:
dot schrieb:
Wobei sich da mit der nächsten GPU Generation was tun wird.
Hört sich interessant an, hast du mehr Infos dazu?
Schau dir einfach die Talks der GTC 2012 an, das konkrete Stichwort lautet Hyper-Q.
-
So siehts aus schrieb:
Wirkt sich das nicht in Ruckler aus, wenn z.B: die Grafik im Zeitschlitzverfahren berechnet wird, und das Comuting für z.B. die Physik immer dazwischen berechnet wird?
nein, denn du berechnest beides pro frame, ob du jetzt 50% der zeit physics rechnest und dann 50% renderst oder 100% der zeit zu je 50% beides machst, ist jacke wie hose (wobei es eigentlich besser sein sollte einen job voll auszufuehren, da dann mehr cache lokalitaet vorhanden sein sollte).
falls du physics hast die mehr als ein frame braucht, hast du eh probleme, weil du irgendwas rendern musst was noch nicht bereitsteht. das naechste problem waere, wenn ein job mehr als 2sekunden braucht, wird windows den treiber neustarten (kann man in der registry aendern, aber das haben die aller wenigsten).wenn du richtig boese compute machst (und ich meine nur compute, ohne rendering), wird dein windows mauszeiger ruckeln, weil windows auch nicht mehr dazu kommt aero zu rendern. dann machst du alles richtig
-
Richtig machst du's wenn du den Watchdog Timer für den Grafiktreiber ausschalten musst :p
-
Heute endlich wieder zum Programmieren gekommen. Seit fast einer Stunde möchte ich ein einfaches OpenCl-Beispiel ans Laufen bringen. Habe mir dazu schon NVIDEA SDK 11 runtergeladen und installiert.
Kann jemand mir bitte den Link zu einem einfachen C++-Beispiel schicken, damit ich dieses einfache Beispiel versuchen kann, zu installieren?
Edit: Zu compelieren meine ich selbstverständlich.
Edit: Ich bräuchte nach erster Einschätzung die Headers und die Libs.
-
nvidia's sdk hat eigentlich viele beispiele, einfaches ist z.b. der bandwidth test.
kannst dir auch das intel oder ati sdk installieren (ocl ist nicht abhaengig von deiner GPU).