OpenCL (CPU + GPU) Benchmark

Status
Für weitere Antworten geschlossen.
Um wieviel ist der Takt mit 960Mhz erhöht? Bzw. vom Standard weg? Will gleich auch mal versuchen, wie lange es bei mir mit noch bissel mehr dauert :-) Edit: mit nem leicht erhöhten Takt, also 45Mhz mehr (765Mhz/1530Mhz), komm ich jetzt auf 3,6139365s. Mehr möcht ich aber nicht riskieren, dafür ist mir die Karte noch zu neu.
 
875Mhz is standard
960Mhz is das maximum was ich über das CCC einstellen kann (wie man sieht ^^)
muss für openCL-programme bei dem takt keine spannung anheben, damit es stabil läuft. (24h mit ighashgpu getestet)

also finger weg von der spannung, sonst dreh ich auch an dem hebel ;)
und da gehen fast 1100Mhz :P
 
Gibst eigentlich auch sowas wie ne negativ Highscore-liste, in der es wie der name sagt um die höchste Zeit geht. xD

Nachdem mein PC beim takten gefrezzt ist, und ich ihn neustartet habe, habe ich den benchmark direkt als erstes gestartet, während windows noch allerhand an sachen laden war xD

Dabei ist dieses mit meiner GTX285 raus gekommen

14,855706 Sek.:lol:
 
das liegt daran, dass noch dos-fenster im hintergrund geschlossen werden, während bereits der benchmark läuft.
muss ihn auch mehrmals starten, damit ich ein gutes ergebnis unter 13Sekunden bekomme :P

am besten wäre es, wenn der benchmark zuerst alle benötigten dateien lädt und dann erst startet, sobald alle fenster auch komplett weg sind.
das ausblenden von fenstern kostet zuviel power, um den bench störungsfrei laufen lassen zu können.
 
also paar Sachen zu dem Benchmark:

1. Wie nimmst du die Zeit? Wenn es die Systemzeit ist, dann eher sehr ungenau und schlecht für so nen Benchmark, klar die Schwankungen lasse sich nicht ganz dadurch erklären, aber teilweise. Für solche Zeitberechnungen gibts sehr gute Bibliotheken die dies extrem genau können

2. Wie sieht der Code genau aus? Wäre sehr hilfreich da einblicke zu bekommen.

3. Die Zeit sollte erst genommen werden, nachdem die Daten initialisiert wurden.

4. ich find den Benchmark nicht sehr realistisch, da ne addition ne sehr primitive opperation ist, ne multiplikation, vorallem zwischen unterschiedlichen Speicheraddressen wäre da viel besser

5. nen recht realistischer Benchmark wäre ne Berechnung einer Differentialgleichung mit Randbedingungen, sprich z.B. schwingende Seite oder nen n-Körper Problem.

6. Wenn ichs richtig verstanden hab ist der neue Benchmark nicht 100 mal komplizierter, sondern nur 100 mal länger ;)

7. welches SDK verwendest du?

8. NEED den quellcode

9. haste gute Seiten für OpenCL? will das nämlich auch lernen!
 
dos-fenster?? hä?:what:
Keine Ahnung was du meinst, aber meine Win7 Version beruht nicht mehr auf dos. xD

Bei Radeon Karten tauchen beim starten Dos Fenster auf, bei Geforce Karten nicht.;)

also paar Sachen zu dem Benchmark:

1. Wie nimmst du die Zeit? Wenn es die Systemzeit ist, dann eher sehr ungenau und schlecht für so nen Benchmark, klar die Schwankungen lasse sich nicht ganz dadurch erklären, aber teilweise. Für solche Zeitberechnungen gibts sehr gute Bibliotheken die dies extrem genau können

Welche denn genau? Warum ist die Systemzeit nicht genau genug?;)

2. Wie sieht der Code genau aus? Wäre sehr hilfreich da einblicke zu bekommen.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GPU_Benchmark__v1._2_
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();

string vecSum = @"
__kernel void
floatVectorSum(__global float * v1)
{

int i = get_global_id(0);



for (int z = 0; z < 1000; z++)
{
v1 = v1 + v1;

}
}";

