OpenCL (CPU + GPU) Benchmark

Status
Für weitere Antworten geschlossen.
Das doch größere Probleme gibt hier mal ne kleine Zusammenfassung ;)

Schritt 1: Stelle fest ob du eine Ati oder nVidia Karte besitzt, wenn Ati, fahre mit Schritt 2 fort

Schritt 2: Lade unter Drivers & Support | GAME.AMD.COM den CCC-Displaydriver runter (komplett in EN oder in zwei teilen mit dem DE-Sprachpacket)

Schritt 3: installiere den/die geladenen treiber

Schritt 4: Lade dir unter ATI Stream SDK v2.2 with OpenCL? 1.1 Support | AMD Developer Central das für dein Betriebssystem gedachte SDK (2.2) herunter

Schritt 5: installiere das soeben heruntergeladene SDK komplett auf deinem Rechner

Schritt 6: führe den Benchmark aus und freue dich ;)


BITTE IN POSTING 1 AUFNEHMEN dankö ;)
 
Ich Idiot habe mich Gestern in der Highscore aufgenommen habe aber ganz vergessen den Beweis zu posten.:klatsch:
also bei mir funktoniert die version 1.2 nicht
erst wird das bild schwarz und dann kommt die fehlmeldung

Der Grund der Fehlermeldung ist, "Out of Resources". Ich denke dass liegt leider daran dass du eine relativ schwache Grafikkarte hast da der neue Benchmark 100 mal laenger ist. Eventuell liegts auch an nur 512MB VRAM.;)

leider funzt gpu bench nicht bei mir

Lade dir mal dass hier runter oder halte dich an die Troubleshooting Liste von Skysnake die du im Startpost findest.

ATI Stream SDK v2.2 with OpenCL? 1.1 Support | AMD Developer Central

Das doch größere Probleme gibt hier mal ne kleine Zusammenfassung ;)

Danke dass du dir die Muehe gemacht hast.:daumen:
BITTE IN POSTING 1 AUFNEHMEN dankö ;)

Hab ich gemacht.;)

Uebrigens, fanegst du jetzt auch an OpenCL zu lernen?;)
 
Der Grund der Fehlermeldung ist, "Out of Resources". Ich denke dass liegt leider daran dass du eine relativ schwache Grafikkarte hast da der neue Benchmark 100 mal laenger ist. Eventuell liegts auch an nur 512MB VRAM.;)
ich hab sogar nur 256mb vram :ugly: (ist nur ersatz karte) aber selbst damit müsste der bench eig laufen nur wenn dann ziehmlich langsam

du brauchst das ati stream sdk v2.2 und den dazugehörigen treiber.
ich habe keine ati karte sondern eine nvidia undzwar eine 9500GT
 
Mahlzeit

Bench Ergebnis Update

CPU v1.0 --@-- 10,1635441

GPU v1.0 --@-- 0,1713897

GPU v1.2 --@-- 1,4876426
:D

@Sturmi wenn bei dir GPU bench 1.2 läuft? lass mal bitte deine GTX 470 drüber laufen!!!. Habe das dumme Gefühl Das Meine GTX 480 im Eimer Ist
(keine rechenfehler oder so. Sie leistet halt nicht das was sie Müsste):(

Danke dir für deine Mühe:)
 
@thysol
schön das du mich hauptsächlich in post 110 zitiert hast, nur doof das die Aussagen nicht von mir sind xDD

:klatsch: Wie ist mir denn dass passiert. Sorry dass ich aussversehentlich dich zitiert habe. Danke dass du mich drauf hingewiesen hast.:daumen: Ist jetzt geaendert.;)

ich hab sogar nur 256mb vram :ugly: (ist nur ersatz karte) aber selbst damit müsste der bench eig laufen nur wenn dann ziehmlich langsam

Kann sein dass es wegen 256MB VRAM nicht laeuft.;)

ich habe keine ati karte sondern eine nvidia undzwar eine 9500GT

Hast du auch den GPU Benchmark v1.2 ausprobiert. GPU Benchmark v1.1 lauft auf Geforce Grafikkarte nicht.:ugly:
 
@DerPate26 Hier mal mein Ergebnis mit 1.2

2,37 ... sec.

Ich hab bei CPU und GPU 1.0 wahrscheinlich einfach nur mehr Punkte weil mein Prozessor schneller ist ;)
 
@thysol & Skysnake

wegen der zeitmessung:
exakter als mit dem profiling mode von opencl kann man die opencl ausführzeit nicht messen.


@thysol
ich weiß nicht wie der exakte Syntak für das C#-Binding aussieht, aber ungefähr so gehts:

