| Autor |
Nachricht |
ReduX
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.06.2007
Beiträge: 194
|
ReduX Mitglied
05:16:33 02.01.2010 Titel: |
OpenCL |
Zitieren |
Morgen,
Habe ich das Richtig verstanden, dass man mit OpenCL Berrechnungen auf so ziemlich allen Grafikkarten anstellen kann, also die GPU für Rechenoperationen nutzen?
Wenn ja, was haltet ihr davon? Habt ihr schon bessere Libs benutzt? Möchte mich eventuell in diese Lib einarbeiten, da ja auf Mathematischer Ebene immer mehr mit GPU's gearbeitet wird.
MFG ReduX |
|
|
|
 |
macuser__
Unregistrierter
|
macuser__ Unregistrierter
23:48:43 02.01.2010 Titel: |
|
Zitieren |
auf http://www.macresearch.org/opencl gibt es ein Videotutorial zu opencl. Ich würde dir einfach mal empfehlen dir die erste Episode anzusehen, auch wenn du keinen mac nutzt. Geht dabei eigentlich kaum um den Mac, außer das opencl darauf läuft. (Also in der 1. Episode) |
|
|
|
 |
rapso
Moderator
Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7727
|
rapso Moderator
01:28:20 03.01.2010 Titel: |
|
Zitieren |
opencl ist keine sprache um GPUs zu programmieren, sondern eine um compute programme zu schreiben die hardware unabhaengig sind. opencl programme kannst du auf verschiedenen platformen laufen lassen. das mandelmaenchen was ich portiert habe skaliert in etwa
x86 - 100%
cell - 10x (1000%)
gtx260 - 100x
um es auf x86 laufen zu lassen kannst du das streamsdk von amd ausprobieren
fuer cell gibt es bei ibm libs
fuer geforce kannst du dir das nv-sdk ziehen
alle haben opencl samples dabei. |
_________________ Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3
|
|
 |
DarkShadow44
Mitglied
Benutzerprofil
Anmeldungsdatum: 12.06.2009
Beiträge: 517
|
DarkShadow44 Mitglied
17:59:16 06.01.2010 Titel: |
|
Zitieren |
Müsste letztendlich egal sein, mit welchem SDK du kompilierst, da OpenCL plattformunabhängig ist.
Bei Nvidia gibt's übrigens ab GeForce 8 auch CUDA, mit dem man auch Berechnungen auf der GPU durchführen kann.
Aber das wird vermutlich nur auch Grafikkarten von Nvidia funktionieren... |
|
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
14:10:20 17.06.2012 Titel: |
OpenCl und Microsoft C++ Visual Studio 2010 Express |
Zitieren |
Habe schon in der Uni gelernt, wie man auf Kerne parallelisiert. Z.B. beim Berechnen der Zahl Pi, bei der man auch kritische Bereiche beachten muß.
Aktuell versuche ich den Übergang vom Hobbyprogrammierer zum professionellen Programmierer zu schaffen. Bei mir ist Microsoft C++ Visual Studio 2010 Express bereits installiert und ich habe ein Projekt, das ich darin parallelisieren möchte.
Was muß man nachinstallieren und wie, um OpenCl darunter nutzen zu können? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
14:35:00 17.06.2012 Titel: |
|
Zitieren |
Du brachst das entsprechende SDK deines Grafikkartenherstellers... |
_________________ one point of view will never reveal the entire scene.
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
14:55:47 17.06.2012 Titel: |
|
Zitieren |
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? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
17:39:09 17.06.2012 Titel: |
|
Zitieren |
| 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/re ....... nsions/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 |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
21:43:42 17.06.2012 Titel: |
|
Zitieren |
| 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 |
_________________ one point of view will never reveal the entire scene.
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
00:16:21 18.06.2012 Titel: |
|
Zitieren |
| 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 |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
00:23:06 18.06.2012 Titel: |
|
Zitieren |
| Dravere schrieb: | Ich will zwei GTX 680!  |
Falsch, du willst eine 690 (zwei 680 auf einer Karte -> 3072 CUDA Cores)
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 |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 00:24:43 18.06.2012, insgesamt 3-mal bearbeitet |
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
01:08:57 18.06.2012 Titel: |
|
Zitieren |
| dot schrieb: | | Dravere schrieb: | Ich will zwei GTX 680!  |
Falsch, du willst eine 690 (zwei 680 auf einer Karte -> 3072 CUDA Cores)  |
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 |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
01:15:17 18.06.2012 Titel: |
|
Zitieren |
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 |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 01:22:56 18.06.2012, insgesamt 3-mal bearbeitet |
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
19:09:07 18.06.2012 Titel: |
|
Zitieren |
SDK installiert.
1. Wo finde ich einigen Beispielcode für OpenCl?
2. Gibt es ein Tool, welches mir anzeigt, wieviele GPUs aktuell aktiv sind? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
Zuletzt bearbeitet von Vernunftmensch am 19:10:15 18.06.2012, insgesamt 1-mal bearbeitet |
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
20:00:08 18.06.2012 Titel: |
|
Zitieren |
| 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? |
_________________ one point of view will never reveal the entire scene.
|
|
 |