OpenCLTemplate.CLCalc.InitCL();

OpenCLTemplate.CLCalc.Program.Compile(new string[] { vecSum });

OpenCLTemplate.CLCalc.Program.Kernel VectorSum = new OpenCLTemplate.CLCalc.Program.Kernel("floatVectorSum");

int n = 10000000;

float[] v1 = new float[n];

for (int i = 0; i < n; i++)
{
v1 = (float)i;
}

OpenCLTemplate.CLCalc.Program.Variable varV1 = new OpenCLTemplate.CLCalc.Program.Variable(v1);

OpenCLTemplate.CLCalc.Program.Variable[] args = new OpenCLTemplate.CLCalc.Program.Variable[] { varV1 };

int[] workers = new int[1] { n };

for (int p = 0; p < 100; p++)
{
VectorSum.Execute(args, workers);
}

varV1.ReadFromDeviceTo(v1);

sw.Stop();

label2.Text = sw.Elapsed.TotalSeconds.ToString() + " Seconds";

}
}
}

3. Die Zeit sollte erst genommen werden, nachdem die Daten initialisiert wurden.

Ok, kann ich aendern.;)

4. ich find den Benchmark nicht sehr realistisch, da ne addition ne sehr primitive opperation ist, ne multiplikation, vorallem zwischen unterschiedlichen Speicheraddressen wäre da viel besser

Ok, kann ich aendern.;)

5. nen recht realistischer Benchmark wäre ne Berechnung einer Differentialgleichung mit Randbedingungen, sprich z.B. schwingende Seite oder nen n-Körper Problem.

Ok, was genau du meinst weiss ich nicht, aber du koenntest die Aufgabe als Code schicken und ich implementiere dass in OpenCL.;)

6. Wenn ichs richtig verstanden hab ist der neue Benchmark nicht 100 mal komplizierter, sondern nur 100 mal länger ;)

Richtig.;)

7. welches SDK verwendest du?

Microsoft Visual Studio Express Edition 2010.;)

8. NEED den quellcode

Siehe Oben.;)

9. haste gute Seiten für OpenCL? will das nämlich auch lernen!

Welche Programmier Sprachen kannst du denn bereits? Ich wuerde naemlich empfehlen einen Wrapper zu benutzen dass mann beispielsweise C++ und OpenCL zusammen nutzen kann. Hast du Skype oder einen Instant Messenger? Dann koennen wir in Kontakt treten. Ich wuerde mich ueber eine Zusammenarbeit freuen.;)

@all
Die Highscore Liste wird wahrscheinlich spaeter Heute Abend geupdatet.;)
 
Zuletzt bearbeitet:
Naja, richtig kann ich Java, sprich mit gui, SQL-Datenbankanbindung etc. C++ bin ich atm am lernen, wobei sichs zu Java nicht wirklich unterscheidet. Dann bischen VisualBasic, HTML und SQL halt noch, wobei das halt nicht wirklich programmieren ist, aber der Vollständigkeit halber mal ;)

Naja, was ich noch etwas kann ist Assembler, allerdings muss ich mich da wirklich dann nochmal richtig reinfuchsen und kann auch nicht flüssig den Quellcode lesen etc. kann aber damit umgehen und mich wieder reinarbeiten. Ich find allerdings auch das Assembler halt wirklich schon sehr heftig ist zu verstehen mit den ganzen registern etc. Aber es ist schon verdammt performant ^^

Als C++ SDK will ich Visual Studio 2010 Prof verwenden, allerdings muss ich sagen, das ich bisher mit Dev-C++ gearbeitet, allerdings hab ich das Problem das die Sachen aus Tutorials irgendwie dort öfters nicht funktionieren.... -.-

Was die System Zeit angeht, so ist diese ungenau, wenn du sehr hohe CPU Auslastungen hast, da die Berechnung der Systemzeit nicht wirklich gut funktioniert, da die Caches ziemlich zugeknallt werden, und zusätzlich noch daran, das die Zeitgeber halt auch nur innerhalb ner gewissen genauigkeit funktionieren.

