bei Multicore CPU Auslastung optimieren, TSDoc soll schneller werden!

Begonnen von testest, Dezember 03, 2014, 17:52:42

« vorheriges - nächstes »

testest

Hier kam grad so ein "gaming-PC" rein da hab ich paar Tests gemacht. Um I/O Performance zu checken das 6GB-Test.ts einfach mit Explorer von SATA6G Platte auf ebensolche rüberkopiert, dauerte unter 1 Minute.

Dann TSDoc die geschnittene Datei (6GB) auch auf die andere Platte erzeugen lassen, dazu brauchte er knapp 3 Minuten
(Core i7 - 4 Prozessoren, 8 Threads, Energieoptionen auf Höchstleistung).

Das Turbo-Boost-Tool zeigte durchgängig 3,4 GHz (von max. 3,6), der Taskmanager zeigte allerdings das nur 1 Thread rechnet, CPU-Auslastung um 12%. Wenn ich Prime95 1 Thread heizen lasse siehts in etwa genauso aus, bei 4 Threads kommt die Auslastung dann schon auf 50% und die Cores werden schon warm, wie es sein soll.

Frage nun, unterstützt TSDoc eigentlich Multithreading? Oder kann man das nachrüsten damit bei schnellen Platten schneller gerechnet wird?

-> beim Test stand in TSDoc die Priorität auf "Realtime", bringt leider nix gegenüber "Normal", ist ja auch nur für "wenn man nebenher noch was anderes macht" was beim Test nicht der Fall war.

Cypheros

Das Problem ist die sequenzielle Verarbeitung der Daten. Die meiste Zeit kostet des die einzelnen TS-Pakete zu PES-Paketen zusammenzusetzen. Das kann man schwer auf mehrere CPUs verteilen.

Djfe

kann man Abschnitte/die ganze Datei erst analysieren und dann die korrigierten Daten verteilt auf mehrere CPUs berechnen?

abgesehen davon:
kannst du das Fenster/die anderen Bestandteile für Programme für Mehrkern optimieren, sodass man das Fenster selbst während der Analyse bedienen kann?

testest

Danke für die Stellungnahmen! Wie ihr selbst wisst,

ist Multithreading das Gebot der Stunde - bzw. der letzten Jahre. Eigentlich schon seit fast 10 Jahren tritt die CPU-Speed Obregrenze auf der Stelle und hat sich grad mal von 3 auf knapp 4 GHz erhöht, seit 2011 von 3,6 auf 3,8 GHz. Dafür geht alles in die Breite 2 Cores, 4, 6, 8 Cores 16 Threads. 16 GB RAM und SSD's sind keine Seltenheit mehr. Von RAM zu RAM bzw. SSD sind 6GB in ein paar wenigen Sekunden geschrieben.

Irgend ne Strategie muss einfach mal her TSDocs Rechenaufgabe zu teilen, lass ihn meinetwegen einen umfassenderen Scan machen der es ermöglicht das File virtuell aufgeteilt zu berechnen, so in der Richtung. Der Speedzuwachs wäre enorm! Ausserdem hilfst du der Computerindustrie: es macht nämlich gar kein Spass mehr nen "schnelleren" PC zu kaufen wenn TSDoc immer der gleichlahme Opi bleibt.. :(

Mam

Man sollte die Leute nochmals gnädig daran erinnern, dass Ihnen 16Gb RAM nicht wirklich helfen, da 32Bit Programme nur maximal 2Gb belegen können. Auch bei nativen 64Bit Programmen ist bei 3 (mit Tricks bei 4) Gb Schluß.
Es gibt zwar die Möglichkeit, eine "Adresserweiterung" anzufordern, doch das schnarcht dann wie Teufel, da jeder Datenzugriff über einen Translator abgewickelt wird.
Und nur bei Xeons ist der in Hardware vorhanden, da kann man auch I7 mit zum Kriechen bringen...

Was der Scheffe mal ausprobieren könnte, wäre "Memory Mapped IO", dabei hält Windows so viel wie möglich der gelesenen Datei im Cache, bei erneuten Zugriffen sollten die Daten dann flotter vorhanden sein. Wenn die Leute allerdings immer 24h Programm am Stück aufnehmen, und dann eine 100Gb Datei zerstückeln wollen, da platzt dann auch diese Idee wie eine Seifenblase...

Da ist ansonsten nix zu optimieren oder zu parallisieren, ein "Stream" ist nun mal sequenziell und kann nur so gelesen/bearbeitet werden.

Aber warum lästert man eigentlich? Son Spielfilm (Ö/R HD, keine Unterbrecherwerbung) zu schnippeln und die unnützen Tonspuren rauszuschmeissen dauert doch mal gerade 30-45s ?

Und dabei kann ich noch in Ruhe zocken, da der Doc mir noch 7 CPUs und ne ganze GPU dafür übriglässt  ;D (so, alle Filme der Nacht fertig, nun widmen wir uns mal dem nächsten Drachen bei Dragon Age... 2 tot, noch 8 zum Killen...)

testest

Oha, da wurde mal wieder was Vorgeschlagen ohne Mam vorher um Erlaubnis zu fragen...

Zitat von: Mam am Dezember 04, 2014, 06:12:54
Aber warum lästert man eigentlich? Son Spielfilm (Ö/R HD, keine Unterbrecherwerbung) zu schnippeln und die unnützen Tonspuren rauszuschmeissen dauert doch mal gerade 30-45s ?

Mam träumend vorm ersten Kaffee ... icl. Schreiben? Das will ich sehen! 8)