Zeus
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.09.2003
Beiträge: 2847
|
Zeus Mitglied
20:12:42 18.06.2012 Titel: |
|
Zitieren |
*hust* 2013 soll doch schon Maxwell kommen, die sollen laut Nvidia acht mal effizienter werden. |
|
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
20:21:50 18.06.2012 Titel: |
|
Zitieren |
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? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Zeus
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.09.2003
Beiträge: 2847
|
Zeus Mitglied
20:24:01 18.06.2012 Titel: |
|
Zitieren |
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
20:30:57 18.06.2012 Titel: |
|
Zitieren |
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? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
Zuletzt bearbeitet von Vernunftmensch am 20:32:22 18.06.2012, insgesamt 2-mal bearbeitet |
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
20:33:21 18.06.2012 Titel: |
|
Zitieren |
| 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... |
_________________ one point of view will never reveal the entire scene.
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
20:46:03 18.06.2012 Titel: |
|
Zitieren |
zu 1: http://www.occultusactus. ....... Konvertierungsproblem.jpg
zu 2: | Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | // 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++;
};
}; | | |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
rapso
Moderator
Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7727
|
rapso Moderator
17:01:56 20.06.2012 Titel: |
|
Zitieren |
| 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
| Zitat: | | 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. |
_________________ Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3
|
|
 |
Zeus
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.09.2003
Beiträge: 2847
|
Zeus Mitglied
18:02:51 20.06.2012 Titel: |
|
Zitieren |
| 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. |
|
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
18:16:33 20.06.2012 Titel: |
|
Zitieren |
Hat jemand hier schon ein größeres Projekt in OpenCl fertiggemacht? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
19:05:50 20.06.2012 Titel: |
|
Zitieren |
| 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 |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
So siehts aus
Unregistrierter
|
So siehts aus Unregistrierter
10:53:59 21.06.2012 Titel: |
|
Zitieren |
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? |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
10:59:08 21.06.2012 Titel: |
|
Zitieren |
| 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. |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 11:00:38 21.06.2012, insgesamt 2-mal bearbeitet |
|
 |
So siehts aus
Unregistrierter
|
So siehts aus Unregistrierter
11:21:32 21.06.2012 Titel: |
|
Zitieren |
| 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? |
|
|
|
 |
