Τρίτη 17 Μαρτίου 2020

The speed of BASIC (μέρος 2ο)

Εδώ ο κόσμος καίγεται και... κάποιοι ασχολούνται με την BASIC. Και όχι απλώς με την BASIC, αλλά με τις επιδόσεις υπολογιστών 35-40 χρόνων σε αυτήν! Αλλά, έτσι είναι: αν κάποιος την βρίσκει με τα retro computers και κάποια πανδημία τον κλείσει σπίτι, αυτά είναι τα αποτελέσματα!


Όπως θα θυμάστε είχαμε ασχοληθεί με τα benchmarks του Personal Computer World, και δη με τα τρία πρώτα. Για να προχωρήσουμε λοιπόν στα επόμενα, για να διαπιστώσουμε εάν η κατάσταση που διαμορφώθηκε αρχικά, με τους BBC micro, Acorn Electron και Amstrad CPC να κυριαρχούν θα συνεχιστεί...

Benchmark #4

20 LET k=0
30 LET k=k+1
40 LET a=k/2*3+4-5
50 IF k<1000 THEN GOTO 30

Σχεδόν το ίδιο με το 3ο benchmark, με τη διαφορά ότι έχουμε αντικαταστήσει μεταβλητές με συγκεκριμένους αριθμούς. Λογικά θα πρέπει να είναι κατά τι ταχύτερο του προηγούμενου...

PC (Celeron/2400MHz) (QBASIC) --> 0,024 sec
Acorn BBC Micro model B (6502/2MHz) --> 8,7 sec
Amstrad CPC 464 (Z80A/4MHz) --> 9,8 sec
Acorn Electron (6502/2MHz) --> 11,76 sec
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 15,8 sec
Commodore VIC-20 (6502/1MHz) --> 16,9 sec
Commodore Plus/4 (8501/1,76MHz) --> 18,8 sec  
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 19,2 sec
Commodore 64 (6510/1MHz) --> 19,5 sec
Commodore 128 (8502/2MHz) --> 23,7 sec
Atari 800XL (6502/2MHz) --> 24,1 sec

...κάτι που σε κάποιες περιπτώσεις ίσχυσε, αλλά σε κάποιες πάλι όχι. Αυτό που σίγουρα ίσχυσε ήταν το ότι οι 2 Acorn (BBC, Electron) και ο Amstrad CPC συνέχισαν να αφήνουν με διαφορά πίσω τους όλους τους υπόλοιπους, εκ των οποίων ταχύτερος ήταν ο ZX81 (χωρίς απεικόνιση στην οθόνη όση ώρα έκανε τις πράξεις, βέβαια)! Από την άλλη, Commodore 128 και Atari 800XL επιδόθηκαν σε έναν ανελέητο αγώνα για την τελευταία θέση (!), την οποία και κατέκτησε επάξια ο Atari (με μικρή όμως διαφορά). Άντε, και εις ανώτερα!


Benchmark #5

20 LET k=0
30 LET k=k+1
40 LET a=k/2*3+4-5
45 GOSUB 700
50 IF k<1000 THEN GOTO 30
60 STOP
700 RETURN

Ακριβώς ίδιο με το 4ο benchmark, με μόνη διαφορά την κλίση μίας κενής υπορουτίνας. Πόσο μπορεί να επιβαρύνει κάτι τέτοιο; Για να δούμε. Να σημειωθεί ότι η εντολή 60 έχει προστεθεί προκειμένου να μην προκύπτει σφάλμα στην 700 όταν k=1000.

PC (Celeron/2400MHz) (QBASIC) --> 0,025 sec
Acorn BBC Micro model B (6502/2MHz) --> 9,0 sec
Amstrad CPC 464 (Z80A/4MHz) --> 10,39 sec
Acorn Electron (6502/2MHz) --> 12,4 sec
Commodore VIC-20 (6502/1MHz) --> 18,1 sec
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 18,6 sec
Commodore Plus/4 (8501/1,76MHz) --> 20,8 sec  
Commodore 64 (6510/1MHz) --> 21 sec
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 23,1 sec
Atari 800XL (6502/2MHz) --> 26,3 sec
Commodore 128 (8502/2MHz) --> 26,4 sec