Mam

Zitat von: testest am Dezember 04, 2014, 08:48:47
Mam träumend vorm ersten Kaffee ... icl. Schreiben? Das will ich sehen! 8)
...Beim ersten Kaffee, beim...

und, glaub mir, der Anblick ist nicht erstrebenswert... das willst Du gar nicht sehen, ährlisch!

Djfe

#7
wenn man weiter mit Graphen als Halbleiter (Siliziumersatz) experimentiert, kann man es dann auch bis 100 GHz schaffen ;)

wie können Spiele wie Watch Dogs 6gb RAM vorraussetzen (8gb empfehlen), wenn sie die nicht nutzen können, ich glaub wohl kaum, dass die sich dafür einen 2. Prozess öffnen, kann also nicht ganz stimmen
virtuelle PCs brauchen auch RAM, und es läuft trotzdem alles

außerdem: Cypheros könnte ja auch den TSD für 64bit anpassen, wenn mehr als 2gb RAM sinnvoll wären

->wie wäre es bei entsprechend ausgestatteten Systemen die Datei von Hand in den Speicher zu schreiben? (auch über 4gb)
Memory-Mapped-IO ist sicherlich nicht so schlau, wie eine eigene Logik, die für Streams optimiert ist

EDIT:
ich hab mir das nochmal auf Wikipedia durchgelesen
die 4gb Grenze gilt nur für 32bit anwendungen auf 64bit systemen was ja logisch ist... (32bit begrenzt ja auf 4gb so wie bei FAT32)

und der Trick um auch 4gb speicher als 32bit anwendung unter 64bit zu nutzen ist das IMAGE_FILE_LARGE_ADDRESS_AWARE flag zu setzen (laut wiki)

Mam

#8
Zitat von: Djfe am Dezember 05, 2014, 02:05:04
wie können Spiele wie Watch Dogs 6gb RAM vorraussetzen (8gb empfehlen), wenn sie die nicht nutzen können, ich glaub wohl kaum, dass die sich dafür einen 2. Prozess öffnen, kann also nicht ganz stimmen
Indem man einen zweiten, oder auch noch mehr Adresspools anfordert, jeder kann dann die magische Grenze einnehmen. Allerdings kann die Anwendung da nicht beliebig drin rumwuseln, sondern die Spiele laden da normalerweise ihre Texturen rein, die sie dann von der GPU bei Bedarf abholen lassen. So ne Art Ramdisk.

Zitat
virtuelle PCs brauchen auch RAM, und es läuft trotzdem alles
Ja, und? was will der Dichter uns damit sagen?

Zitat
außerdem: Cypheros könnte ja auch den TSD für 64bit anpassen, wenn mehr als 2gb RAM sinnvoll wären
Da hat er sicherlich reichlich zu tun mit, und mit zweifelhaftem Ausgang. Der Doc belegt doch im Moment gerade mal 100-500Mb Ram beim Durchlauf. was soll das dann bringen?


Zitat
Memory-Mapped-IO ist sicherlich nicht so schlau, wie eine eigene Logik, die für Streams optimiert ist
Ja, diese Logik wurde schon in der Steinzeit der EDV erfunden  ;D
Man nennt sie "sequentielles Lesen"  ;D ;D ;D

Zitat
die 4gb Grenze gilt nur für 32bit anwendungen auf 64bit systemen was ja logisch ist... (32bit begrenzt ja auf 4gb so wie bei FAT32)
Lesen bildet zwar im Allgemeinen, doch sollte man das Gelesene auch verstehen können  ;D
Deine 4Gb sind in Wirklichkeit nur 2Gb, denn: 1Gb Windows Adressraum+1Gb IO Space+2Gb Anwendung
Nutzbar sind also nur 2Gb die anderen beiden sind "reserved".

Zitat
und der Trick um auch 4gb speicher als 32bit anwendung unter 64bit zu nutzen ist das IMAGE_FILE_LARGE_ADDRESS_AWARE flag zu setzen (laut wiki)
Ja, tolles Flag! Das teilt Windows beim Laden mit, dass die Anwendung extra für Adressumrechnung programmiert wurde. Da der Doc das nicht ist, würde das Flag nur für einen direkten Abflug beim Start sorgen. Ist wie bei Obama: "Ja, wir können!" klang gut, leider hat der Spruch alleine nicht geholfen...

