Startseite Sinclair QL zurück zu den Microdrives Performance-Vergleich: Microdrive-Laufwerk versus Floppy-Laufwerk
|
20000-mal 4-Zeichen-String schreiben: | 20000-mal 4-Zeichen-String lesen: |
QL SuperBASIC:
10 OPEN_NEW#5,mdv2_testout 20 OPEN#6,ser1 30 c$=DATE$ 40 FOR i=1 TO 20000 50 PRINT#5,"ABCD" 60 NEXT i 70 CLOSE#5 80 d$=DATE$ 90 PRINT#6,c$\d$ |
QL SuperBASIC:
10 OPEN#5,mdv2_testout 20 OPEN#6,ser1 30 c$=DATE$ 40 FOR i=1 TO 20000 50 INPUT#5,a$ 60 NEXT i 70 CLOSE#5 80 d$=DATE$ 90 PRINT#6,c$\d$ |
C64 BASIC:
10 TI$="000000" 20 OPEN4,4 30 OPEN2,8,12,"TESTOUT,S,W" 35 PRINT#4,"PROGRAMMSTART: ";TI$ 40 FOR I=1TO20000 50 PRINT#2,"ABCD" 60 NEXT 80 CLOSE2 90 PRINT#4,"PROGRAMMENDE : ";TI$ 95 CLOSE4 |
C64 BASIC:
10 TI$="000000" 20 OPEN4,4 30 OPEN2,8,12,"TESTOUT,S,R" 35 PRINT#4,"PROGRAMMSTART: ";TI$ 40 FOR I=1TO20000 50 INPUT#2,A$ 60 NEXT 80 CLOSE2 90 PRINT#4,"PROGRAMMENDE : ";TI$ 95 CLOSE4 |
Testmodus: | QL mit 90mm-Floppy: | QL mit Microdrive: | C64 mit 130mm-Floppy: | ||||||
Schreiben: | Lesen: | Wieder-Lesen: | Schreiben: | Lesen: | Wieder-Lesen: | Schreiben: | Lesen: | Wieder-Lesen: | |
interpretiertes BASIC | 2min 50sec | 3min 28sec | 2min 42sec | 4min 10sec | 3min 18sec | 2min 41sec | 9min 48sec | 9min 28sec | 9min 28sec |
kompiliertes BASIC | 1min 10sec | 1min 33sec | 1min 09sec | 1min 44sec | 1min 49sec | 1min 09sec | 9min 05sec | 8min 31sec | 8min 31sec |
Mein Kommentar:
Wir haben den Lese-Test zweimal hintereinander durchgeführt, um den Einfluss der intelligenten I/O-Cache-Verwaltung im
Betriebssystem des QL zu sehen:
Im QL werden vom Betriebssystem diejenigen Teile des Arbeitsspeichers, die gerade von keinem Prozess belegt sind,
automatisch (und dynamisch) als I/O-Cache-Memory verwendet, um die I/O-Zugriffe zu beschleunigen.
Soweit also eine Sektorkopie der zu lesenden Daten noch irgendwo im Cache des QL vorhanden ist, spart sich der QL die Zeit für einen
externen Datenzugriff und liest statt dessen die Daten direkt aus dem Arbeitsspeicher.
Deshalb ist die "Wieder-Lesen"-Zeit küzer als die "Lesen"-Zeit und im Übrigen bei QL-Floppy und QL-Microdrive gleich.
Beim C64 gibt es keine solchen Cache-Mechanismen, daher ist dort der "Lesen"-Wert gleich dem "Wieder-Lesen"-Wert.
Dass beim QL der 1. Lesewert des QL-Microdrives sogar besser ausfiel als der 1. Lesewert der QL-Floppy, verstehe ich zwar nicht
ganz, aber vielleicht konnte das Microdrive-Laufwerk besonders günstig an das kürzere Microdrive-Directory und die
kürzere Cluster-Tabelle herankommen als das Floppy-Laufwerk, die Tendenz aller Messungen lag jedoch im Rahmen der
Erwartungen.
Die Leistungen des C64-Floppylaufwerks fielen allerdings deutlich schlechter aus als von uns erwartet -
und bestätigten dadurch, dass die oben erwähnte niedrige Transferrate von nur 3,2 Kilobaud
(gegenüber den 100 Kilobaud der Microdrives) durchaus kein Mythos war!
Trotz der wesentlich längeren Wartezeit, die auf einem Endlosband gegenüber einer
Floppy bis zum Lese-Start zu erwarten ist, siegte das Microdrive-System sehr deutlich über das viel teurere C64-Floppy-System.
Dass die QL-Floppy insgesamt sowohl über das QL-Microdrive als auch über die C64-Floppy siegen würde,
war uns von Anfang an klar gewesen.
Diesen Test haben wir nur auf dem QL durchgeführt, der C64 hat ja nur insgesamt 64 KiB Speicher und kann selbst davon nur einen
gewissen Teil auf einmal in sich hineinlesen. Bei diesem Test wollten wir den Unterschied zwischen den QL-Microdrives und (echten)
QL-Floppies sehen, wenn beide - anders als im vorigen Test - eine große Datenmenge AUF EINMAL speichern oder lesen müssen.
Speicherabzug (100000 Byte) schreiben: | Bereich reservieren und 100000 Byte einlesen: |
QL SuperBASIC:
10 OPEN#5,ser1 20 SDATE 1986,1,1,0,0,0 30 c$=DATE$ 40 SBYTES mdv2_yyy,500000,100000 50 d$=DATE$ 60 PRINT#5,c$\d$ |
QL SuperBASIC:
10 OPEN#5,ser1 20 SDATE 1986,1,1,0,0,0 30 c$=DATE$ 35 a=RESPR(100000) 40 LBYTES mdv2_yyy,a 50 d$=DATE$ 60 PRINT#5,c$\d$ |
Testmodus: | QL mit 90mm-Floppy: | QL mit Microdrive: | ||||
Schreiben: | Lesen: | Wieder-Lesen: | Schreiben: | Lesen: | Wieder-Lesen: | |
interpretiertes BASIC | 0min 19sec | 0min 06sec | 0min 07sec | 0min 21sec | 0min 20sec | 0min 07sec |
Mein Kommentar:
Dieser Test zeigt deutlich die erstaunliche Performanz der Microdrives - ein so knappes Ergebnis (19 Sekunden versus 21 Sekunden, beim Schreiben)
hatten wir nicht erwartet! Einer der Werte allerdings (nämlich der Lesewert der Floppy, die schon das erstemal nach nur 6 Sekunden fertig war)
hat mich jedoch nachträglich stutzig gemacht: er ist gar "zu gut" und ich vermute jetzt, daß mir damals bei diesem Test der
Floppycontroller einen Streich gespielt hat - wahrscheinlich besaß er on-board einen eigenen Cache-Speicher, der durch das Rücksetzen
des QL nicht ebenfalls zurückgesetzt worden war, und so konnte er sich damals vermutlich mit seinem erhalten gebliebenen Privat-Cache
die Arbeit erleichtern ... leider ist mir das erst Jahre später aufgefallen, so dass ich den Test nicht
mehr mit der gleichen Hardware wiederholen konnte (ich hatte sie inzwischen verschenkt).
Wir haben dazu nicht die FOR-Schleife benutzt, denn wir wussten nicht genau, ob der eine oder andere Interpreter besondere Optimierungen benutzt - und
womöglich erkennt, dass in der Schleife außer dem Hochzählen des Counters gar nichts passiert und die Schleife weg-optimiert.
So haben wir uns für ein simples Inkrementieren des Counters und einen bedingten Rücksprung entschieden, um möglichst gleiche
Sprungbedingungen in allen betroffenen PC's zu erreichen.
Näheres zum Siemens PC-D auf meiner Seite über den Siemens PC-D
QL SuperBASIC:
10 OPEN_NEW#4,ser1hc:BAUD 600 20 SDATE 1986,1,1,0,0,0 30 PRINT#4,"Programmstart: ";DATE$ 40 a=0 50 a=a+1 60 IF a<100000 THEN GO TO 50 70 PRINT#4,"Programmende: ";DATE$ 80 PRINT"Programmende: ";DATE$ 90 CLOSE#4 |
C64 BASIC:
10 OPEN4,4 20 TI$="000000" 30 PRINT#4,"PROGRAMMSTART: ";TI$ 40 LET A=0 50 LET A=A+1 60 IF A<100000 THEN 50 70 PRINT#4,"PROGRAMMENDE : ";TI$ 80 PRINT"PROGRAMMENDE : ";TI$ 90 PRINT#4:CLOSE4 |
Testmodus: | Sinclair QL (68008 / 7.5 MHz) |
Commodore C64 (6510 / 1 MHz) |
IBM PC XT (8088 / 4.77 MHz) |
Siemens PC-D (80186 / 8 MHz) |
interpretiertes BASIC | 7min 17sec | 19min 22sec | 8min 07sec | 3min 37sec |
kompiliertes BASIC | 0min 36sec | 2min 47sec | mangels Compiler nicht gemessen | mangels Compiler nicht gemessen |
Mein Kommentar:
Im Siemens PC-D, der diesen Test mit deutlichem Vorsprung gewonnen hat, war wohl ein flinker Interpreter am Werk.
Es überrascht andererseits auch nicht sehr, denn es war immerhin der am schnellsten getaktete Computer im Test
(siehe die Ergebnistabellen-Kopfzeile). Leider hatten wir damals keine BASIC-Compiler für die
beiden MSDOS-Computer, doch kann man den Unterschied zwischen interpretiertem und kompiliertem BASIC auch
an den für den Sinclair QL und den C64 gemessenen Werten deutlich erkennen.
Sollte jemand noch einen mit 4,77 MHz getakteten IBM PC-XT oder den mit 8 MHz getakteten
Siemens PC-D und dazu einen BASIC-Compiler besitzen und den Test nachholen,
so wäre ich immer noch interessiert daran, die zwei in der obigen Tabelle fehlenden Ergebniswerte zu erfahren !
Dass der Sinclair QL beim Interpreter-Test relativ langsam war, so dass er den viel langsamer getakteten IBM PC XT
nur knapp schlagen konnte, zeigt auf, dass der BASIC-Interpreter des QL ein ganz besonders langsames Exemplar seiner
Gattung war. Das BASIC des QL, genannt "SuperBASIC" war tatsächlich ein sehr weiterentwickeltes BASIC,
mit schachtelbaren Anweisungen, parametrisierbaren Prozeduren und Funktionen, Definition lokaler Variable (so dass auch
rekursive Programmierung möglich war), usw. usw. Da es aber unglaublicherweise zusammen mit dem ebenfalls
ungewöhnlich guten und sowohl Fenstertechnik als auch präemptives Multitasking unterstützenden
Betriebssystem QDOS gemeinsam in ein nur 48 KiB (!!) großes ROM gequetscht worden war, hatte der Programmierer des
Interpreters die internen Integer-Rechenroutinen einfach weggelassen, um Platz zu sparen. Der Interpreter wandelte
folglich bei jedem Schleifendurchgang die Integer-Zahl in Variable A ins interne Gleitkommaformat um,
addierte eine Gleitkomma-Eins dazu, und wandelte das Ergebnis wieder ins Integerformat zurück,
um die Schleifenbedingung zu prüfen - es zeigt die deutliche Leistungs-Überlegenheit der 68008
CPU, dass sie mit dem Programm dennoch in anständiger Zeit fertig wurde.
Beim kompilierten SuperBASIC zeigte sich auf dem QL deshalb ein dramatisch besserer Wert.