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. Andy

Beiträge von Andy

  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Andy
    • 17. November 2014 um 13:20
    Zitat von Techmix

    In der Funktion '_cl_GetDevice()' wird das Logfile erstellt, auf welches ich so scharf bin Nur leider wird zum Erstellen des Log´s großes PiPaPo betrieben, und ich bin mir nicht sicher wie oder welche Teile davon ich verwenden soll...

    Ich nehme das mal in Angriff...
    Übrigens bekomme ich von der AMD/Radeon-Implementierung bspw folgende Fehler/Warnungen

    Zitat

    LOG:
    "C:\Users\Mama\AppData\Local\Temp\OCL966B.tmp.cl", line 6: warning: variable
    "p" was declared but never referenced
    uint i,r,p=divisor;
    ^

    Bekommst du nur die von dir geposteten "Fehlermeldungen"?

  • _Arraydisplay an Textdatei anfügen

    • Andy
    • 16. November 2014 um 20:53
    Zitat von Ilse

    muß ich das dann auch mit dim machen?

    nein, nur die 3 Zeilen mit dem For/In anfügen

  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Andy
    • 16. November 2014 um 20:46
    Zitat von Techmix

    Die komischten Werte werden mir ausgespuckt, mal eine Null, sogar negative Zahlen werden ausgespuckt.

    Das hat mich bei meiner ersten Initialisierung eines Arrays im lokalen Speicher auch gefrustet. Das Problem war, dass OCL wohl die Arrays nicht "nullt", also mit Nullen füllt! Da wird einfach ein Speicherbereich reserviert, mit allem, was darin steht^^. Also sicherheitshalber das Array "nullen".

    Zitat von Techmix

    ...Kernelparameter und AutoItvariablen...

    Ganz einfach, in OpenCL kann ich keine variablen Arrays verwenden - diese müssen eine vordefinierte Größe erhalten. Aber je nach Datengröße müsste ich immer den Kernel händisch anpassen, jetzt nicht mehr! Das übernimmt AU3 für mich... UND ich befinde mich doch in der Lernphase dieses Rumgeieiere erleichtert mir einfach den Umgang...

    Die Idee finde ich klasse! Sollten wir weiter ausbauen! Da gibts bestimmt noch weitere "Tricks" die man in die Kernel integrieren könnte.
    Wusstest du übrigens, dass man außerhalb vom Kernel Funktionen schreiben kann?

    Zitat von Techmix

    Daher bin ich auch schon so angefressen, das ich mich mit den Fortschritt in OpenCL "etwas" schwer tue! Immer wieder Stolpersteine, die OCL SDK´s lassen sich nicht in die 'Express' Versionen vom VisualStudio integrieren, dann das dumm gelaufene Update, ... Immerhin konnte ich SciTE überreden mir endlich etwas Farbe im Kernel anzeigen zu lassen

    Immer schön geschmeidig bleiben... :thumbup:
    Manch anderer wäre froh, wenn er dieses KnowHow hätte!
    Ich selbst bin nur rudimentär in C (und somit den OCL-Kerneln) fit, leider.
    Man müsste sich viel mehr damit beschäftigen.

    Schaumamal wo das hinführt, ich habe ein gutes Gefühl^^. Gerade mit dem Hintergrund, dass eben NICHT dieser Mega-Supertanker Visual Studio für die Arbeit mit OpenCL nötig ist, sondern eine "billige" Scriptsprache :rock:

  • Forum-Umstellung Problemsammlung

    • Andy
    • 16. November 2014 um 17:57

    Die Frage stellt sich ernsthaft, was an diesem Konversationen-Wirrwarr "besser" ist als die simplen Nachrichten im "alten" Forum.
    Und diese Frage stellt sich allgemein, wenn ich mir hier alles in allem betrachte....

  • _Arraydisplay an Textdatei anfügen

    • Andy
    • 16. November 2014 um 17:39
    [autoit]

    $datei = "test.txt"
    Dim $array[5] = [0, 1, 2, 3, 4]

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

    For $in In $array ;alle items im array
    FileWrite($datei, $in & @CRLF) ;in Datei schreiben
    Next

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

    ShellExecute($datei)

    [/autoit]

    mehrmals starten...
    WENN man Funktionen verwendet, sollte man sich per strg+j wenigstens die Funktionen mal anschauen!
    Und wenn die Funktion nicht das Ergebnis liefert, was man erwartet, dann sollte man wenigstens die 2 Handgriffe hinbekommen, um die geänderte Funktion umzuschreiben und mit neuem Namen hier zu posten!

    [autoit]

    _FileAppendFromArray()

    [/autoit]

    wäre das dann gewesen...

    Oder mal die Hilfe lesen, denn da steht, dass der FileOpen()-Modus das Schreiben beeinflusst. Dann noch das Filehandle an _FileWriteFromArray() übergeben und alles funktioniert wie gewünscht!

  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Andy
    • 16. November 2014 um 16:27
    Zitat von Techmix

    Ich Teste den Kernel mit '_CL_RunKernel(1, 0)' um nur mit einem Thread zu Arbeiten.

    Nicht mit einem Thread, sondern mit einem Workitem! Das ist ein Unterschied!

    Zitat von Techmix

    Aber wie weise ich jetzt die richtige globale Threadanzahl zu? muß ich '_CL_RunKernel(int(StringLen($sInput) / $iGlobalSize)+1, 0)' verwenden??

    Schau mal in die References zum Thema Speicherverwaltung. Ggf. HIER und HIER die Grafiken.

    Generell ist es aber unnötig, nur "ein" Workitem rechnen zu lassen, der Kernel läuft doch sowieso für alle anderen Workitems parallel. Ich verstehe jedenfalls deinen Ansatz nicht. Das spricht gegen sämtliche Ideen und Grundsätze von OCL!
    "Global" kannst du den Speicherbereich so groß machen wie du willst, problematisch wird es nur mit der Aufteilung auf die Workgroups und die Workitems. Die Aufteilung auf Workgroups und Workitems übernimmt doch sowieso OpenCL (abhängig vonn der Hardware) für dich!
    WENN du lokalen Speicher (innerhalb der Workitems __PRIVATE, innerhalb der Workgroups __LOCAL, Workgroups synchronisieren NUR über __GLOBAL (langsam) oder __CONSTANT) benutzen willst/musst, pass auf, denn je nach Hardware sind dort nur 16 bzw. 32K Speicher vorhanden! (Abfrage bei den Devices)

    Zitat von Techmix

    Dabei wird dieses Array doch 'ByRef' übergeben, oder?

    Man kann keine Arrays an den OCL-Kernel übergeben. Schreib das Array in die Struct, übergib den Pointer. Ob du dann diesen Speicher überschreibst (das meinst du hoffentlich mit ByRef) oder die Ergebnisse in einem weiteren Speicherbereich zurückgibst, ist unerheblich!
    Du machst dir dein Leben auch dermaßen schwer^^
    Ich würde ganz pragmatisch Stückchen für Stückchen vorgehen. Daten an den Kernel übergeben und mir dann die Zwischenergebnisse zurückgeben lassen.

    Ich habe immer noch das Gefühl, dass du dir viel zu viel Gedanken über die Aufteilung innerhalb der Workitems machst!
    Wie schon in den ersten Posts hier gesagt, schreib EINFACHE Funktionen bzw. Kernel! Ich verstehe ehrlich gesagt dieses gesamte rumgefriemel mit den Kernelparametern und AutoItvariablen nicht! Optimiert wird grundsätzlich erst dann, wenn das Programm läuft! Und dann ist es WESENTLICH effektiver, erst einmal die Optimierungsmöglichkeiten innerhalb von OCL auszuschöpfen, als immer die SLI-Variante im Hinterkopf zu haben.

    Zitat von Techmix

    Aber wie weise ich jetzt die richtige globale Threadanzahl zu?

    Darauf solltest du dich konzentrieren...
    Ich habe mal Infos zu einer Radeon 7970 gefunden:

    Zitat

    The AMD Radeon HD 7970 is one of the AMD Southern Islands series that also
    adopts the GCN architecture. The HD 7970 contains 32 compute units (CUs).
    All CUs share a 768 KB L2 cache. Each CU has four vector units, a scalar unit,
    a 16 KB read/write L1 cache, and a 64 KB local data share (32 KB is available
    to a single wavefront). Each vector unit consists of 16 processing elements (PEs);
    thus, the HD 7970 is equipped with 2048 (= 32 * 4 * 16) PEs

    Du hast also 32 Compute Units a 4 Vector Units a 16 Processing Elements (das sind die "Workitems").
    Man sollte also schauen, dass möglichst viele dieser Workitems gleichzeitig "Futter" haben. Im Endeffekt ist es kontraproduktiv, wenn du bei der 7970 bspw. 2,2MB Daten in je 1000Bytes großen Blöcken übergeben würdest. Dann würden 2048 Workitems parallel abgearbeitet, und die restlichen 152 "danach". Das heisst, 1896 Processing units laufen LEER und warten darauf, dass die 152 PE´s fertig werden!!!!
    Daher berechnet man entweder anhand seiner Hardware die Blockgröße, oder lässt (wie schon mehrmals gezeigt) einfach verschiedene Blockgrößen durchlaufen und merkt sich diejenige mit der schnellsten Berechnungszeit! Das allerdings ist das LETZTE, was bei der OCL-Programmierung in Angriff genommen werden sollte...

    EDIT Typo!!!!!!! Muss
    $CL_iAnalyse = _CL_CreateBuffer($p_iAnalyse)

  • Youtube Api v3 login über OAuth 2.0

    • Andy
    • 15. November 2014 um 18:40

    Thread stellvertretend für Christopher erstellt.
    @Admins & i2c, bitte dafür sorgen, dass JEDER Nutzer von AutoIt.de auch dieses Forum nutzen kann!

  • Win7 Updates ändern Datei/Ordnerattribute

    • Andy
    • 15. November 2014 um 17:45

    Hi,
    habe seit einiger Zeit das Problem, dass die automatisch eingespielten Updates von Win7 eigenständig die Schreib/Leseattribute von Ordnern ändern.
    Ich habe meine SSD in C: und D: partioniert. Per Eigenschaften/Sicherheit ist für einige Ordner auf beiden LW der Vollzugriff eingestellt. Alles funktioniert einwandfrei, aber sobald Win7 ein neues "Sicherheitsupdate" einspielt, bekommen ALLE Ordner(inhalte) ein Schreibschutzflag und der Vollzugriff wird entfernt! Auch die "Speziellen Berechtigungen" für den Authentifizierten Benutzer werden in den Grundzustand versetzt.
    Habe schon die MS-knowledgebase durchsucht und keine passenden Infos gefunden.
    Setze ich die Berechtigungen wie von mir gewünscht, funktionieren meine Programme wieder einwandfrei...bis zum nächsten Update!

  • Fenster schließt immer

    • Andy
    • 15. November 2014 um 14:46

    Errormanagement FTW!
    Wenn man nicht weiß, warum und wieso etwas in einem Script passiert, muss man die Gründe suchen!

    Spoiler anzeigen
    [autoit]

    If $U_ans = 6 Then
    WinMinimizeAll()
    ;$PID = Run('C:\Program Files\Internet Explorer\iexplore.exe "' & $D_P & '"', "", @SW_SHOW)
    $PID = Run('C:\Program Files (x86)\Mozilla Firefox\firefox.exe "' & $D_P & '"', "", @SW_SHOW)
    WinWaitActive("")
    Local $Handle = WinGetHandle($PID), $sHTML = "", $loop = 0
    While 1
    Sleep(3000)
    $processexists = ProcessExists($PID)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $processexists = ' & $processexists & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    If $processexists = 0 Then ExitLoop
    If Not StringInStr(WinGetTitle($Handle), "No") And Not StringInStr(WinGetTitle($Handle), "Yes") Then
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $loop = ' & $loop & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    If $loop = 5 Then ExitLoop
    $loop = $loop + 1
    Else
    $loop = 0
    EndIf
    If StringInStr(WinGetTitle($Handle), "Danke schön") Then
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : StringInStr(WinGetTitle($Handle), "Danke schön") = ' & StringInStr(WinGetTitle($Handle), "Danke schön") & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Return 1
    endif
    WEnd
    msgbox(0,0,"Schau auf den letzten ausgeführten Befehl in der Console!")
    ProcessClose($PID)
    EndIf

    [/autoit]


    Wenn dir das nicht weiterhilft, schau mal in Scite unter "Extras" nach den TRACE-Funktionen

  • Zahlen in Zahlwörter umwandeln

    • Andy
    • 13. November 2014 um 07:16

    Mein Beitrag zum Thema:
    Script wird vom TE nicht gepostet weil "geklaut". Zum Thema gibt es reichlich Material, auch hier im Forum, im englischen sowieso.
    Es gibt gute Gründe, ein selbst geschriebenes Script NICHT zu posten, die respektiere ich auch!
    Was ich nicht respektiere ist die Art und Weise, hier Forenmitglieder anzugehen, um über diesen Umweg DOCH an die benötigten Informationen zu kommen.
    Wer ein Script schreibt und dieses nicht posten möchte ist wenigstens in der Lage per Pseudocode bzw. Ausschnitten seinen Algorithmus darzustellen bzw. das eigentliche "Problem" zu beschreiben. Ein "ausgebildeter Programmierer" weiß das.
    Die Beschreibung passiert hier nicht und wird definitiv auch nicht passieren! Daher hat sich das wohl mit "Hilfe und Unterstützung" erledigt!

  • GUIHandle in DllStrukt

    • Andy
    • 11. November 2014 um 23:21

    Augen auf beim Eierkauf!
    Hast du dir mal angesehen, was dein DllStructGetData($dll,1) zurückgibt?

  • GUIHandle in DllStrukt

    • Andy
    • 11. November 2014 um 23:17

    wieso guckst du dir nicht erstmal an, was DllStructGetData() zurückgibt?

  • Wieder mal RegexReplace...

    • Andy
    • 11. November 2014 um 22:25

    Ähhm nein! Wäre doch vollkommen unlogisch, wenn ALLE matches ersetzt würden, dann bräuchte man weder capturing, noch non capturing groups. Habe das jetzt auch mit anderen Strings ausprobiert, es werden immer nur die capturing groups ersetzt (mit backreference).
    Wenn KEINE backreference bspw. \1 im zu ersetzenden String gesetzt ist, dann stimmt deine Aussage! s. Arraydisplay im EDIT Post #1, das zeigt alle matches.

    //EDIT s.Post #3,

  • Wieder mal RegexReplace...

    • Andy
    • 11. November 2014 um 21:55

    Sehr nice, vielen Dank!

    Um das nachzuvollziehen wie RegexReplace arbeitet:
    Die mit \1 \2 \3 usw. im Replace bezeichnen die Ergebnisse der capturing groups des Regex. //EDIT Falsch!
    \1abcde ersetzt die erste capturing group durch abcde und \6xyz ersetzt die sechste capturing group durch xyz. //EDIT Auch falsch!

    Btw. die zusätzlichen Klammern sind nicht nötig :thumbup: Auch falsch!
    Richtig ist, dass es völliger Schwachfug ist, dass Regexp einen passenden String zurückgibt, aber das identische Pattern bei RegexpReplace ein anderes Ergebnis zurückgibt!
    So wie ich das sehe, hat das eine mit dem anderen nicht viel zu tun. Gut zu wissen...

  • Wieder mal RegexReplace...

    • Andy
    • 11. November 2014 um 21:14

    Hallo zusammen,
    ich habe zum Ersetzen von Werten in *.csv-Dateien ein Regex, welches auch den richtigen Treffer findet, s. ArrayDisplay().
    Wenn ich jetzt aber diesen Treffer ersetzen möchte, wird nicht nur der Treffer, sondern auch die "non capturing groups" ersetzt?!
    Was muss ich ändern, damit RegexReplace() nur den gematchten Teil ersetzt?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $txt = @crlf
    For $i = 1 To 5
    For $r = 1 To 20
    $txt &= $i & $r&"|"
    Next
    $txt &= @CRLF
    Next
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $txt = ' & $txt & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    $pattern = '(?m)34(?:[^\|]*\|){12}((?:[^\|]*\|{1}){3})' ;12 spalten nach dem treffer die drei folgenden spalten
    $res = StringRegExp($txt, $pattern,3)
    _ArrayDisplay($res) ;sollen ersetzt werden durch

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

    $res = StringRegExpReplace($txt, $pattern, "xxx|yyy|zzz|",1)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]


    Es sollen die "316|317|318|" durch "xxx|yyy|zzz|" ersetzt werden.

    //EDIT, mit $res = StringRegExp($txt, $pattern,2) sehe ich im ArrayDisplay() den "falschen" Treffer im ersten Index, der richtige ist im zweiten...
    Wie bekomme ich es hin, dass der "richtige" String ersetzt wird?

  • GUICtrlCreateListViewItem ist zu langsam? -> Problem gelöst, aber Warum ist das so?

    • Andy
    • 11. November 2014 um 18:55
    Spoiler anzeigen
    [autoit]

    $timer3 = TimerInit()
    ;-----------------------------------------------------------------------------------------------------------------------------
    ;-----------------------------------------------------------------------------------------------------------------------------
    ;-----------------------------------------------------------------------------------------------------------------------------
    _GUICtrlListView_BeginUpdate($hLVHandle)
    ;~ _GUICtrlListView_DeleteAllItems($hLVHandle)

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

    GUICtrlDelete($hListView)
    Global $hListView = GUICtrlCreateListView($sHeader, $x_datenbank + 22, $y_datenbank + 80, 490, 230, $LVS_SHOWSELALWAYS)
    Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Test2", 420, 0) ; 1. Spalte = 120 Px breit, rechts ausgerichtet

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

    ;-----------------------------------------------------------------------------------------------------------------------------
    ;-----------------------------------------------------------------------------------------------------------------------------
    ;-----------------------------------------------------------------------------------------------------------------------------

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

    ConsoleWrite('nur löschen: ' & TimerDiff($timer3) & @CRLF ) ;### Debug Console

    [/autoit]

    damit füllen sich auf meinem Laptop in maximal 2 Sekunden 10000 Einträge!
    nur löschen/erstellen in 1.8 Sekunden (warum ist GuiControlDelete() so langsam? ), füllen in 0.2 Sekunden.
    Damit habe ich ehrlich gesagt absolut kein Problem, imho ist das HÖLLISCH schnell für eine "Scriptsprache"!

  • History erstellen

    • Andy
    • 11. November 2014 um 17:46

    Nachdem du erfolgreich auf den Rechner connected hast, hänge den Inhalt des Inputs zusammen mit dem aktuellen Datum/Uhrzeit an eine simple Textdatei "BesuchteRechner.txt" an.
    Einzeiler

    Erweitere deine GUI um einen zusätzlichen Button "Bereits besuchte Rechner anzeigen".
    Klick auf diesen Button zeigt den Inhalt der Datei "BesuchteRechner.txt" an. Noch ein Einzeiler...

    Dann kannst du aus der Textdatei den Namen des Rechners, auf den du connecten willst, rüberkopieren in dein Input.

    ICH würde mir allerdings den Inhalt der Textdatei in ein Listview einlesen (doppelte entfernen) und von dort per Doppelklick den Connect starten 8)

  • FTP / _FTP_FileGet geht nur einmal

    • Andy
    • 10. November 2014 um 20:42

    Du solltest dir ggf. mal anschauen, wie man PARAMETER in Funktionen benutzt!

    [autoit]

    _FTP_FileGet ($FTP_Connect,$configdatei,@ScriptDir & "\config.ini","","",$INTERNET_FLAG_RELOAD = 1,"")

    [/autoit]

    Was soll denn das =1 hinter einer KONSTANTEN?!

  • Weihnachtsmützen für euer Avatar !

    • Andy
    • 10. November 2014 um 20:00

    hmmmmm, passend zum Avatar eine Weihnachtsmütze als prozedurale Grafik/Funktion....schaumamal^

  • FTP / _FTP_FileGet geht nur einmal

    • Andy
    • 10. November 2014 um 19:41

    Hi,
    schau mal in der Hilfe bei _FTP_Fileget() bzw. _FTP_Open() nach dem Parameter $INTERNET_FLAG_RELOAD

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™