1)wenn du die command queue erzeugst, musst du ihr die property CL_QUEUE_PROFILING_ENABLE übergeben.

2) du erstellst ein cl_Event, z.B. cl_event timeEvent;.

3) wenn du die commandQueue ausführst, übergibst du ihr das event:
clEnqueueNDRangeKernel(...,..., ... &timeEvent);

(jetzt solltest du die commandQueue blocken (clFinish()), damit sie garantiert fertig ist...)

4)du erstellst zwei cl_ulongs, eine für die startzeit, eine für die endzeit:
cl_ulong startTime, endTime;

5) du fragst die zeit der commandQueue ab:
clGetEventProfilingInfo(timeEvent, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &startTime, NULL);
bzw. clGetEventProfilingInfo(timeEvent, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &endTime, NULL) ;

ausführzeit ist dann endTime-startTime. ;)

Musst mal schauen, mit dem C# binding geht das sicher ähnlich...

Hoffe ich kann dir damit helfen, den benchmark zu verbessern...

 
Zuletzt bearbeitet:
@Rayman: Eventuell kann deine Karte kein OpenCL, da sie anscheinend recht alt ist. Unter ATI Stream SDK v2.2 with OpenCL? 1.1 Support | AMD Developer Central findest du eine Auflistung der Ati-Karten die OpenCL unterstützen, falls es ne nVidia ist, musste bei denen mal schauen.

@Thysol: Ja ich will OpenCL lernen ;) Mach ich eigentlich schon seit nem knappen Jahr musste mich aber erstmal durch C++ etc. schlagen und nebem Studium bleibt halt nicht soooo viel Zeit. Will mich allerdings auch in ATISteam einarbeiten, da hier wohl mehr Leistung zu erwarten ist. Allgemein will ich einfach aufzeigen, wie "leicht" es ist GPU´s zu programmieren, da bisher in der Uni-Welt (zumindest bei uns) noch ziemlich viel Skepsis herrscht.

Angedacht ist auch ne Simulation zu Flüssigkeiten in porösen Medien aufzustellen, wo dann anhand eines Modells berechnet wird, wie die Flüssigkeit sich innerhalb des Mediums bei unterschiedlichen Drücken bewegt. Das ist aber nen ziemliches Langzeitziel ^^
 
bei uns gibts cuda an der uni ;)

wir haben sogar telsaserver zum rechnen :P (nvidia sei dank)

und ich würde mir an deiner stelle überlegen mit cuda anzufangen. mehr ausgereifte tools, mehr dokumentation. es gibts halt schon viel länger. wenn du natürlich keine nvidia hast, ist das schwer...

aber opencl unterscheidet sich nur gering von cuda.
das sind sowieso nur apis, die zu "bedienen" ist kein problem...

interessant, wirds, wenns an parallele (und effiziente!) algorithmen geht...


EDIT:
@thysol & Skysnake

wegen der zeitmessung:
exakter als mit dem profiling mode von opencl kann man die opencl ausführzeit nicht messen.


@thysol
ich weiß nicht wie der exakte Syntak für das C#-Binding aussieht, aber ungefähr so gehts:

1)wenn du die command queue erzeugst, musst du ihr die property CL_QUEUE_PROFILING_ENABLE übergeben.

2) du erstellst ein cl_Event, z.B. cl_event timeEvent;.

3) wenn du die commandQueue ausführst, übergibst du ihr das event:
clEnqueueNDRangeKernel(...,..., ... &timeEvent);

(jetzt solltest du die commandQueue blocken (clFinish()), damit sie garantiert fertig ist...)

4)du erstellst zwei cl_ulongs, eine für die startzeit, eine für die endzeit:
cl_ulong startTime, endTime;

5) du fragst die zeit der commandQueue ab:
clGetEventProfilingInfo(timeEvent, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &startTime, NULL);
bzw. clGetEventProfilingInfo(timeEvent, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &endTime, NULL) ;

ausführzeit ist dann endTime-startTime. ;)

Musst mal schauen, mit dem C# binding geht das sicher ähnlich...

Hoffe ich kann dir damit helfen, den benchmark zu verbessern...

Ein event kannst du in opentk mit
GASS.OpenCK.CLEvent timeevent = new GASS.OpenCL.CLEvent();
erstellen. (Vielleicht auch ohne GASS).

den kernel musst du dann mit
VectorSum.Execute(VectorSum.Execute(CLCalc.Program.CommQueues [CLCalc.Program.DefaultCQ], args, workers, new GASS.OpenCL.CLEvent[0], timeevent));
ausführen.

timeevent.getProfilingInfo(....) oder so, das hab ich noch nicht gefunden, bekommst du dann die start und endzeit.

