Kann jemand die Funktion in ASM umsetzen?

    • Kann jemand die Funktion in ASM umsetzen?

      Kann jemand die Funktion in Inline-ASM umsetzen:

      Quellcode

      1. proc ReadAccelerator
      2. Parameters f$
      3. declare h&,p$
      4. h&=Assign(f$)
      5. Reset #h&
      6. whilenot EOF(#h&)
      7. Input #h&,p$
      8. if p$<>""
      9. AddString(fim&,p$)
      10. size=size+Val(SubStr$(p$,3,"|"))
      11. endif
      12. endwhile
      13. Close #h&
      14. Assign #h&,""
      15. endproc
      Alles anzeigen
      "size" ist ein globales QuadInt, fim ein global definiertes Handle eines Listviews. Interessieren würde mich, ob SubStr$ so einfach umzumünzen ist. Zur Not kann das weggelassen werden, da würde ich in die Datei eine Extrazeile einfügen, in der schon der Gesamtwert für "size" steht.

      Die Abarbeitung meiner Testdatei beginnt mit ~400 Elementen pro Sekunde und endet bei ~30/s. Beim Einlesen meiner ~55500 Elemente dauert es etwa 20 Minuten, das würde ich gern drücken.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Wenn du mindestens XProfan X3 hast, würde ich die Datei mit
      Move("FiletToList", f$) in die Listboxliste einlesen. Das geht schon
      mal viel schneller, als das sequentielle Lesen aus der Datei.
      Dann halt mit Move("ListToHandle", fm) in die Gridbox schieben.

      Den 3. Substring kanst du ja in einer Schleife in size aufaddieren.

      Hat deine Datei auch Leerzeilen ?

      PS: Und in genau so einem Fall wäre dann das Einklinken einer
      CallbackProc, die ich mir bei einem anderen Thema wünschte,
      gut. In dieser Könntest du dann mit

      Quellcode

      1. size=size+Val(SubStr$(GetString$(0, index),3,"|"))

      bei Move("ListToHandle) die Variable size erhöhen.
      Aber versuch es mal jetzt so. Das bringt bestimmt noch
      etwas Speed.
    • Ein Irrtum. Ich habe es mit MoveFileToList und anschließend MoveListToHandle probiert. Abgesehen davon, dass das Programm dabei scheinbar einfriert passiert folgendes:
      1. size wird nicht addiert
      2. Keine Fortschrittsanzeige, weil mein Callbackfunktion keinen Fortschritt registriert
      3. Es ist nicht schneller. Ich habe 15 Sekunden eingespart...auf 20 Minuten. Da sehe ich keinen Vorteil.

      Wenn ich in der Datei den Komplettwert von size speicher und als Extrazeile einlesen lasse spare ich fie size=.... Zeile. Dann wird's noch etwas schneller.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Hm, mit ASM das ganze schneller zu machen, ist so eine Sache.
      Bei den neuen Betriebssystemen läßt Windows kaum noch
      solche systemnahen Zugriffe zu. Da muß wahrscheinlich sogar
      der Assembler auf die File-API zurückgreifen, was bedeutet, daß
      es im Endeffekt auch nicht viel schneller sein wird.

      Da müßte man mal die Fachleute für ASM, wie Volkmar, fragen.

      Wie sieht es denn aus, wenn du die Datei mit ReadText in einen
      Speicherbereich liest ? Vielleicht ist da was an Speed möglich.
    • Kann ich mal probieren, dauert aber nen Moment. Dann ists auch umständlicher Zeile für Zeile abzuarbeiten.
      Ich war mehr geschockt, dass die internen Funktionen nicht schneller sind...
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • H.Brill schrieb:

      Mit
      Move("MemToList", Bereich, Chr$(13) + Chr$(10))
      hast du die ja auch in der Listboxliste.

      Wundert mich jetzt auch, zumal ca. 5500
      Zeilen ja nicht die Welt sind. Werde mal
      einen Test machen.
      55500. ;-)
      Die MemToList-Funktion kostet aber wieder viel Zeit. Da wird dann alles doppelt und dreifach gemacht. Praktisch wäre es wenn ich gleich die interne Listboxliste nutzen könnte, aber das ergibt andere Probleme. Mein Problem ist auch, dass ich bei all den Move-Funktionen keine Fortschrittsanzeige habe.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Also, wie ich das sehe, hängt das mit deinen Callbackfuntkionen
      für die Fortschrittsanzeige zusammen. Oder evtl. auch andere Gründe.

      Quellcode

      1. Cls
      2. Declare Long x
      3. x = 0
      4. Print DT("GetTime", 1)
      5. WhileLoop 1, 55500
      6. Inc x, 10
      7. AddString(0, Str$(&LOOP) + ". Zeile in Datei Wert :" + Str$(x) + " Fortschritt")
      8. EndWhile
      9. Print DT("GetTime", 1)
      10. Move("ListToFile", "H:\Zeilen.txt")
      11. Print "Fertig..."
      12. WaitKey
      13. ClearList 0
      14. Print DT("GetTime", 1)
      15. Move("FileToList", "H:\Zeilen.txt")
      16. Print DT("GetTime", 1)
      17. 'Listbox$("", 2)
      18. WaitKey
      Alles anzeigen

      Das Schreiben der Datei dauert ca. 5 Sekunden und das Einlesen
      per Move("FileToList",...) gerade etwas über eine halbe Sekunde.
      Lediglich das Anzeigen per Listbox$ dauert über 10 Sekunden.
      Hier könnte dann Volkmars Vorschlag zum Tragen kommen :

      Quellcode

      1. SendMessage(%HWnd, ~wm_SetReDraw, 0, 0)
      2. ' Hier Aktionen ausführen, bis Liste durch
      3. ' While GetCount(Quelle) - 1
      4. ' ...
      5. ' EndWhile
      6. SendMessage (%HWnd, ~wm_SetReDraw, 1, 0)
      7. ~InvalidateRect(%HWnd, 0, 1)
      8. ~UpdateWindow(%HWnd)

      Also, ich würde versuchen, das Zeitaufwändige in einen Prozess
      zu verlagern.

      Bei 20 Minuten muß sonst was nicht stimmen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von H.Brill ()

    • Ich kann leider nicht einfach MoveListToFile benutzen, da nicht die komplette Liste in die Datei geschrieben wird. Da müsste Roland noch Parameter für Anfang und Ende einbauen.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Ich hab es jetzt ohne alle Callbacks gemacht, per

      Quellcode

      1. Move("FileToList",f$)
      2. Move("ListToHandle",fim&)
      Es dauert wieder genau so lange.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Das Grid ist unsichtbar. Macht das da auch was?
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Kann ich statt %hWnd auch gefahrlos das Handle meines Grids angeben?

      Edit: Ach du heilige SCH***!!!! Ich hab mal das Handle meines unsichtbaren Grids angegeben. Schon dauert das Ganze nur Sekunden! Das sollte Roland unbedingt zum Standard machen!!!
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net