rapso
Moderator
Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7727
|
rapso Moderator
11:26:32 21.06.2012 Titel: |
|
Zitieren |
| 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.
| Zitat: |
Macht das die GPU automatisch? | ja, die arbeitet job fuer job ab, sobald genug resourcen fuer einen neuen job vorhanden sind, wird dieser ausgefuehrt.
| Zitat: |
Kann ich wenigstens Prioritäten setzten? | nur indem du die wichtigen sachen zuerst schickst und mit niedriger prioritaet spaeter. |
_________________ Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
11:28:44 21.06.2012 Titel: |
|
Zitieren |
Wobei sich da mit der nächsten GPU Generation was tun wird. |
_________________ one point of view will never reveal the entire scene.
|
|
 |
So siehts aus
Unregistrierter
|
So siehts aus Unregistrierter
12:10:16 21.06.2012 Titel: |
|
Zitieren |
| 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? |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
12:15:41 21.06.2012 Titel: |
|
Zitieren |
| 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. |
_________________ one point of view will never reveal the entire scene.
|
|
 |
rapso
Moderator
Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7727
|
rapso Moderator
13:21:24 21.06.2012 Titel: |
|
Zitieren |
| 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 |
_________________ Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
|
dot Mitglied
13:24:18 21.06.2012 Titel: |
|
Zitieren |
Richtig machst du's wenn du den Watchdog Timer für den Grafiktreiber ausschalten musst |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 13:24:29 21.06.2012, insgesamt 1-mal bearbeitet |
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
23:48:51 06.07.2012 Titel: |
Anfänger in OpenCl |
Zitieren |
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. |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
Zuletzt bearbeitet von Vernunftmensch am 00:12:46 07.07.2012, insgesamt 2-mal bearbeitet |
|
 |
raps
Unregistrierter
|
raps Unregistrierter
01:12:08 07.07.2012 Titel: |
|
Zitieren |
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). |
|
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
04:04:35 07.07.2012 Titel: |
|
Zitieren |
Also ein Beispiel habe ich jetzt.
Die richtigen Dateien im richtigen Verzeichnis CL/ auch.
Jetzt wird die OpenCl.lib nicht gefunden. Ich verzweifel. Ich finde auch kein OpenCl for dummies oder sowas. |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Andreas XXL
Mitglied
Benutzerprofil
Anmeldungsdatum: 12.01.2004
Beiträge: 1011
|
Andreas XXL Mitglied
14:25:57 07.07.2012 Titel: |
|
Zitieren |
| rapso schrieb: |
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). |
Kannst Du bitte erläutern, wie man diese Zeitbeschränkung in der Registry abschaltet? |
|
|
|
 |
rapso
Moderator
Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7727
|
rapso Moderator
21:13:39 08.07.2012 Titel: |
|
Zitieren |
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
16:36:28 10.07.2012 Titel: |
OpenCL unter Ubuntu 12.04 LTS |
Zitieren |
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? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Christoph
Moderator
Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 5945
|
Christoph Moderator
20:02:13 10.07.2012 Titel: |
Re: OpenCL unter Ubuntu 12.04 LTS |
Zitieren |
| 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. |
_________________ Wenn Word für Längeres geeignet wäre, würde es nicht Word, sondern Sentence, Page oder Article heißen.
|
|
 |
