1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Techmix

Beiträge von Techmix

  • (Anfänger)Mehrere Schleifen gleichzeitig?

    • Techmix
    • 31. Oktober 2014 um 19:39

    Also...
    Ich habe mal etwas geschrieben das vielleicht dein Problem löst oder erklären kann.

    [autoit]


    ; Timingvorgaben, in Sec
    Global _
    $i_Intervall1 = 3, _
    $i_Intervall2 = 5, _
    $i_Intervall3 = 10

    [/autoit][autoit][/autoit][autoit]

    ; Timing-Handles
    Global _
    $h_Timer1 = TimerInit(), _
    $h_Timer2 = TimerInit(), _
    $h_Timer3 = TimerInit()

    [/autoit][autoit][/autoit][autoit]

    ; Schleife
    While 1
    if TimerDiff($h_Timer1) >= $i_Intervall1 * 1000 Then ; Umrechnung von Ms in Sec
    Func1() ; Ausführung von Funktion
    $h_Timer1 = TimerInit() ; Timer zurücksetzen
    EndIf
    if TimerDiff($h_Timer2) >= $i_Intervall2 * 1000 Then
    Func2()
    $h_Timer2 = TimerInit()
    EndIf
    if TimerDiff($h_Timer3) >= $i_Intervall3 * 1000 Then
    Func3()
    $h_Timer3 = TimerInit()
    EndIf
    Sleep(50)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    ; Auszuführende Funktionen
    Func Func1()
    ; ...
    EndFunc
    Func Func2()
    ; ...
    EndFunc
    Func Func3()
    ; ...
    EndFunc

    [/autoit]

    Grüße!

  • (Anfänger)Mehrere Schleifen gleichzeitig?

    • Techmix
    • 31. Oktober 2014 um 19:25

    Poste mal dein Script, du hast noch mit einem Logikfehler zu kämpfen :D

  • (Anfänger)Mehrere Schleifen gleichzeitig?

    • Techmix
    • 31. Oktober 2014 um 18:23

    Meiner Erfahrung nach sind die Adlib Funktionen für Schleifendurchläufe eher ungeignet. Auch können sich die Timings, wenn mehrere Adlibs aktiv sind, durch die Ausführungszeit überlagern - und das kann Fehlverhalten auslösen.
    Die bessere Methode ist imho der klassische Schleifendurchlauf! Multithreading oder ähnliches wird auch nicht mit Adlibs erreicht werden können, sobald ein Adlib gestartet wird wird einfach ein Aussprung aus dem derzeitigen Programmcode gemacht. Ist fast vergleichbar mit der alten Gosub Funktion, nur mit Timer.

    Grüße!

  • (Anfänger)Mehrere Schleifen gleichzeitig?

    • Techmix
    • 31. Oktober 2014 um 17:16

    Ich denke auch das du nur etwas umbauen musst, viel Erfolg ;)

  • (Anfänger)Mehrere Schleifen gleichzeitig?

    • Techmix
    • 31. Oktober 2014 um 16:49

    Hallo!
    Ich Denke du meinst so etwas wie Threading, und das ist so in AU3 leider nicht möglich (Mit erweiterten Kenntnissen und Processing schon...). Du wirst deine Schleife so aufbauen müssen, das eben Funktion für Funktion aufgerufen wird. Nur in den seltensten Fällen braucht man wirklich Threading!
    Wenn du etwas darüber Nachdenkst, wird dir sicherlich eine bessere Möglichkeit einfallen.

    Grüße!

  • DVB-Converter

    • Techmix
    • 30. Oktober 2014 um 20:10

    Hallo,

    ich nutze zur Zeit ein Script welches ich zum Konvertieren von Videomaterial meiner DVB-T Software erstellt habe. Es läuft im Hintergrund und wartet darauf das die DVB Soft ein Video erstellt, konvertiert dieses, und gibt dabei Info´s über das Tray aus.
    Meine DVB Software spuckt ein ".ts" Mpg Format aus und mein Fernseher tut sich schwer mit diesem Format, deshalb werden die Videos jetzt als x264 (.mkv) automatisch konvertiert.
    Zur Konvertierung wird der Mencoder aus dem MPlayer-Paket verwendet. Ich habe 3 unterschiedliche Profile erstellt welche sich recht einfach verwenden lassen (Mkv_1080p, Mkv_720p, Mkv_DVD).

    Da das x264-Format Threading unterstüzt habe ich auch eine kleine Sicherung für die DVB-T Software eingabaut, sobald diese läuft erhällt der Konverter 1 Thread weniger und diese kann problemlos weiter aufnehmen.
    Auch ist eine Dateiüberprüfung vorhanden um Videos ausschließen zu können, welche noch aufgenommen werden. Nach Konvertierung werden die Videos umsortiert. Das gesammte Script lässt sich mit den paar globalen Variablen konfigurieren.

    Was gibt es noch zu sagen... Das Script läuft stabil auf meinem Rechner, und macht genau das was es soll - es läuft sogar zuverlässiger als meine DVB-T Software ;)
    Ich habe es an einem Tag 8 Stunden laufen lassen, und es hat mir 15GB komprimiertes Videomaterial geliefert !

    Grüsse!

    P.S:
    Die vorhanden 3 Profile habe ich selber erstellt, die sind zwar getestet könnten aber noch verbessert werden! Auch wollte ich noch Profile für das .mp4 und .avi Format erstellen, kam aber nicht dazu... Falls jemand bereits mit den Mencoder gearbeitet hat, und zufällig noch gute Profile hat oder etwas Hilfestellung geben kann, bitte hier im Thread Posten.

  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Techmix
    • 26. Oktober 2014 um 14:48

    Hy Andy,
    habe jetzt ein Bild bekommen! Lag daran, das ich vergaß _CL_ReadBuffer_ALL() anzupassen - glatt überlesen...
    ABER es gibt noch immer ein Problem, und zwar wird mir immer nur ein Bildausschnitt angezeigt. Ist schon komisch, habe aber selber noch getüftelt und dabei ist folgendes rausgekommen:

    [autoit]


    $all = 1

    [/autoit][autoit][/autoit][autoit]

    ; ...

    [/autoit][autoit][/autoit][autoit]

    $output_buffer1 = DllStructCreate("dword[" & $DATA_SIZE / 2 & "]", $ptr_bitmap) ; Puffer 1
    $CL_buffer_out1 = _CL_CreateBuffer($output_buffer1)

    [/autoit][autoit][/autoit][autoit]

    $output_buffer2 = DllStructCreate("dword[" & $DATA_SIZE / 2 & "]", $ptr_bitmap + $DATA_SIZE * 2) ; Puffer 2
    $CL_buffer_out2 = _CL_CreateBuffer($output_buffer2)

    [/autoit][autoit][/autoit][autoit]

    ; ...

    [/autoit][autoit][/autoit][autoit]

    While 1 ;endless loop...
    $steps += $step ;schrittweite für den nächsten frame erhöhen...
    _CL_SetArg(3, "float*", $steps) ;...und an kernel übergeben

    [/autoit][autoit][/autoit][autoit]

    _CL_SetArg(0, "ptr*", $CL_buffer_out1)
    _CL_RunKernel_ALL($DATA_SIZE / 8, 0, $comm_queue[2][1]) ; Kernel ausführen GPU 1
    _CL_SetArg(0, "ptr*", $CL_buffer_out2)
    _CL_RunKernel_ALL($DATA_SIZE / 8, 0, $comm_queue[2][2]) ; Kernel ausführen GPU 2

    [/autoit][autoit][/autoit][autoit]

    _CL_ReadBuffer_ALL($CL_buffer_out1, $output_buffer1, $comm_queue[2][1]) ; Puffer 1 lesen
    _CL_ReadBuffer_ALL($CL_buffer_out2, $output_buffer2, $comm_queue[2][2]) ; Puffer 2 lesen

    [/autoit][autoit][/autoit][autoit]

    _WinAPI_BitBlt($hdc_gui, 0, 0, $width, $height, $hDC_bitmap, 0, 0, $srccopy) ;Bitmap in die GUI blitten
    $fps += 1 ;Frames pro Sekunde zählen
    WEnd

    [/autoit]

    Jetzt bekomme ich 2 Halbbilder, jedes in seiner richtigen Position aber beide zeichnen nur den oberen Bildinhalt. Lese ich den Puffer 1 nicht aus (wie in deinem Beispiel) wird nur der untere Bildteil gezeichnet.
    Testläufe: "GPU" = 780Fps (richtiges Bild), "MULTI" = 580Fps (Doppelbildausschnitt)
    Und habe bei mir festgestellt das die 64Bit Ausführung bei allen Tests mit allen Kerneln 40 bis 50 Fps mehr bringt!

    Was anderes...
    Du weißt ja ich habe großes Interesse an OpenCL, Und wenn ich mir deine 'UDF' mal anschaue denke ich das vielleicht einige Änderungen das Arbeiten erleichtern könnten!

    _CL_SetKernel($sKernel, $aCommand_Queue)
    Fehlt noch völlig... Man könnte den zweiten Parameter so abfragen, wenn ein Array übergeben ist wird der Kernel auf alle Devices verteilt und wenn ein $command_queue angegeben ist, soll der Kernel eben nur auf den einem Device ausgeführt werden. ...Diese globale Variable $KernelSource ist völlig überflüssig und verwirrt den Techmix nur ;)

    [Überholt...]
    _CL_GetALLDevice("MULTI")
    Ich weiß nicht ob es hier noch einen Sinn macht die weiteren Parameter bei zu behalten. Was hier noch ein sinniger Parameter wäre ist die '$num_device_used',
    wenn man die auf -1 stellt könntest du noch einen "MIX" Betrieb anbieten welcher auch noch die CPU einschließt. Ja, ich habe dein Post gelesen und bin auch deiner
    Meinung das ein Mix-Betrieb, begründet duch die CPU-Leitung, wenig Sinn ergibt. Aber sollte jemand einen Video-Encoding-Ultra-Kernel verarbeiten wollen ist er
    sicherlich Dankbar für das quentchen Mehrleistung. Auch würden die Funktionen einfacher zu verstehen sein wenn du das z.B so $command_queue = _CL_GetALLDevice()
    lösen würdest.

    _CL_CreateBuffer($output_buffer)
    Immer diese manuelle Zuweisung...

    _CL_RunKernel_ALL($DATA_SIZE / 8, 0, $command_queue[2][1])
    Bau die Funktion so auf, das diese intern die $command_queue´s verwaltet wenn diese als Array übergeben wurden.
    P.S: Wenn ich das mache _CL_RunKernel_ALL($DATA_SIZE / 4, ...) gibts bei mir nen übelen Grafiktreiberabsturz ;)

    _CL_ReadBuffer_ALL($CL_buffer, $read_buffer, $Queue = $command_queue)
    Wieso muß ich noch den $command_queue angeben obwohl ich doch bereits entsprechende Buffer angegeben habe?? Lasse ich diesen aus, schwarzes Bild.
    [/Überholt...]

    ...

    Oki direkt angegangen und umgesetzt :D
    _cl_GetALLDevice2($device, ByRef $aOutput_Buffer, ByRef $aCommand_Queue, $iDeviceNr=0)
    Es können alle Arten von Devices verarbeitet werden (cpu, gpu, multi).
    $aCommand_Queue und $aOutput_Buffer werden gleich in entsprechender Größe für die jeweilige Platform erstellt.
    Die $iDeviceNr bestimmt im Single Modus mit welchem Device gearbeitet wird.
    Ausserdem werden jetzt die Platformen, Queues und Buffer automatisch zugeordnet, der Anwender wird jetzt weniger verwirrt ;)

    _CL_RunKernel_ALL2($Global, $Local, $aCommand_Queue, $aOutput_Buffer="")
    Es wird das Array $aCommand_Queue durchgearbeitet, immer wird erst _CL_SetArg() und anschliessend _CL_RunKernel_ALL() ausgeführt.
    $Global und $Local werden wie zuvor behandelt.
    Wenn $aOutput_Buffer leer ist, wird die ursprüngliche Funktion durchlaufen. <- Also ohne Loop und Array´s.

    _CL_CreateBuffer_ALL2(ByRef $aOutput_Buffer, $sStructCreate1,$sPointer1, $sStructCreate2="",$sPointer2="", ...)
    Hier habe ich keine andere Lösung gefunden, als alle möglichen Argumente optional anzuhängen ($sStructCreateXX,$sPointerXX).
    Das Array $aOutput_Buffer wird solange durchlaufen, wie Argumente vorhanden sind. So werden alle Buffer mit einem Befehl erstellt.

    _CL_ReadBuffer_ALL2($aOutput_Buffer, $aCommand_Queue, $command_queue="")
    Es wird das Array $aCommand_Queue durchgearbeitet, es wird immer ein _CL_ReadBuffer_ALL() ausgeführt.
    Wenn $command_queue nicht leer ist, wird die ursprüngliche Funktion durchlaufen. <- Also ohne Loop und Array´s.

    Aufrufe
    [autoit]


    ; ...
    ; ...
    Local $aOutput_Buffer, $aCommand_Queue, $iDeviceNr, $iDataSize
    Dim $all = 1
    If $all = 1 Then
    $iDataSize = $DATA_SIZE / 8
    _CL_GetALLDevice2("MULTI", $aOutput_Buffer, $aCommand_Queue)
    _CL_CreateBuffer_ALL2($aOutput_Buffer, "dword[" & $DATA_SIZE / 2 & "]", $ptr_bitmap, "dword[" & $DATA_SIZE / 2 & "]", $ptr_bitmap + $DATA_SIZE * 2)
    Else
    $iDeviceNr = 0
    $iDataSize = $DATA_SIZE / 4
    _CL_GetALLDevice2("gpu", $aOutput_Buffer, $aCommand_Queue, $iDeviceNr)
    _CL_CreateBuffer_ALL2($aOutput_Buffer, "dword[" & $DATA_SIZE & "]", $ptr_bitmap)
    EndIf
    ; ...
    ; ...
    While 1 ;endless loop...
    $steps += $step ;schrittweite für den nächsten frame erhöhen...
    _CL_SetArg(3, "float*", $steps) ;...und an kernel übergeben

    [/autoit] [autoit][/autoit] [autoit]

    _CL_RunKernel_ALL2($iDataSize, 0, $aCommand_Queue, $aOutput_Buffer) ; Kernel ausführen, egal ob Multi oder Single...
    _CL_ReadBuffer_ALL2($aOutput_Buffer, $aCommand_Queue) ; Puffer auslesen

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_BitBlt($hdc_gui, 0, 0, $width, $height, $hDC_bitmap, 0, 0, $srccopy) ;Bitmap in die GUI blitten
    $fps += 1 ;Frames pro Sekunde zählen
    WEnd

    [/autoit]

    Die neuen Funktionen laufen mit Multi und Single ohne das man große Änderungen durchführen muß, lediglich die $iDeviceNr muß angepasst (oder ausgelassen) werden.
    In der Funktion _cl_GetALLDevice2() gibt es allerdings noch Schwierigkeiten, und zwar bekomme ich die CPU micht zum laufen...
    Ich habe ich an der $platform_device die $comm_queue[$i][$t] angehängt - um die PID´s mit denen in $comm_queue abzugleichen... Und es Funktioniert!
    Aber das beste ist die automatische Zuordnung von Platformen, Queue´s und Buffern! Auch das der Loop jetzt übersichtlicher und vor allem flexibler ist empfinde ich als angenehm.
    Aber du mußt noch unbedingt die Funktion _CL_SetKernel() erstellen bzw. entkoppeln aus _cl_GetALLDevice()...

    Und langsamm verstehe ich was du schriebst, im Multi-Modus brauchst du auch einen angepassten Kernel! Mit nur einem Kernel (wie jetzt) bleibt nur die Möglichkeit diesen 'Mono' Kernel mit _CL_SetArg() entsprechende Start und Stopp Positionen zu übergeben - wenn natürlich der Kernel entsprechend umgeschrieben wurde :D
    Ich habe bei mir jetzt schon bestimmt 36 GraKa Abstürze provoziert, habe noch Logikprobleme *Grins* betreffend der Buffergröße, Start und Stop Zuweisung einer Multi-Kernel Modifikation des Tunnel-Kernel (NoSimd)... Kernelintern wird ja width*height berechnet, entspricht also $DATA_SIZE, die Rückgabe des Kernel soll ja nur $DATA_SIZE/2 groß sein - entsprechend müssen die Buffer also auch nur die Größe von $DATA_SIZE/2 haben. Richtig? ;)
    Ich weiß jetzt aber wieso ich vorher andauernde Abstürze in dem anderen Script hatte: Ich hatte 2 Buffer voller Größe erstellt, und bei der Rückgabe des 2ten Buffers wurde fleißig in den Speicherbereich 'von anderswo' reingeschrieben, weil der Buffer ja um 50% zu groß ist ;) <- HA, mache Fortschritte! Ich Programmiere ja nur Offline - und da ist das mit den schnellen Lösungen Googlen etwas schwierig, da kommts auf gute Vorbereitung und reichlich Griebenschmalz an :D !Und somit ist das Doppelbild-Problem gar kein Problem gewesen, sondern genau so sollte es auch sein!
    ...Habe jetzt einige Stunden mit den eigenen Funktionen verbracht, und muß sagen das diese nur einen Sinn ergeben wenn die Kernel-Parameter wenigstens an der ersten Stelle (output) immer identisch sind.
    Aber ich habe Multi Versionen des Kernel erstellen können *Yipie* welche aber noch optimierungsbedürftig sind!

    MultiKernel
    [autoit]


    ; Ich komme einfach nicht darauf WIE ich den Kernel sagen kann, das er bei 'stop' aufhören soll.. (if (threadid = stop+1) {break}) ?!?
    ; Momentan wird dieser trotzdem durchlaufen aber alle Berechnungen und die Rückgabe werden ausgelassen
    $KernelSource = _ ; Multi NoSimd-Kernel
    "__kernel void tunnelflug(__global int* output, const unsigned int width, const unsigned int height, const float stepx, const int start, const int stop)" & @CRLF & _
    "{" & @CRLF & _
    " uint threadid = get_global_id(0) + start - 1;" & @CRLF & _ ;thread-id, d.h. jedes pixel von 1 + start bis b*h
    " if (threadid < stop + 1) {" & @CRLF & _
    " float y = threadid/width;" & @CRLF & _ ;pixelkoordinaten
    " float x = threadid%width;" & @CRLF & _ ;pixelkoordinaten
    " float dy = (y / height) - 0.5f;" & @CRLF & _ ;...Berechnungen
    " float dx = (x / width) - 0.5f;" & @CRLF & _
    " float wurzel = sqrt(dy * dy + dx * dx);" & @CRLF & _
    " int tu = 203.718330624f * atan2(dy ,dx);" & @CRLF & _
    " int tv = (((100 / wurzel) + stepx));" & @CRLF & _
    " int t = (tu^tv)&255;" & @CRLF & _ ;farbe pixel
    " output[threadid - start + 1] = 0xFF000000+(t<<16)+(t<<8)+t;" & @CRLF & _ ;Pixel schreiben 0xFFBBGGRR, BB=GG=RR=t (- start)
    " }" & @CRLF & _
    "}"

    [/autoit] [autoit][/autoit] [autoit]

    ; ...

    [/autoit] [autoit][/autoit] [autoit]

    ; So setze ich die Argumente entsprechend der Gpu: Gpu1=Obere Bildhälfte, Gpu2=Untere Bildhälfte
    ; ...Ich muß dazu gestehen das ich mich mit dem Verstehen von Grafikalgorythmen schwer tue, mir entzieht sich die Vorgehensweise und vor allem bleibt der 'Aha' Effekt aus.
    if $iGPU = 1 then
    _CL_SetArg(4, "uint*", $iGPU) ; Start ;; $iGPU soll einfach eine 1 darstellen...
    _CL_SetArg(5, "uint*", $DATA_SIZE / 2) ; Ende
    Else
    _CL_SetArg(4, "uint*", $DATA_SIZE / 2) ; Start
    _CL_SetArg(5, "uint*", $DATA_SIZE) ; Ende
    EndIf
    _CL_RunKernel_ALL()

    [/autoit] [autoit][/autoit] [autoit]

    ; ...

    [/autoit]

    Ich hänge mal die 'tunnel_forum_ALL2.au3' an, da kannst du die Funktionen und Kernel testen.

    Grüße!

    P.S:
    Wir sollten uns mal einige alternative Sczenarios für den Einsatz für OpenCL überlegen, um vielleicht einen produktiven Einsatz von OCL in Au3 aufzuzeigen. Vielleicht könnte man ja mit Replace-Funktionen anfangen (bringen in ASM auch mächtig Speed) und es später vielleicht bis zu den _Crypt Funktionen ausbauen.
    Diese Grafik-Kernel sind ja ganz nett, aber einen richtigen Nutzen zeigen diese den Anwender ja nicht auf; Außer eben das Speed+ auf einigen Algoryhtmen...

    P.P.S:
    Ich habe mir eine Master-Arbeit aus dem Netz geladen welche glücklicherweise auf Deutsch verfasst ist und sich um das Thema OpenCL dreht. Da habe jetzt folgende interessante Info rauslesen können und zwar gibt es in OCL 2 Modi´s (?), einmal die Paralesierung und einmal das Threding! O, den ersten Punkt verwenden wir gerade weil wir Mathematisch vorgehen, das Threading aber bietet sich doch z.B. für Stringbearbeitung an!
    Kann ich mir das so vorstellen, wie man es aus C oder FreeBasic kennt?? Ich Denke da benötigt man ein OpenCL-Programm mit entsprechenden Kerneln welche dann die Threads darstellen...

  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Techmix
    • 22. Oktober 2014 um 13:15

    Mahlzeit,
    Dieses Script war noch von morgens als ich meinen Post nicht absenden konnte - war nicht aktuell... Ich hatte bereits alle Möglichkeiten bei $comm_queue durchprobiert, keine Änderungen immer ein schwarzes Bild!

    Und die Simd Test hatte ich ohne Multi, mit Cpu oder Gpu, durchgeführt. Ich verstehe einfach nicht wieso beide Devices ein ähnliches Verhalten bei den Simd-Kernel auweisen, also langsammer als bei dem normalen Kernel sind. Kann das an der OpenCL Installation liegen? Zu alt wird meine Hardware auch nicht sein, und wenn ich OpenCL z.B. in Mencoder verwende habe ich auch einen Performance plus - OK, ich weiß ja nicht wie deren Kernel aufgebaut ist... Aber grundsätzlich gesehen. Auch scheint Cuda sehr gut zu laufen, habe damit bei DirectShow Encoding 250% Leistungszuwachs! Aber dieser Simd-Kernel...

    Grüße!

  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Techmix
    • 21. Oktober 2014 um 20:06

    Moin!
    Habe jetzt deine neue Version getestet, hier erstmal die standart Ergebnisse:
    Cpu = 366fps, Gpu = 741fps, noSIMD(Cpu = 750fps, Gpu = 843fps)
    Wenn ich $all auf 1 setze:
    Multi = 1244fps, noSIMD(Multi = 1263) (ohne Änderungen)
    Multi = 1129fps, noSIMD(Multi = 1020) (mit Änderungen)
    Die Probleme sind wie folgt, der NoSimd-Kernel zeigt nur 25% des Bildschirminhaltes an und sobald ich Multi aktiviere habe ich ein schwarzes Bild...
    Das ich mit meinem i7 keine Verbesserung bei dem Simd-Kernel habe, hatte ich schon mal erwähnt, aber das fast die doppelten Fps OHNE Simd habe finde ich schon merkwürdig... Kann das daran liegen weil ich 8 Threads habe und der Kernel nur bis +3 zählt (convert_int4)??
    Auch finde ich die Idee der Multi-Kernel sehr gut, so kann man für jedes Device den gleichen Kernel oder eben unterschiedliche vergeben. Ich denke das wäre ein Vorteil, wenn man unterschiedliche Funktionsdurchläufe bei identischen Eingangsdaten durchführen muß - viele Fliegen mit einer Klappe :D
    Wenn ich die 'openCl_apfel_2d.au3' entsprechen der Multi-Version Anpasse, habe ich das gleiche schwarze Bild... Standart-Fps=384, Multi-Fps=588.

    SciTE Output


    Standart Output

    Code
    clGetPlatformIDs  CL_SUCCESS
    >Number Platforms = 2
    clCreateContextFromType  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 1;1;2;CPU;Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz;19050824;19888624
    clCreateContextFromType  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 2;1;4;GPU;GeForce GTX 460;54554312;54531640
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 2;2;4;GPU;GeForce GTX 460;54554392;54531640
    clCreateContextFromType  CL_SUCCESS
    verwendetes Device  1;1;2;CPU;Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz;19050824;19888624
    clCreateCommandQueue		CL_SUCCESS
    @@ Debug(349) : $deviceid = 54554312
    >Error code: 0
    clCreateProgramWithSource  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(399) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(407) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    @@ Debug(116) : $CL_DEBUGFLAG = 0
    >Error code: 0
    Alles anzeigen

    Multi ohne Änderungen

    Code
    clGetPlatformIDs  CL_SUCCESS
    >Number Platforms = 2
    clCreateContextFromType  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 1;1;2;CPU;Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz;47165768;47413744
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 94372000
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    LOG:
    Build started
    Kernel <tunnelflug> was successfully vectorized
    Done.
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clCreateContextFromType  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 2;1;4;GPU;GeForce GTX 460;57306824;57284152
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 190785424
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 2;2;4;GPU;GeForce GTX 460;57306904;57284152
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 190785744
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    @@ Debug(116) : $CL_DEBUGFLAG = 0
    >Error code: 0
    Alles anzeigen

    Multi mit Änderungen

    Code
    clGetPlatformIDs  CL_SUCCESS
    >Number Platforms = 2
    clCreateContextFromType  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 1;1;2;CPU;Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz;46838088;49969648
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 90701984
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    LOG:
    Build started
    Kernel <tunnelflug> was successfully vectorized
    Done.
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clCreateContextFromType  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 2;1;4;GPU;GeForce GTX 460;55865032;55842360
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 184428432
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 2;2;4;GPU;GeForce GTX 460;55865112;55842360
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 184428752
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    @@ Debug(116) : $CL_DEBUGFLAG = 0
    >Error code: 0
    Alles anzeigen

    Multi bei openCl_apfel_2d

    Code
    clGetPlatformIDs  CL_SUCCESS
    >Number Platforms = 2
    clCreateContextFromType  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 1;1;2;CPU;Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz;46838088;49969648
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 90701984
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    LOG:
    Build started
    Kernel <tunnelflug> was successfully vectorized
    Done.
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clCreateContextFromType  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 2;1;4;GPU;GeForce GTX 460;55865032;55842360
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 184428432
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    >Device verfügbar= 2;2;4;GPU;GeForce GTX 460;55865112;55842360
    clCreateCommandQueue		CL_SUCCESS
    clCreateProgramWithSource  CL_SUCCESS
    @@ Debug(120) : $program = 184428752
    >Error code: 0
    clGetContextInfo  CL_SUCCESS
    clGetContextInfo  CL_SUCCESS
    clBuildProgram  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clGetProgramBuildInfo  CL_SUCCESS
    clCreateKernel  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    @@ Debug(163) : $MAX_WORK_GROUP_SIZE = 1024
    >Error code: 0
    clGetKernelWorkGroupInfo  CL_SUCCESS
    @@ Debug(171) : $local_workgroup_size = 1024
    >Error code: 0
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clGetDeviceInfo  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clCreateBuffer  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    clSetKernelArg  CL_SUCCESS
    @@ Debug(116) : $CL_DEBUGFLAG = 0
    >Error code: 0
    Alles anzeigen
    openCl_apfel_2d.au3
    [autoit]


    ;~ #include <opencl_easy.au3>
    #include <opencl_easy_all.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <GDIConstants.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    Opt("MouseCoordMode", 2)

    [/autoit] [autoit][/autoit] [autoit]

    Global _
    $dll = DllOpen("user32.dll"), _
    $mouseflag = 1, _
    $fps = 0, _
    $NULL = 0, _
    $titeltext = "Apfelmännchen linke Maustaste reinzoomen / rechte Maustaste rauszoomen ", _
    $width, _ ; breite und höhe der gui/grafik, die Anzahl der "Threads" sollte ein Vielfaches von 16 sein!
    $height, _
    $hgui, _ ; GUI erstellen
    $hdc_gui, _ ; HDC holen zum blitten
    $DATA_SIZE, _ ; bildgröße=anzahl pixel (rgba)
    $hDC_bitmap, _
    $ptr_bitmap, _
    $hbmp_bitmap

    [/autoit] [autoit][/autoit] [autoit]

    Global _
    $output_buffer, _ ; halleluja! bitmaps werden immer 16byte-aligned!
    $CL_buffer_out, _
    $maxiteration, _ ; maximale iterationen
    $centerx, _ ; mitte Bild in x-richtung
    $centery, _ ; mitte bild in y-richtung
    $apfelbreite, _ ; breite des Bildinhalts x-richtung
    $CL_DEBUGFLAG

    [/autoit] [autoit][/autoit] [autoit]

    ;ich bin nicht der C-Freak, bitte also um Nachsicht mit meinen Kernels, Verbesserungsvorschläge werden selbstverständlich umgesetzt^^
    ;wer mag, kann den Kernel auch gerne als SIMD-Variante machen, das beschleunigt die Berechnung auf der CPU enorm!
    ;mit den farbfunktionen kann man endlos spielen^^
    Global _
    $KernelSource = _
    "__kernel void tunnelflug( __global int* output, const unsigned int width,const unsigned int height,const float centerx,const float centery,const uint maxiter,const float apfelbreite){" & @CRLF & _
    " uint iter;" & @CRLF & _ ;lokale variablen
    " float xtemp;" & @CRLF & _
    " uint threadid = get_global_id(0);" & @CRLF & _ ;thread-id, d.h. jedes pixel von 1 bis b*h
    " float py = threadid/height;" & @CRLF & _ ;pixelkoordinaten
    " float px = threadid%width;" & @CRLF & _ ;pixelkoordinaten
    " float x0 = (centerx-apfelbreite*0.5f)+px*apfelbreite/width;" & @CRLF & _ ;...Berechnungen
    " float y0 = (centery-apfelbreite*0.5f)+py*apfelbreite/height;" & @CRLF & _ ;...Berechnungen
    " float x = x0;" & @CRLF & _
    " float y = y0;" & @CRLF & _
    " for (iter=0;iter<maxiter;iter++){" & @CRLF & _ ;...Berechnungen
    " xtemp = x*x -y*y + x0;" & @CRLF & _
    " y = 2 * x * y + y0;" & @CRLF & _
    " x = xtemp;" & @CRLF & _
    " if ((x * x + y * y) > 4) break;" & @CRLF & _
    " }" & @CRLF & _
    " output[threadid] = 0x0008002* native_log2(native_log2((float) iter+1));" & @CRLF & _ ;Pixel schreiben 0xFFBBGGRR, BB=GG=RR=t native_powr(iter,2)
    "}"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; ----------------------------------------------------------------------------------------------------------------------------------
    ; StartUP
    ; ----------------------------------------------------------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Dim _
    $width = 256 * 3, _ ;breite und höhe der gui/grafik, die Anzahl der "Threads" sollte ein Vielfaches von 16 sein!
    $height = 256 * 3, _
    $hgui = GUICreate($titeltext, $width, $height, 1, 1), _ ;GUI erstellen
    $hdc_gui = _WinAPI_GetDC($hgui), _ ;HDC holen zum blitten
    $DATA_SIZE = $width * $height ;bildgröße=anzahl pixel (rgba)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_mousedown")
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "_mousedown")
    AdlibRegister("_fps", 1000) ;FramesPerSecond

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;bitmap erzeugen, in $ptr_bitmap steht nach dem Funktionsaufruf der Pointer auf die Pixeldaten
    $hDC_bitmap = _CreateNewBmp32($width, $height, $ptr_bitmap, $hbmp_bitmap) ;DC, Pointer auf die Bitmapdaten und ein Handle für GDI+....eine eierlegende Wollmilchsau

    [/autoit] [autoit][/autoit] [autoit]

    Dim $all = 1
    ;ab hier gehts mit OpenCl los
    ;Zunächst werden die verfügbaren Geräte(Devices) gesucht.
    ;~ _CL_GetDevice("CPU") ;.. ALL oder CPU oder GPU, ermittelt das Gerät, auf dem die Berechnungen durchgeführt werden.
    ;~ _CL_GetDevice("multi") ;.. ALL oder CPU oder GPU, ermittelt das Gerät, auf dem die Berechnungen durchgeführt werden.
    If $all = 1 Then
    _CL_GetALLDevice("multi") ;..oder CPU oder GPU, ermittelt das Gerät, auf dem die Berechnungen durchgeführt werden.
    Else
    _CL_GetDevice("gpu", 1,1) ;..oder CPU oder GPU, ermittelt das Gerät, auf dem die Berechnungen durchgeführt werden.
    EndIf
    ;zweiter Parameter gibt bei z.b. mehreren Grafikkarten die Nummer des Geräts an

    [/autoit] [autoit][/autoit] [autoit]

    ;Puffer für die Bitmap
    Dim _
    $output_buffer = DllStructCreate("dword[" & $DATA_SIZE & "]", $ptr_bitmap), _
    $CL_buffer_out = _CL_CreateBuffer($output_buffer), _
    $maxiteration = 89, _ ; maximale iterationen
    $centerx = -.5, _ ; mitte Bild in x-richtung
    $centery = 0, _ ; mitte bild in y-richtung
    $apfelbreite = 3, _ ; breite des Bildinhalts x-richtung
    $CL_DEBUGFLAG = 0 ; Debug-Ausgabe ausschalten, um Geschwindigkeit zu erhöhen

    [/autoit] [autoit][/autoit] [autoit]

    $output_buffer1 = DllStructCreate("dword[" & $DATA_SIZE / 2 & "]", $ptr_bitmap);halleluja! bitmaps werden immer 16byte-aligned!
    $CL_buffer_out1 = _CL_CreateBuffer($output_buffer1)

    [/autoit] [autoit][/autoit] [autoit]

    $output_buffer2 = DllStructCreate("dword[" & $DATA_SIZE / 2 & "]", $ptr_bitmap + $DATA_SIZE * 2);halleluja! bitmaps werden immer 16byte-aligned!
    $CL_buffer_out2 = _CL_CreateBuffer($output_buffer2)

    [/autoit] [autoit][/autoit] [autoit]

    ;Parameter an den Kernel übergeben
    _CL_SetArg(0, "ptr*", $CL_buffer_out)
    _CL_SetArg(1, "uint*", $width)
    _CL_SetArg(2, "uint*", $height)
    _CL_SetArg(3, "float*", $centerx)
    _CL_SetArg(4, "float*", $centery)
    _CL_SetArg(5, "uint*", $maxiteration)
    _CL_SetArg(6, "float*", $apfelbreite)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Schleife zur Anzeige für den Flug
    While 1
    _steuerung()
    _CL_SetArg(3, "float*", $centerx)
    _CL_SetArg(4, "float*", $centery)
    _CL_SetArg(5, "uint*", $maxiteration)
    _CL_SetArg(6, "float*", $apfelbreite)
    ;~ _CL_RunKernelAll($DATA_SIZE / 2, 0) ; Kernel ausführen
    If $all = 1 Then
    _CL_SetArg(0, "ptr*", $CL_buffer_out1)
    _CL_RunKernel_ALL($DATA_SIZE / 2, 0, $comm_queue[2][1]) ;Kernel ausführeneue[1] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit]

    _CL_SetArg(0, "ptr*", $CL_buffer_out2)
    _CL_RunKernel_ALL($DATA_SIZE / 2, 0, $comm_queue[2][2]) ;Kernel ausführeneue[1] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    _CL_ReadBuffer_ALL($CL_buffer_out2, $output_buffer2, $comm_queue[1][2]);Puffer(alle Pixel) lesen
    Else
    _CL_RunKernel($DATA_SIZE, 0) ; Kernel ausführen
    _CL_ReadBuffer($CL_buffer_out, $output_buffer) ; Puffer(alle Pixel) lesen
    EndIf
    _WinAPI_BitBlt($hdc_gui, 0, 0, $width, $height, $hDC_bitmap, 0, 0, $srccopy) ; Bitmap in die GUI blitten
    $fps += 1 ; Frames pro Sekunde zählen
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;...das wars schon^^

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; ----------------------------------------------------------------------------------------------------------------------------------
    ; Unterfunktionen
    ; ----------------------------------------------------------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func _CreateNewBmp32($iwidth, $iheight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe DC und ptr und handle auf die Bitmapdaten
    ;by Andy
    Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
    Local $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
    DllStructSetData($tBMI, 1, DllStructGetSize($tBMI) - 4) ;Structgröße abzüglich der Daten für die Palette
    DllStructSetData($tBMI, 2, $iwidth)
    DllStructSetData($tBMI, 3, -$iheight) ;minus =standard = bottomup
    DllStructSetData($tBMI, 4, 1)
    DllStructSetData($tBMI, 5, 32) ;32 Bit = 4 Bytes => AABBGGRR
    Local $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', $DIB_RGB_COLORS, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
    $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
    _WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
    Return $hcdc ;DC der Bitmap zurückgeben
    EndFunc ;==>_CreateNewBmp32

    [/autoit] [autoit][/autoit] [autoit]

    Func _fps()
    WinSetTitle($hgui, "", $titeltext & $fps & " FPS")
    $fps = 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _mousedown()
    $mouseflag = 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _steuerung()
    If WinActive("Apfelmännchen") Then
    If _IsPressed("01", $dll) Then _leftmouse()
    If _IsPressed("02", $dll) Then _rightmouse()
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _leftmouse() ;zoom in
    If $mouseflag Then ;neues center
    $posx = MouseGetPos(0)
    $posy = MouseGetPos(1)
    $centerx = ($centerx - $apfelbreite / 2) + $posx * $apfelbreite / $width
    ;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $centerx = ' & $centerx & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $centery = ($centery - $apfelbreite / 2) + $posy * $apfelbreite / $height
    ;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $centery = ' & $centery & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $mouseflag = 0
    EndIf
    $maxiteration /= 0.99785 ;Iterationen erhöhen
    ;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $maxiteration = ' & $maxiteration & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $apfelbreite *= 0.985
    ;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $apfelbreite = ' & $apfelbreite & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _rightmouse() ;zoom out
    If $mouseflag Then ;neues center
    $posx = MouseGetPos(0)
    $posy = MouseGetPos(1)
    $centerx = ($centerx - $apfelbreite / 2) + $posx * $apfelbreite / $width
    $centery = ($centery - $apfelbreite / 2) + $posy * $apfelbreite / $height
    $mouseflag = 0
    EndIf
    $maxiteration *= 0.99785 ;Iterationen erhöhen
    $apfelbreite /= 0.985
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Grüße!

  • "Schnelle Variablenbefüllung" und eindeutige Zuordnung von Checkboxen gesucht

    • Techmix
    • 21. Oktober 2014 um 15:26

    Und bei mir war mal ein Rechner, der konnte Daten NUR vom DVD-Laufwerk kopieren - Da ging nichtmals mehr das Kopieren vom USB-Stick oder runterladen aus dem Netz! Alle Dateien wurden Fehlerhaft auf einer !Lauffähigen Festplatte abgelegt...

    Grüße!

  • Forum-Umstellung Problemsammlung

    • Techmix
    • 21. Oktober 2014 um 11:31

    Noch was, bitte das Postlimit von 10000 Zeichen hochsetzten. Ist wirklich zu wenig, passt nichtmals ein Post und ein Script zusammen...

  • Forum-Umstellung Problemsammlung

    • Techmix
    • 21. Oktober 2014 um 10:45

    Ich selber schreibe und erweitere auch meine "gelösten" Threads munter weiter, ob es gelesen wird ist mir dabei schnuppe. Aber manchmal gibt es nachträglich Infos oder sogar erweiterte Lösungen, die ich gerne im Thread mit aufnehme!

    Grüße

  • "Schnelle Variablenbefüllung" und eindeutige Zuordnung von Checkboxen gesucht

    • Techmix
    • 21. Oktober 2014 um 10:40

    Hy,
    Auf die Schnelle fallen mir zwei spontane Dinge ein:
    1.) Die DLL... Bist du sicher das diese auch lauffähig ist?
    2.) Versuche mal einen Ordner ohne Leerzeichen!
    Und hast du schon die x86 Version probiert, läuft der Source damit? Bei ImageSearch wirst du keinen großen Vorteil von 64Bit haben...

    Grüße!

  • Forum-Umstellung Problemsammlung

    • Techmix
    • 21. Oktober 2014 um 09:17

    Eins fehlt noch bei den Topics, und zwar wenn einer geschlossen wurde. Das wird mir nicht angezeigt.

    Grüße!

  • Eine Art Datenbank?

    • Techmix
    • 20. Oktober 2014 um 12:11

    Au wei...
    Bist du sicher das du nicht gegen AGBs verstößt?! Welche Seite würdest du denn gerne mit deinem Script besuchen??
    Und wo hast du denn diesen Code her, der kann doch nicht laufen!

  • Forum-Umstellung Problemsammlung

    • Techmix
    • 20. Oktober 2014 um 12:05

    Hallo,
    Erst muß ich zugeben das ich mir nicht den gesammten Thread durchgelesen habe, hier geht es auch zu 90% um die Desktop Version...

    Hier geht es jetzt um die mobile Version:
    Grundsätzlich fühlt sich die Seite jetzt viel besser an und läuft auch schneller!
    Hätte aber gerne die Möglichkeit auf die Desktop-Version umzuschalten.
    Ganz oben befindet sich eine Menüzeile, dise lässt sich seit einigen Tagen nicht mehr richtig lesen - ist zu dunkel geworden.
    Es gab auf dem Portal kleine Icons vom TE, welche bei neuen Posts mit einem praktischen Symbol versehen waren. Jetzt muß ich auf die Textdicke achten...
    Auch habe ich keine Möglichkeit mehr zu Stalken, mir wird nicht angezeigt wer wo Online ist :)

    Die Umstellung ist zwar noch nicht 100%ig, aber ich finde es klasse! Top Arbeit!

    Grüße!

    [Edit]
    Habe gerade den OrangeMod Style aktiviert, und dort treten die Probleme überhaupt nicht auf! Und besser noch, wenn ich jetzt am tippen bin kann ich sogar über 2 Zeilen lesen (quer) mit dem standart Style war es nur eine halbe Zeile.

  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Techmix
    • 19. Oktober 2014 um 23:19

    Hy,
    Hab ja eine Intel/Nvidia/SLI Kombi und konnte bisher alle deine OpenCL Funktionen ausführen. Wenn du einen Tester benötigst, immer her mit dem Code :D

    Grüße!

  • Simulation von Strg Taste alle 4 Minuten

    • Techmix
    • 17. Oktober 2014 um 10:15

    Hy,
    Viele Virenscanner geben wegen UPX diese Fehlermeldung aus. Setze mal #AutoIt3Wrapper_UseUpx=n am Anfang deines Scriptes, dann kompilieren und anschliessend sollte es kaum noch Virusmeldung geben.

    Grüße!

  • Videodatei überprüfen, ob diese gerade erstellt wird

    • Techmix
    • 17. Oktober 2014 um 09:58

    Verdammt meine DVB-T Software hat heute Nacht versagt, hat mir 2 Folgen mit 0Kb aufgenommen... Nutze momentan SmartDVB, diese scheint aber nicht so zuverlässig zu sein!
    Nutzt ihr auch DVB, und wenn welche Software verwendet ihr??

    P.S: Das Script läuft jetzt wunderbar, hab es extra gestern nicht laufen lassen weil ich mir nicht sicher war mit der DVB Software - als hätte ich es geahnt...

    [Edit]
    Zweiter Aufnahmetag, diesmal nicht als Einzelfolgen programmiert sondern als einzel Aufnahme. Auch das hat versagt! Nach 3.6GB war schuss und die DVB Software hat sich aufgehängt. Grummel....

    [Edit2]
    Dritter Tag, SuperDVB hat erneut versagt! Hatte 6 Folgen zu 3 Doppelfolgen programmiert wobei nur die erste erfolgreich erstellt wurde. Die beiden anderen wurden wieder nur als 0Kb Dateien abgelegt.... Dieses verdammte DVB Programm!

  • Like oder nicht Like - das ist die Frage!

    • Techmix
    • 16. Oktober 2014 um 14:35

    Ich hatte in meinem Thread ein eigentliches Problem welches erfolgreich gelöst wurde. Aber ein viel komplizierters Problem wurde ebenfalls, und das auch noch Schnörkellos, gelöst.

    Wenn ich jetzt die Idee der besten Lösung favorisieren würde, welcher User hat den jetzt die beste Lösung präsentiert??? Ich finde das die viel kompliziertere Openfiles lösung die beste war, die richtige Lösung ist einfach nur durch einfache unachtsammkeit entstanden UND hat auch keinen größeren Lerneffekt! So wäre ich in einer Zwickmühle....

    Oder auch Likes, was ist wenn ich durch Faulheit vergesse die beiden Antworten zu Liken, und Like eine oder keine. Könnte ja sein das mir nächstes mal dann vielleicht von einer Person weniger geholfen wird...

    Meine Meinug ist das wir das die letzten Jahre auch nicht brauchten, und ich würde es eh nicht verwenden! Prinzipiell würde ich sogar sagen das es mir Wurscht ist, denke aber auch nicht ganz so positiv über so ein System!

    Grüße!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™