Irgendwie verwechseln die Leute immer "64-Bit Programm" mit "64-Bit Adressraum". Das hat bei Windows nicht viel miteinander zu tun. Ein "64-Bit Programm" kann Daten (Integer) im 64Bit Format direkt verarbeiten, das ist hilfreich z.B. bei Festplattenverwaltung, denn die war schon seit Windows-NT 64Bit-weit und mußte immer mühsam umgerechnet werden. Der Adressraum wurde trotzdem wieder begrenzt auf 3Gb (diesmal liegt 1Gb Windows "ausserhalb", deshalb 1Gb IO-Space+3Gb Anwendung). Das ist eine künstliche Grenze, die in der HAL.DLL fest einprogrammiert ist.

Djfe

#9
unter wikipedia steht was von 16 exbibyte... ->2^64 bit/byte

außerdem liegt der Windowsteil vom Arbeitsspeicher unter win 64bit nicht dort
->32bit Programme können mit dem Flag volle 4gb nutzen
unter 32bit Windows mit aktiviertem 3gb switch sogar ganze 3gb

ansonsten normales 32bit windows: 2gb Begrenzung, aber das war mir schon vorher klar

ich brauchte den 3gb switch mal für ein Spiel: ABP Reloaded, weil das sonst immer unter 32bit crashte (zu wenig RAM)
mit den fast 3gb ging's dann aber

http://www.apbr.de/all-points-bulletin-strategien-und-tipps/2245-out-memory-error-3gb-switch-anleitung-hilft-meist-dagegen.html

Mam

#10
Zitat von: Djfe am Dezember 05, 2014, 13:42:10
unter wikipedia steht was von 16 exbibyte... ->2^64 bit/byte

Webseiten sind noch geduldiger, als Papier  ;D

Windows kann liegen, wo es will, man braucht trotzdem im Adressraum des Prozesses einen Eintrittspunkt. Ist ja nicht, wie unter MS-DOS, wo man das Betriebssystem immer mit dem Befehl "INT 21H" aufrief (und der Interrupt über einen eigenen Adressmapper verfügte), sondern nun belegt jede Funktion einen eingenen Einsprung. Ein ganzes Gigabyte erscheint da trotzdem recht mit der Gieskanne bemessen, doch vergesse nicht all die netten Funktionen in DLLs, die brauchen auch alle ein lokales Mapping... und so wird die Tabelle recht zügig voll...

Deine Wiki hat insofern recht, theoretisch KÖNNTE man die 64Bit Adressen benutzen. In der Praxis gibt es allerdings keine CPU mit soviel Adressleitungen und auch im Windows selber ist, je nach Version, ein böses "AND #00000000FFFFFFFFh" eingebaut.
Du wollen weniger Nullen? Du zahlen reichlich mehr Kohle!


Djfe

ich weiß das die beste Version von Windows maximal irgendetwas wie 64gb oder sogar 128gb unterstützt, das ist aber dennoch eine Menge und selbst mit 32gb könnte man einen ganzen Film in den Arbeitsspeicher laden

Mam

Zitat von: Djfe am Dezember 06, 2014, 04:27:41
ich weiß das die beste Version von Windows maximal irgendetwas wie 64gb oder sogar 128gb unterstützt, das ist aber dennoch eine Menge und selbst mit 32gb könnte man einen ganzen Film in den Arbeitsspeicher laden
Ich gebs auf  :'(

Studierst Du eigentlich Philosophie, oder was?

Cypheros

OK, streitet nicht weiter rum. Die Stream-Verarbeitung auf mehrere CPUs zu verteilen ist sehr schwierig. Im Gegensatz zur Wiedergabe eines Streams, wo man die einzelnen Ton und Bild-Spuren sehr schön parallel verarbeiten kann, müssen beim TS-Doctor die einzelnen Spuren hinterher wieder zu einem Stream zusammengefügt werden ohne dass sich die Reihenfolge der Pakete ändert.
Stell Dir vor, Du willst einen Faden auf eine Rolle aufwickeln. Klar kannst Du den Faden in der Mitte durchschneiden und beide Hälften gleichzeitig aufwickeln. Das geht doppelt so schnell aber Du erhälst nicht das gleiche Ergebnis.

testest

Was ich schon länger gelernt habe, erst wenn die Verkaufszahlen erkennbar in Gefahr bzw. rückläufig wären finge Onkel Cyph an sich Gedanken zu machen..? Ich überleg grad ob ich mal nen Schritt nach vorn experimentiere und nen core 4790k probiere der nativ 4.0-4.4 GHz bringt. Obwohl die 4.4-4.6 (übertaktet) bei Spielen und anderem kaum was bringen weil die alle Multicore können (da relativiert sich die max-Speed zugunsten CPU's mit noch mehr Kernen) so müsste beim singlecore-TSDoctor schon ein mittlerer Quantensprung drin sein?

Ansonsten grämt euch nicht: jeder größere Schritt nach vorn war immer Durchbrechen einer vollkommen undurchdringlichen Mauer. Das ist schon seit 4000-10000 Jahren so, könnt auch noch länger her sein..


www.cypheros.de