Τι είχες Γιάννη, τι είχα πάντα. BBC Micro, Amstrad CPC και Acorn Electron σε ρόλο λαγού, Atari 800XL και Commodore 128 σε αυτός της χελώνας, και όλοι οι υπόλοιποι (VIC-20, ZX81, Plus/4, Commodore 64, ZX Spectrum) μέσα σε ένα εύρος 5 δευτερολέπτων μεταξύ του ταχύτερου (VIC-20) και του πλέον αργού (ZX Spectrum). Εδώ θα πρέπει να παρατηρήσουμε - και σε συνδυασμό φυσικά με τα προηγούμενα benchmarks - ότι οι ZX Spectrum, Atari 800XL και Commodore 128 είναι... μνημειωδώς αργοί (!), αλλά ο τελευταίος σε όλα αυτά τα tests τρέχει στο 1MHz (40στηλη απεικόνιση) και όχι στα 2MHz (80στηλη απεικόνιση) που είναι και η ονομαστική ταχύτητα του επεξεργαστή του. Όταν ολοκληρώσουμε θα παραθέσουμε και τα αποτελέσματα του 128άρη σε FAST mode, τα οποία, όπως θα διαπιστώσετε, διαφοροποιούν σημαντικά τους συσχετισμούς...


Benchmark #6

20 LET k=0
25 DIM m(5)
30 LET k=k+1
40 LET a=k/2*3+4-5
45 GOSUB 700
46 FOR l=1 TO 5
48 NEXT l
50 IF k<1000 THEN GOTO 30
60 STOP
700 RETURN

Στο benchmark αυτό, προστίθεται ο καθορισμός ενός πίνακα (στην εντολή 25) και ενός μικρού, κενού loop (46-48). Ο πίνακας θα χρησιμοποιηθεί στο επόμενο (7o) benchmark, αλλά ο καθορισμός του και, πολύ περισσότερο, το loop θα μεγαλώσουν σημαντικά τον χρόνο εκτέλεσης...

PC (Celeron/2400MHz) (QBASIC) --> 0,072 sec
Acorn BBC Micro model B (6502/2MHz) --> 13,9 sec
Acorn Electron (6502/2MHz) --> 18,72 sec
Amstrad CPC 464 (Z80A/4MHz) --> 19,33 sec 
Commodore VIC-20 (6502/1MHz) --> 26,65 sec 
Commodore 64 (6510/1MHz) --> 29,5 sec
Commodore Plus/4 (8501/1,76MHz) --> 34,4 sec   
Atari 800XL (6502/2MHz) --> 40,3 sec
Commodore 128 (8502/2MHz) --> 42,75 sec
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 49,7 sec
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 53,4 sec

Αν και η τριάδα της κορυφής παραμένει η ίδια, αυτή τη φορά ο BBC μοιάζει να παίζει μόνο του σε δική του κατηγορία. Ο VIC-20 συνεχίζει την παράδοση (;) που τον θέλει να βρίσκεται μέσα στους 4-5 πρώτους - και σίγουρα να είναι ο ταχύτερος Commodore - και αυτή τη φορά τα δύο μοντέλα της Sinclair αποτελούν τους ουραγούς του συγκριτικού. Όχι φυσικά ότι και στα προηγούμενα έβαζαν φωτιά με τις επιδόσεις τους...

Σε αυτό το σημείο θα ολοκληρώσω αυτό, το 2ο μέρος και θα σας δώσω ραντεβού για το 3ο, εκεί όπου θα βρούμε και τα 2 πλέον απαιτητικά και χρονοβόρα benchmarks...

2 σχόλια:

  1. Να σε ρωτησω κατι εδω...τα παραπάνω 64κ του 6128 παρά τους όποιους περιορισμούς είχε ο z80 στην διαχείριση τους, θα επηρέαζαν το αποτέλεσμα σε σχέση με το 464;

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Γεια σου Σπύρο και ζητώ συγγνώμη για την καθυστερημένη απάντηση.

      Λοιπόν, η παραπάνω μνήμη όχι, δεν βελτιώνει τις επιδόσεις, ίσα-ίσα τις χειροτερεύει γενικώς στα 8μπιτα, καθώς, μέσω σελιδοποίησης πρέπει να απευθυνθούν σε διαφορετικό block της RAM ανά περίπτωση, αφού οι 8μπιτοι επεξεργαστές μπορούν να "δουν" μέχρι 64ΚΒ συνολικά. Στην περίπτωση των benchmarks λογικά δεν επηρεάζει, αφού δεν γίνεται πρόσβαση σε κάποιο upper block της RAM - οι διαφορές θα εντοπίζονταν σε πιο μνημοβόρα προγράμματα...

      Αυτό που ίσως να έπαιζε κάποιο ρόλο είναι η διαφορετική έκδοση της BASIC (v1.1 vs v1.0) - αλλά θα πρέπει να το τσεκάρω για να σου πω με σιγουριά...

      Διαγραφή

Το σχόλιό σας θα δημοσιευθεί μετά από έλεγχο του διαχειριστή του blog προς αποφυγή spam σχολίων. Σας ευχαριστούμε για την κατανόηση.