Es gibt auf jedenfall in C++ und Fortran spezielle Bilbiotheken für die Zeitmessung, die dies extrem genau machen können. Bei so nem Bench mit recht geringer Laufzeit sollte man sowas durchaus verwenden. Z.B. wenn du Cachelines auslesen willst, dann brauchste sowas auch, da du ansonsten die Zugriffszeitenunterschiede zwischen L1 und L2 meist garnicht mehr richtig sehen könntest.



Was meinen Vorschlag zu ner Implementierung eines sinnvollen Benches angeht, so ist dies einfach nen Standartproblem aus der Physik, was relativ einfach zu lösen ist.

Den Code kann ich dir nicht so einfach zuschicken, da ich mich atm selbst erst damit beschäftige, wie man ne Differentialgleichung als Code implementiert, und wie man diese löst, im Prinziep machst du aber nicht anderes als nen Näherungsverfahren.

Was halt auf jedenfall recht interessant hierbei wird, dads du im Normalfall nen Problem hast, das zu lange braucht um auf einem Core gelöst zu werden, aber auch nicht 100% parallelisiert werden kann, da die Berechnungen nicht ganz unabhängig sind.

Stells dir so vor, du hast nen Seil und unterteilst es in 100 Mio Punkte, die die Position des Seiles representieren, dieses unterteilste nu in z.B. 10 Abschnitte, dann sind die inneren Punkte jedes Abschnittes vom entsprechenden Core selbst zu berechnen ohne Hilfe, an den Randpunkten müssen sich aber die Cores immer miteinander austauschen, was Sie denn als Ergebnis haben!

Nen Seil muss ja am Stück bleiben ;) (hier kommt granularität ins Spiel, was bei Multicoresystemen sehr wichtig wird, da diese das Maß der Kommunikation zwischen den Cores beeinflusst, und hier kann schnell das Netzwerk der Flaschenhals werden, wenn die Granularität zu fein ist.)
 
Sodele hier mal noch mein CPU Benchmark, leider mit langsamen RAM-Takt atm, hatte bei den 35°C+ Temps vor nicht all zu langer Zeit geringe Probleme mit der Stabilität in BOINC, lieber minimal langsamer als ne 20h WU wegschmeisen wegen Fehler -.-

attachment.php


EDIT: sodele hier mal noch der GPU 1.2 Bench. Hat bei mir ohne Probleme funktioniert. Hab vorher aber auch sowohl Display-Treiber, CCC als auch SDK2.2 installiert. (Achtung, ihr müsst wohl erst die Treiber und dann erst SDK 2.2 installieren, damits funktioniert, bzw das SDK danach nochmal neu installieren)

Sodele und hier nun mein Ergebnis ;)

attachment.php
 
Zuletzt bearbeitet:
Wie versprochen habe ich die Highscore Liste noch geupdatet. Es wird uebrigens keine Highscore Liste fuer v.1.1 geben wegen des Geforce Problems. v1.1 bleibt also eine Radeon exklusive version.:D

Sorry an alle die in v1.1 ihre Resultate gepostet haben. Skysnake du hast leider ein paar Minuten zu spaet gepostet um in der Liste noch aufgenommen zu werden. Ich denke Morgen werde ich dann wahrscheinlich die Liste nochmal updaten.

@Skysnake

Implementations, Tutorials and Sample Code

Hier sind ein paar OpenCL Tutorials. Falls du Hilfe brauchst helfe ich dir gerne weiter.

Mit der Zeitberechnung und dem Physik Problem werde ich mich wahrscheinlich beschaeftigen. Danke fuer den Tipp.:daumen:

Und nochmal danke an alle fuer euer Feedback.:daumen:
 
Zuletzt bearbeitet:
Naja, für das Problem mit der schwingenden Seite könnt ich dir eventuell sogar den Lösungsalgorithmus in Tage posten, hab nur diese Woche recht viel um die Ohren und bin mir nicht sicher ob ich dazu komm.
 
Status
Für weitere Antworten geschlossen.
Zurück