und wie du den profilingmode aktivierst, hab ich bis jetzt nur für Cloo gefunden.

EDIT2:

blocken kannst du mit:
VectorSum.finish();


EDIT3:
Ich seh grad, du arbeitest mit einer localworksize von 1. auch wenn du keine localen variablen verwendest, arbeiten ati geräte deutlich schneller, wenn du sie mit der worksize von 64, 128, oder 256 betreibst. nvidia geräte nehmen dir das auch alles andere als übel ;)

die funktion int [] OpenCLTemplate.CLCalc.CLDevice.CLDeviceMaxWorkItemSizes liefert dir die maximale localworksize der karte....
 
Zuletzt bearbeitet:
Das CUDA die ausgereifteren Tools hat ist mir bekannt und hab ich an anderer Stelle auch schon mehrfach selbst erwähnt. Allerdings würde ich selbst nicht mehr wirklich groß auf CUDA setzen, da sich meiner Einschätzung nVidia über kurz oder lang selbst davon trennen wird, denn OpenCL basiert im Grundgerüst auf CUDA hat nur viele Fehler ausgebügelt die dort bestehen. Auf dauer wird es sich einfach für nVidia nicht lohnen CUDA UND OpenCL parallel zu betreiben, wenn bei OpenCL viel mehr Leute mitarbeiten und sich so kosten auch noch einsparen lassen.

Zusätzlich bist du bei CUDA halt auf nVidia fixiert und das wars, was ich nicht als sehr vorteilhaft anseh. Bei OpenCL ist es auch sehr viel einfacher CPU&GPU miteinander zu verzahnen, was insbesondere in großen Systemen mit vielen Rechnern einen Vorteil darstellt, und nunmal auch eher ner bestehenden Serverhardware entspricht. Nebenbei können natürlich auch die Vorteile beider Systeme so besser genutzt werden.

Wir haben seit kurzem auch Tesla-Server in der Uni stehen, da an Rechenzeit zu kommen kannste dir aber sicher vorstellen ist ziemlich utopisch. Ist aber auch garnicht mit meinen Zielsetzungen nötig. Für mich dreht sichs hauptsächlich darum aufzuzeigen, wie leistungsfähig heterogene Systeme die über das WWW verbunden sind sein können, bzw. aufzuzeigen, das es halt nicht immer Sinn macht sich die Tesla-Server in den Serverraum zu stellen, sondern auch durchaus sinn machen kann (aus finanzieller sicht) sich die Bürorechner zu nutze zu machen, und dort eventuell lieber bei der Anschaffung etwas mehr auszugeben, den Server dann aber einzusparen. Hier würd ich auf die BOINC-Plattform setzen, zumal hier auch noch kostenlos externe ressourcen verfügbar sein können.

Grad was man allein durch wegfall der Kühlung und teurer Stromanschlüsse zwecks hoher Nennleistung betrifft liese sich einiges einsparen.


interessant, wirds, wenns an parallele (und effiziente!) algorithmen geht...
Und stellt für mich ne unabdingbare Anforderung. Egal was ich mach, nur funktionieren reicht nicht, es muss schneller sein als mit CPU´s und auch den nötigen Mehraufwand des erlernens der GPU-Programmierung rechtfertigen.
 
erlernen von OpenCL ist eigentlich kein mehraufwand...
in erster linie führst du cpu funktionen aus, die den kernel aufrufen, genau wie in cuda - fertig.

und es gibt an sich bessere möglichkeinen als gpu-programmierung (grade opencl weil schwer zu debuggen) um sich in parallele algorithmen einzuarbeiten. OpenMP oder Unifield Parallel C sind dazu besser geeignet.
Der umstieg auf die gpu ist dann ein kleiner schritt. es steht halt etwas mehr außenrum, und du hast keine parallele vorschleife mehr, sondern threads anstelle der schleife, ums mal ganz banal auszudrücken.
grade mit deinen anforderungen würde ich mir openmp umbedingt mal anschauen.
 
@Thysol: Ja ich will OpenCL lernen ;) Mach ich eigentlich schon seit nem knappen Jahr musste mich aber erstmal durch C++ etc. schlagen und nebem Studium bleibt halt nicht soooo viel Zeit. Will mich allerdings auch in ATISteam einarbeiten, da hier wohl mehr Leistung zu erwarten ist. Allgemein will ich einfach aufzeigen, wie "leicht" es ist GPU´s zu programmieren, da bisher in der Uni-Welt (zumindest bei uns) noch ziemlich viel Skepsis herrscht.