nman
Moderator
Benutzerprofil
Anmeldungsdatum: 19.02.2002
Beiträge: 13912
|
nman Moderator
20:34:53 10.07.2012 Titel: |
|
Zitieren |
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
10:33:03 11.07.2012 Titel: |
|
Zitieren |
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 |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
nman
Moderator
Benutzerprofil
Anmeldungsdatum: 19.02.2002
Beiträge: 13912
|
nman Moderator
11:57:10 11.07.2012 Titel: |
|
Zitieren |
Auch danach kanns du googeln. Tip: Mehr Treffer gibt's, wenn du die Sprache der Ausgaben auf Englisch stellst. |
_________________ …but tuesday's just as bad.
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
12:23:17 11.07.2012 Titel: |
|
Zitieren |
| Code: | 1 2 3 4 5 6 7 8 9 10 11 | 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? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
rapso
Moderator
Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7727
|
rapso Moderator
13:01:49 11.07.2012 Titel: |
|
Zitieren |
| 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. |
_________________ Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
00:05:44 12.07.2012 Titel: |
|
Zitieren |
Im Netz finde ich garnichts. Das ist ja das Problem. |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
rapso
Moderator
Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7727
|
rapso Moderator
10:12:23 12.07.2012 Titel: |
|
Zitieren |
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. |
_________________ Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
00:26:01 13.07.2012 Titel: |
|
Zitieren |
Ich weiß nicht mehr weiter. Google kriege ich auch nichts raus. |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
11:44:04 15.07.2012 Titel: |
|
Zitieren |
Jetzt habe ich es unter Windows geschafft. OpenCl läuft. |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
13:34:57 15.07.2012 Titel: |
Normale kleine Funktionen innerhalb OpenCl |
Zitieren |
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
13:45:18 15.07.2012 Titel: |
|
Zitieren |
Sorry, klappt doch. Problem nur, daß dummy einmal klein und Dummy einmal groß geschrieben ist. :-) |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
14:35:53 15.07.2012 Titel: |
|
Zitieren |
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
11:28:25 17.07.2012 Titel: |
|
Zitieren |
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 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. |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
rapso
Moderator
Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7727
|
rapso Moderator
12:23:34 17.07.2012 Titel: |
|
Zitieren |
| 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 . |
_________________ Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
13:10:06 17.07.2012 Titel: |
|
Zitieren |
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 :-( |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
14:11:50 17.07.2012 Titel: |
|
Zitieren |
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 |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
14:17:27 17.07.2012 Titel: |
|
Zitieren |
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.
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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? |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
14:23:15 17.07.2012 Titel: |
|
Zitieren |
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 |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
14:27:28 17.07.2012 Titel: |
|
Zitieren |
Ich möchte meine CL-Datei posten. Wie kann man hier einen Dateianhang machen?
Na, gut. Erstmal hier direkt:
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 | /*
********************************************
OpenCl distributor by xxx
********************************************
*/
// E
float3 einsvektor()
{
float3 e;
e.x=e.y=e.z=1;
return e;
}
float vectorlength (float3 a)
{
return sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
}
/*
// length
float operator~(float3 a)
{
return sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
}
*/
// dot product
float dotproduct (float3 a, float3 b)
{
return (a.x * b.x+ a.y * b.y+ a.z * b.z);
}
/*
float operator*(float3 a, float3 b)
{
return (a.x * b.x+ a.y * b.y+ a.z * b.z);
}
*/
void _unmarklinearway (float3 pointa, float3 pointb,
//float3 ref,
int nx, int ny,
int nz, float r,
float grid_delta,
__global char* resultcloud)
{
// vector of move of sphere
float3 pointc=pointb-pointa;
float fest_oben=dotproduct(pointa,pointc);
//Konstante
float fest_unten=dotproduct(pointc,pointc);
//Konstante
float r_gew;
float3 mz1_gew;
float3 mz2_gew;
float3 min_gew;
float3 max_gew;
float3 ref;
int x,y,z; //Arraypoint.
float3 c; //Point to calculate.
float3 realpoint; //Real point.
float3 quermittelpunkt; //Ref point.
float t;
// in case of no move betreen last discrete times
if (vectorlength(pointc)==0)
return;
ref.x=ref.y=ref.z=0;
//What to calculate?
r_gew=r/grid_delta;
mz1_gew=(pointa-ref)/grid_delta; //epicenter one
mz2_gew=(pointb-ref)/grid_delta; //epicenter two
min_gew=mz1_gew; //Really minimums?
if (min_gew.x>mz2_gew.x) min_gew.x=(mz2_gew.x);
if (min_gew.y>mz2_gew.y) min_gew.y=(mz2_gew.y);
if (min_gew.z>mz2_gew.z) min_gew.z=(mz2_gew.z);//Now amen.
max_gew=mz1_gew; //Really maximums?
if (max_gew.x<mz2_gew.x) max_gew.x=(mz2_gew.x);
if (max_gew.y<mz2_gew.y) max_gew.y=(mz2_gew.y);
if (max_gew.z<mz2_gew.z) max_gew.z=(mz2_gew.z);//Now amen.
max_gew+=einsvektor()+r_gew*einsvektor();
min_gew-=einsvektor()+r_gew*einsvektor(); //To high or too deep?
if (min_gew.x<0) min_gew.x=(0);
if (min_gew.y<0) min_gew.y=(0);
if (min_gew.z<0) min_gew.z=(0);
if (max_gew.x>nx) max_gew.x=(nx);
if (max_gew.y>ny) max_gew.y=(ny);
if (max_gew.z>nz) max_gew.z=(nz);
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++;
};
};
void _unmarksphere (float3 msphere,
//float3 ref,
int nx, int ny,
int nz, float r,
float grid_delta,
__global char* resultcloud)
{
float3 ref;
ref.x=0;
ref.y=0;
ref.z=0;
float r_gew;
int x,y,z; //Arraypoint.
float3 realpoint;//Real point.
//What to calculate?
float3 c;
float3 m_gew;//Rel. point cloud vector;
float3 m_gew2;//Rel. point cloud vector;
m_gew=msphere-ref;
m_gew=m_gew/grid_delta;
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 (vectorlength(realpoint-msphere)<=r)
resultcloud [x+y*nx+z*nx*ny]=1;
z++;
};
y++;
};
x++;
};
}
void _unmarkconnected (__global const float3* epicenters,
//float3 ref,
int nx, int ny,
int nz, float r,
float grid_delta,
__global char* resultcloud , int igid)
{
// unmark the actual sphere
_unmarksphere (epicenters[igid], 1000, 500, 100, 5, 1, resultcloud);
// is there an epicenter before the actual one?
if (igid == 0)
{
return;
};
// unmark the actual linear way.
_unmarklinearway (epicenters[igid-1], epicenters[igid], 1000, 500, 100, 5, 1, resultcloud);
};
// OpenCL Kernel Function for element by element vector addition
__kernel void moveofsphere(__global const float3* epicenters, __global char* resultcloud, int iNumElements)
//__kernel void moveofsphereold (__global const float3* epicenters,__global char* resultcloud, int iNumElements, int nx, int ny, int nz, float sphereRad, float delta, float3 refPoint)
{
// get index into global data array
int iGID = get_global_id(0);
// bound check (Is there another epicenter?)
if (iGID >= iNumElements)
{
return;
};
_unmarkconnected (epicenters, 1000, 500, 100, 5, 1, resultcloud, iGID);
} | |
Ich vermute stark, daß OpenCL versucht, die while-Schleifen selbst zu parallelisieren. Anders kann ich mir nicht erklären, daß es einen Unterschied macht, von wo bis wo gezählt wird. :-( |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
Zuletzt bearbeitet von Vernunftmensch am 14:55:13 17.07.2012, insgesamt 2-mal bearbeitet |
|
 |
Vernunftmensch
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.06.2012
Beiträge: 25
|
Vernunftmensch Mitglied
15:56:00 17.07.2012 Titel: |
|
Zitieren |
Nein, ich mußte nur einfach mehr Platz zum Arbeiten organisieren.
OpenCl liefert bei mir jetzt perfekte Ergebnisse. |
_________________ Wer den C64er nicht ehrt, der ist des x64ers nicht wert.
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
16:20:14 17.07.2012 Titel: |
|
Zitieren |
| Vernunftmensch schrieb: | | Nein, ich mußte nur einfach mehr Platz zum Arbeiten organisieren. |
...
Du gehst die Sache nicht wirklich mit viel Vernunft an ...
Grüssli |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |