OpenCl goes AutoIt Update 31.Dezember 2016

  • So, mein Ergebnis (Laptop ist gerade mal 3 1/2 Monate alt).

    lg chess

    Edit: Da die ersten Messwerte (offensichtlich) nicht hinhauen können, hier nochmal mit der neusten Software. ;)

  • ich bring mal den Startpost auf den neuesten Stand, gerade was die intel-mini-Treiber betrifft

  • Hi,
    Win64 ist da Stichwort....
    Ich habe, da durch ASM an 32-Bit-Umgebungen gewöhnt, daraufhin die Funktionen gebastelt.
    Es gibt in AutoIt allerdings den DatenTyp INT_PTR, der je nach System entweder 32 oder 36 Bit breit ist.
    Ich habe schon angefangen, sämtliche Funktionen anzupassen, so dass diese auch in 64 Bit-umgebung ohne Änderung laufen.

    Vorabversion zum Testen:
    autoit.de/wcf/attachment/16207/
    Btw. wieso kann ich diese Datei als 7z hochladen aber als ZIP nicht?

  • Funktioniert schon mal unter Win7 x64.

    Die 1kb JavaScript Demos sind ja bestens dafür geeignet. Wenn ich hier durchblicke und ein wenig Zeit finde, werde ich mal versuchen, einige JS Demos zu Konvertieren.

    Z.B so was:

    Spoiler anzeigen

    Den Code als HTML Datei speichern und starten...

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hi,
    thx fürs testen, werde auch noch die SIMD-Kernel als 2. Testlauf einbinden, bei den Grafikkarten wird das kaum einen Unterschied machen, aber bei den CPU´s werden die SIMD-Kernel dank SSE sicher schneller laufen.

    UEZ, gute Idee mit den 1k-Demos :thumbup:
    Da sich die Syntax von Javascript und C im Bereich der "Rechnerei" nicht großartig unterscheidet, sollte das machbar sein, ggf ein Script, dass das JS direkt in einen CL-Kernel überträgt 8o

  • Geile Sache Andy. Ich bin schwer beeindruckt. :thumbup:
    Das kommt bei mir raus:

    GPU - Gigabyte GeForce GTX 570 @Core 780MHz|Shader 1560MHz|Memory 1900MHz : autoit.de/wcf/attachment/16209/

    GPU - Gigabyte GeForce GTX 570 @Core 860MHz|Shader 1720MHz|Memory 2000MHz : autoit.de/wcf/attachment/16210/

    Danach kommt eine ganze Reihe von Fehlermeldungen und der CPU Test klappt somit nicht.
    Irgendwie krass wie weit mein Ergebnis vor den anderen liegt :huh:. Sind wohl alles Laptops gewesen...
    Mich würde ja interessieren was bei Blume rauskommt 8o .

    Edit: Ich frag mich, wie sehr ich das Ergebnis durch übertakten der Shaderclock in die Höhe treiben kann... :D Haben die anderen Takfrequenzen auch einen Einfluss auf die Geschwindigkeit deiner Beispiele?

  • Hi,
    name22 & Blume
    Welche CPU habt ihr?

    Hab im Startpost einen Minitreiber für Intel-Prozessoren verlinkt.

    Zitat von name22

    Irgendwie krass wie weit mein Ergebnis vor den anderen liegt . Sind wohl alles Laptops gewesen...

    Nö, genau aus diesem Grund werden diese Grafikkarten ja als Cluster zum Berechnen von z.B. Wetterdaten eingesetzt.
    Viele Compute-Units und hoher Takt = viel Power^^
    Eine ATI Radeon 5870 hat bspw. 20 Compute-Units. Jede Compute Unit (oder SIMD-Unit) besteht aus 16 Cores die wiederum je 5 Recheneinheiten (Processing Elements) haben. Insgesamt hat die Karte also 20x16x5=1600 Prozessoren, die ALLE PARALLEL den Kernel abarbeiten können....da macht es auch nichts, wenn der Takt bissl niedriger ist als bei einer CPU.

  • ok, könntet ihr zwei mal die Konsolenausgabe posten?
    bzw. habt ihr mal getestet, ob das Script auch im 32-Bit-Modus läuft?

  • Nabend,

    CPU: AMD Phenom II X6 1045T (zZ. des Testes, 6x3.2 GHz) (Turboboost aktiv)

    Konsolenausgabe

    autoit.de/wcf/attachment/16216/

    PS: Also mit der Angabe vom Workgroupsize stimmt etwas nicht, Meine Karte hat 1GB dedizierten Speicher, oder ist das garnicht die Speicherangabe der Einheit selber?

  • Hier mal meine Konsolenausgabe:

    Spoiler anzeigen

    Im 32-bit Modus wird die CPU erfolgreich getestet (allerdings mit dem falschen Takt) aber bei der Grafikkarte werden jetzt Fehler ohne Ende ausgegeben ^^:

    Spoiler anzeigen


    Ergebnis der CPU die eigentlich mit 4.00 GHz erkannt werden sollte: autoit.de/wcf/attachment/16218/

  • Thx ihr beiden,
    Blume
    sieht so aus, als ob 2 Platforms erkannt werden, einmal die Nvidia-Karte, einmal die AMD-CPU
    Muss mal schauen, ob ich wieder mal nen blöden Fehler eingebaut habe^^
    Schon gefunden...was ein Anfängerfehler....
    Bitte mal in Zeile 84, die Struct richtig auslesen, peinlich peinlich....

    [autoit]

    $platform[$i] = DllStructGetData($platforms, 1,$i)

    [/autoit]
    Zitat

    Also mit der Angabe vom Workgroupsize stimmt etwas nicht, Meine Karte hat 1GB dedizierten Speicher, oder ist das garnicht die Speicherangabe der Einheit selber?


    Nein, das ist nicht der Speicher, den kann man extra abfragen, wie auch tausende anderer Eigenschaften^^
    Die Workgroups sind unterteilt in Workitems, die kleinste "Berechnungseinheit". OpenCl verteilt selbstständig den Kernel anhand der Workgroups und Workitems auf die Prozessoren. Durch Abändern der Anzahl der gleichzeitig rechnenden Workitems kann man ggf. die Hardware besser auslasten. Am besten ausgelastet ist die Hardware, wenn alle Prozessoren gleichzeitig ohne Unterbrechungen rennen :rock:

    Zitat

    Ergebnis der CPU die eigentlich mit 4.00 GHz erkannt werden sollte:

    Bist du sicher? Die Turbofunktion der "i"´s bezieht sich nämlich nur auf einen Core, solange die anderen eine bestimmte Leistung nicht überschreiten. OpenCl greift aber auf ALLE Cores mit voller Leistung zu, daher wird der Turbomodus bestimmt nicht aktiviert.
    Bei einigen Grafikkarten und auch Prozessoren wird hier auch der von der CPU gemeldete Nenntakt angegeben.

  • So mit der verbesserten Zeile klappt alles problemlos im 64-bit Modus. :thumbup:
    Das kam dabei raus:autoit.de/wcf/attachment/16219/
    Ich hab die CPU über den Multiplikator auf 4 GHz gestellt. Im Idle fährt sie den Takt auf 1.6 GHz runter. Das gilt aber nicht nur für einen Core.
    CPU-Z hat sich bei mir bisher recht zuverlässig gezeigt und zeigt während deinem Test um die 4000 MHz auf allen 4 Cores an. Nur während dem Grafikkartentest laufen teilweise nur 2 Kerne mit erhöhtem Takt.

  • Blume,
    die AMD-CPU´s sollten eigentlich am allerwenigsten Probleme machen.
    Hast du das SDK installiert von hier

  • Hi,

    Endlich. juhuuuu. Andy es klappt :party:
    Aber ist etwas komisch ein AMD X6'Kerner hat bei der Speed-Beurteilung nur 25 :D
    Zum Vergleich name's i5 (was doch 4 Kerne sind oder?) hat 111

    Kann es sein, das AMD bei OpenCL Allgemein etwas schlechter abschneidet?

    Und für alle, die Probleme mit einer AMD CPU und OpenCL haben: AMD APP CPU SDK Runtime installieren.
    Ich werd morgen (heute) mal das Paket einzeln hochladen, so kann Ich manchen die Download-Zeit verkürzen.
    SDK Komplett sind 149 MB und der Runtime nur 14 MB.

    Link: OpenCL-CPU.msi

    Und ein kleiner Screenie hinterher:
    autoit.de/wcf/attachment/16224/

    mfg,
    Domi

  • Hi,

    Zitat

    Kann es sein, das AMD bei OpenCL Allgemein etwas schlechter abschneidet?

    Bei den GPU´s steht vom Preis/Leistungsverhältnis die AMD(ATI)-Grafikkarte die von Nvidia in den Schatten, nachzulesen z.B. hier Bei einem fast 10-fachen Preis (Tesla s1070 vs. 7970) nur 1,5-fache Leistung...da diskutiert idR. niemand mehr. Wobei zugegebenermaßen die neuen Fermi- bzw. Kepler-Karten echt ein Kracher sind....

    Bei den CPU´s siehts eigentlich recht ausgeglichen aus, mal ist der eine bissl schneller, mal der andere, kommt immer auf den verwendeten Benchmark an. Oder auf den verwendeten Benchmark.
    Ich bin gerade dabei, mich mit den Optimierungsschaltern zu beschäftigen, bei den neueren AMD-Architekturen werden einige Optionen der Prozessoren erst mit bestimmten Compilerschaltern aktiviert.
    In den SDK´s sowohl von AMD als auch von Intel sind fast identische Beispiele/Benchmarks. Im AMD-SDK sind diese sogar als EXE-Files vorhanden, die kann man natürlich auch auf einer Intel-Maschine laufen lassen!
    So wie ich das mittlerweile sehe, ist die Geschwindigkeit viel eher abhängig vom Algorithmus, Knowhow des Programmierers, Umsetzung des Codes, Optimierung des Codes (s. sehr schönes Beispiel) als von der Hardware.
    Manche Kernel werden auf eine bestimmte GPU hin optimiert, so kann man bspw. über die Anzahl der verwendeten WorkUnits und anderer Parameter die Auslastung der GPU/CPU anpassen.
    Weiterhin ist bei allen grafisch genutzten Algorithmen der immense Vorteil, OpenCl und OpenGL zusammen auf der GPU zu benutzen, so entfällt der extrem langsame Teil des Transfers von Speicherinhalt von der Grafikkarte in den Hauptspeicher, um dort von der CPU weiterverwendet zu werden.

    Um das mal zusammenzufassen:
    Bei preisgleicher CPU und GPU ist bei (gut parallelisierbaren Algorithmen) die GPU ca. Faktor 5-10 schneller. Manchmal sogar deutlich schneller....
    Wer Passwörter cracken oder aufwendige 3D-Objekte rendern möchte und dafür eine per superduperTurbomodusimSinglecorebetriebCPU verwendet, der ist selbst schuld. Für weit weniger Geld in der Anschaffung und weniger elektrischer Leistung im Betrieb macht das eine GPU wesentlich schneller.

    Wie üblich im Computerbusiness braucht es aber Jahrzehnte, um "Fortschritt" in die Köpfe der Mainstream-Programmierer zu bekommen. Wer mit 40 Jahre alten Programmiersprachen arbeitet braucht sich nicht zu wundern, daß alles "neue" viele Jahre braucht um sich zu etablieren. Aus welchem Grund hat man sich wohl für die C-Syntax bei OpenCl entschieden^^? (hat aber nichts genützt :rofl: )
    Mein LieblingsThema in diesem Zusammenhang ist SSE, da wurde auch so lange gepennt, bis man es (dank OpenCL) nicht mehr braucht. Wobei SSE bei den SIMD-Kerneln auf der CPU zu wesentlich besseerer Leistung führt! Siehe Tunnelflug-Beispiel im Startpost!

    OpenCl ist mit Sicherheit kein Allheilmittel, aber in der Lage, durch geringe Modifikation bei bestehenden Programmen für massiven Geschwindigkeitszuwachs zu sorgen. Wobei die meisten Programme sowieso in C-ähnlicher Sprache geschrieben sind^^


    Anmerkung:
    Beim von mir verwendeten "Benchmark" im AutiIt-Script kommt die GPU im Vergleich zur CPU sogar noch sehr schlecht weg. Es wird ja nicht die reine Ausführungszeit des Kernels gemessen (obwohl das auch abzufragen ist^^) sondern auch der Transfer der Daten aus dem Speicher der Grafikkarte ins RAM der CPU. Und das kostet SEHR viel Zeit.

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    2 Mal editiert, zuletzt von Andy (22. August 2012 um 20:59)