Angedacht ist auch ne Simulation zu Flüssigkeiten in porösen Medien aufzustellen, wo dann anhand eines Modells berechnet wird, wie die Flüssigkeit sich innerhalb des Mediums bei unterschiedlichen Drücken bewegt. Das ist aber nen ziemliches Langzeitziel ^^

Wenn du Hilfe mit OpenCL brauchst dann kannst du dich an mich wenden. Auf CUDA wuerde ich nicht mehr setzen weil mann damit gar nicht die CPU ansprechen kann und weil es Nvidia exklusiv ist. OpenCL dagegen ist Plattform unabhaengig und mann kann damit CPUs, GPU, DSP etc programmieren.

@Sheeep
Danke fuer die Hilfe. Dass einzige Problem ist wenn ich mein Programm mit Cloo schreibe laeuft es Merkwuerdigerweise nicht mehr auf Geforce Grafikkarten. Mit OpenCLTemplate weiss ich nicht wie mann die Command Queue und so alles veraendert weil dass ja alles automatisch initialisiert wird.;)
 
von dem prob mit cloo hab ich schon gehört...

ich schau mal nachher wenn ich zu hause bin wies mit OpenCLTemplate geht... weil sonst geht auch alles... events ohne profilingmode haben nur den halben sinn...

ich kenn nur das standard c binding und den c++ wrapper. aber die machen letztendlich ja alle das gleiche...
 
So dann will ich mal auch mein Senf dazugeben:

Bild 1: Standardtakt
Bild 2: Grafikkarte übertaktet Chiptakt: 875MHz Speichertakt: 1225MHz
Bild 3: CPU übertaktet auf 4GHz
Bild 4: CPU und Grafikkarte übertaktet die gleichen Werte wie bei Bild 2 und 3

Wir nehmen dann für die Liste natürlich die OC Werte^^

auf den Bildern ist von oben nach unten zusehen:

1.CPU Benchmark
2.GPU Benchmark 1.0
3.GPU Benchmark 1.1
4.GPU Benchmark 1.2

CPU Benchmark:
Joker4Life|Core i5-750(4GHz)|HD 5850(OC)|DDR3-1200|8,3377656

GPU Benchmark 1.0:
Joker4Life|Core i5-750(4GHz)|HD 5850(OC)|DDR3-1200|0,3090019

GPU Benchmark 1.1 wenn es dann eine Liste gibt:
Joker4Life|Core i5-750(4GHz)|HD 5850(OC)|DDR3-1200|2,3699904

GPU Benchmark 1.2:
Joker4Life|Core i5-750(4GHz)|HD 5850(OC)|DDR3-1200|2,3470811
 
Danke dir für die Info. Da werde ich wohl in naher Zukunft doch auf Intel umsteigen müssen, sonst langweilt sich mein Grafikkarte noch:D

Sorry aber das ist totaler Schwachsinn, du hast hier nen Bench mit sowas von extrem viel overhead das gibts garnet. Bedenk sowas bitte.

Allein in games wird deine Graka immer limitieren, solange du in min 1680+ und Bildverbesserung spielst. Ok wenn du immer auf 800x600 zockst, k dann lohnt natürlich der Umstieg um statt 100 130 FPS zu haben, aber wers brauch...

Ne mal im ernst, solange du nicht jeden Tag min 8h am PC sitzt und renderst etc. also wirklich auch immer und immer wieder auf Ergebnisse warten musst und sich die Wartezeit auf ne Stunde ca am Tag summieren, dann lohnt eventuell nen Umstieg, ansonsten leg das Geld an und freu dich lieber über bischen zinsen und ne neue Graka in nem Jahr oder 2
 
Sorry aber das ist totaler Schwachsinn, du hast hier nen Bench mit sowas von extrem viel overhead das gibts garnet. Bedenk sowas bitte.

Allein in games wird deine Graka immer limitieren, solange du in min 1680+ und Bildverbesserung spielst. Ok wenn du immer auf 800x600 zockst, k dann lohnt natürlich der Umstieg um statt 100 130 FPS zu haben, aber wers brauch...

Ne mal im ernst, solange du nicht jeden Tag min 8h am PC sitzt und renderst etc. also wirklich auch immer und immer wieder auf Ergebnisse warten musst und sich die Wartezeit auf ne Stunde ca am Tag summieren, dann lohnt eventuell nen Umstieg, ansonsten leg das Geld an und freu dich lieber über bischen zinsen und ne neue Graka in nem Jahr oder 2
Da haste auch wieder recht. habe ich garnicht so darüber nachgedacht na da warte ich doch lieber aufm Bulldozer. Das dauert ja auch noch nen gutes Jahr. danke dir

mfg
 
Status
Für weitere Antworten geschlossen.
Zurück