amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Wer kann mir dieses Programm in AmiBlitz übersetzten? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

16.01.2008, 11:01 Uhr

Back2Root
Posts: 8
Nutzer
Hallo,
Ich habe ein einfaches Benchmark Programm in QBasic geschrieben. Es geht darum, einmal zu testen wie schnell die verschiedenen Prozessortypen genau dieses Programm abarbeiten (von 386sx – Dual Core 2). Nun möchte ich auch die Amiga 68xxx Prozessoren testen. Ein Versuch mit Maxon Basic 3 Demo brachte mir einen zu schlechten Wert (Ein 68030+68882 25 MHz braucht doppelt so lange wie ein Intel 386sx+387sx 20 MHz). Nun habe ich gelesen das AmiBlitz Basic die schnellste Variante auf dem Amiga ist. Da ich selbst kein AmiBlitz Basic kann, bitte ich euch um eine Übersetzung des QBasic Programms in Amiblitz (Quelltext) und es auf diese Seite zu Verfügung zu stellen.

Im Voraus vielen Dank

[ - Antworten - Zitieren - Direktlink - ]

16.01.2008, 11:07 Uhr

Back2Root
Posts: 8
Nutzer
Und hier der Quelltext (QBasic Format)

CLS
PRINT TAB(32); "Starte Benchmark"
PRINT : PRINT
A$ = DATE$
B$ = TIME$
FOR X = 1 TO 500
FOR A = 0 TO 128
B = A + 1
C = B - 1
D = A * 2
E = D / 2
NEXT A
FOR A = 0 TO 32768 STEP 128
B = A + 1
C = B - 1
D = A * 2
E = D / 2
NEXT A
FOR A = 0 TO 8388608 STEP 32768
B = A + 1
C = B - 1
D = A * 2
E = D / 2
NEXT A
FOR A = 0 TO 32768
B = A + 3.141592
C = B - 1.414213
D = A * 3.141592
E = D / 1.414213
NEXT A
FOR A = 0 TO 32768
B# = A + 3.141592654123456#
C# = B - 1.141213562123456#
D# = A * 3.141592654123456#
E# = D / 1.141213562123456#
NEXT A
FOR A = 0 TO 32768
B = SQR(A)
C = SIN(A)
D = COS(A)
E = TAN(A)
NEXT A
FOR A = 0 TO 32768
B# = SQR(A)
C# = SIN(A)
D# = COS(A)
E# = TAN(A)
NEXT A
Y = Y + 1: IF Y = 10 THEN PRINT "#"; : Y = 0
NEXT X
PRINT : PRINT
PRINT : PRINT TAB(34); "Fertig !!!"
PRINT TAB(23); "Startzeit :"; A$; " "; B$
PRINT TAB(23); "Endzeit :"; DATE$; " "; TIME$


[ - Antworten - Zitieren - Direktlink - ]

16.01.2008, 11:34 Uhr

p-OS
Posts: 131
Nutzer
Wie ich sehe, verwendest du nur absolute Grundbefehle. Eigentlich sollte das daher Programm ohne Änderungen unter so ziemlich jedem BASIC-Dialekt laufen.

[ - Antworten - Zitieren - Direktlink - ]

16.01.2008, 11:35 Uhr

FischX
Posts: 436
Nutzer
Sinnlos.
Du verzerrst damit nur das Ergebnis, und erfährst damit genau gar nix wie schnell die Plattform ist.
Wenn dann müsstest du das in Assembler umsetzten, auch dann währe es nicht repräsentativ.

[ - Antworten - Zitieren - Direktlink - ]

16.01.2008, 12:27 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Das wäre die Amiblitz Variante mit der eclock.include zur genauen Zeitmessung (ist bei AB3 mit dabei, must den Soruce nur copy&paste in den Editor kopieren).
Es lässt sich aber nicht ganz 1:1 umsetzen, auch halte ich das teilweise gar nicht für sinnvoll was da passiert, da du Variablen Typen gar nicht neu deklarierst, bzw. benutzt für alles Integer?
Da würde der Compiler sowieso zur Compilezeit schon aus den Komma-Zahlen Integer machen, bringt also gar nichts.

Was bedeuted das "#" bei den Zahlen?
Ich habe das ganze jetzt in 32bit Integer (A,B,C,D,E)und
32bit Float (F,G,H,I,J) umgesetzt.

Amiblitz kann auch Double Float, aber wohl nicht bei Konstanten.

Auf meinem WinUAE Laptop braucht das ganze etwa 15,4s.

Allerdings vergleichst du hier dann eher die verschiedenen Compiler als die verschiedenen Plattformen.
Da wäre noch am sinnvollsten, das gleiche Program in C mit dem GCC für verschiedene Platformen zu kompilieren. Bei Basic sind die Unterschiede der Compiler viel zu gross.
Das Program müsste dann aber was komplexeres machen, weil sonst viele Dinge dem Optimizer zum Opfer fallen. Also z.B. zlib packen oder mp3 encodieren. LAME wäre hier evtl. ein Benchmark, da er für alle Plattformen vorhanden ist.

code:
Syntax 2
optimize 7
XINCLUDE "eclock.include.bb2"

NPrint "Starte Benchmark..."
eclock_Start{1000}
For X.l = 1 To 500
  For A.l = 0 To 128
    B.l = A + 1
    C.l = B - 1
    D.l = A * 2
    E.l = D / 2
  Next A
  For A = 0 To 32768 Step 128
    B = A + 1
    C = B - 1
    D = A * 2
    E = D / 2
  Next A
  For A = 0 To 8388608 Step 32768
    B = A + 1
    C = B - 1
    D = A * 2
    E = D / 2
  Next A
  For F.f = 0 To 32768
    G.f = F + 3.141592
    H.f = G - 1.414213
    I.f = H * 3.141592
    J.f = I / 1.414213
  Next F
  For F = 0 To 32768
    G = F + 3.1415926;54123456
    H = G - 1.1412135;62123456
    I = H * 3.1415926;54123456
    J = I / 1.1412135;62123456
  Next F
  For F = 0 To 32768
    G = Sqr(F)
    H = Sin(F)
    I = Cos(F)
    J = Tan(F)
  Next F
  For F = 0 To 32768
    G = Sqr(F)
    H = Sin(F)
    I = Cos(F)
    J = Tan(F)
  Next F
  Y.l = Y + 1: If Y = 10 Then Print "#" : Y = 0
Next X
NPrint "nFertig !!!"
duration.f = eclock_Stop{}/1000
Format "###,###,##0.000"
NPrint "Zeitdauer : ",duration,"s"
End



--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de




[ Dieser Beitrag wurde von Der_Wanderer am 16.01.2008 um 12:37 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

16.01.2008, 14:17 Uhr

Back2Root
Posts: 8
Nutzer
zum Beitrag von FischX:
Natürlich ist dieser Benchmark nicht repräsentativ. Selbst in Assembler geschrieben können Benchmark stark beeinflusst von Cachegröße und der Auswahl von Befehlserweiterungen völlig unterschiedliche Ergebnisse erbringen. So rechnet ein Prozessor z.B. viel schneller wenn es gelingt ein Programm so zu schreiben, dass es komplett in den L1 Cache passt. Bei den x86 CPU's ist es mit den Erweiterungen (z.B. MMX. SSE,SSE2,…) und dem Multi-Threading noch komplizierter. So kann man z.B. eine viel schnellere Fließkomma Berechnungen mit der SSE2 Einheit erhalten als mit der FPU Einheit (aber auch ungenauer). Deshalb habe ich auch nur die üblichen Befehle benutzt, die auf allen CPU's laufen sollten (Eine QBasic EXE erkennt automatisch ob eine FPU Einheit vorhanden ist).
Man kann aber mit diesem Benchmark erkennen, wie „gut“ genau dieses Programm mit den verschiedenen Prozessor Typen läuft. Und darum ging es mir.

Zum Beitrag von Der_Wanderer:
Zunächst einmal vielen Dank für das Listing!Mit der Zeitmessung stellte für mich kein Problem dar, da selbst der schnellste von meinen PC (AMD Ahtlon 64 FX 60) immer noch 67 Sekunden braucht um den Benchmark zu beenden (natürlich wird nur ein Kern benutzt!). Der langsamste PC (386sx +387sx 20 MHz) brauchte übrigens 14379 Sekunden. Der Amiga 2000 (68030+68882 25 MHz brauchte mit MaxonBasic Demo 27919 Sekunden.
Zu den Variablen: Im Standard Basic gibt es nur 4 Variablen Typen:
1. Zeichenfolgenvariablen (Typenzeichen: $)
2. Ganzzahlvariablen (Typenbezeichnung: %)
3. Einfache Genauigkeit (Typenbezeichnung: !)
4. Doppelte Genauigkeit (Typenbezeichnung: #)
Ob es bei QBasic eine Fließkomma Variable gibt ist mir leider nicht bekannt (Ich dachte das QBasic automatisch den richtigen Variablentype wählt).
Zu dem Zeichen #:
Wie oben bereits beschrieben dient das # um eine Variable der Typs Doppelte Genauigkeit zu erzeugen.
Zu der Programmiersprache C:
An C habe ich auch schon gedacht. Kann aber leider kein C. Wenn Du jedoch Lust hast kannst Du mir mal den C Source Code auf dieser Seite hereinstellen. Ich denke da an eine Version die am Amiga im Shell läuft. Also ganz ohne Schnick Schnack wie z.B Fenster u.s.w. Als Compiler habe ich eine StormC Version. Für den PC müsste ich noch suchen.
Zu Programme die es auf beiden Plattformen (PC+Amiga) gibt.
Habe ich auch schon probiert. Das Problem liegt z.B. bei Lame darin das die PC Versionen mit anderen CPU Extension kompiliert wurden (MMX oder sogar Multi-Threading).Sodas die x86 CPU natürlich dem 68xxx CPU immer haushoch überlegen ist.
Ich möchte gerne das die Benchmark Werte in etwa gleich aussehen. Das heißt das ein 68030 in etwa die gleichen Werte im Benchmark bekommt wie ein 386, ein 68040 etwa die Werte von einem 486, ein 68060 etwa die Werte eines Pentium bei gleicher Taktfrequenz. Da Maxxon Baisc nur den halben Benchmark Wert erreicht hoffe ich das mit Amiblitz Basic zumindest ein Gleichstand entsteht. Mir ist schon klar das der Benchmark nicht so gut skaliert wie vielleicht ein anderes Programm. Bei den x86 gibt es bei den neueren Prozessoren teilweise unerwartete starke Einbrüche. Z.B. braucht ein Intel Core2 Duo Extrem X6800 2933 MHz 110 Sekunden, Ein Intel Pentium IIIS 1400 MHz 130 Sekunden um den Benchmark zu beenden.
Das Benchmark Programm kann nur zeigen, wie gut es auf diesem Prozessor läuft.
So und nun werde ich mal Dein Listing mit meinen Rechner testen….


[ - Antworten - Zitieren - Direktlink - ]

16.01.2008, 14:41 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Hm.. eigenartig. Du versuchst also den Benchmark so zu tunen, bis er auf zwei verschiedenen Prozessoren in etwa gleichschnell ist?
Gehört das nicht andersherum ;-)
Note: Amiblitz ist unter WinUAE +ber 10mal so schnell wie QBasic nativ ;-)
(mein Laptop: Intel Core2 Duo 1,7GHz)

Amiblitz mit QBasic vergleichen sind auch Äpfel mit Birnen verglichen, siehst du daran, dass es unter Amiblitz nur 15 Sekunden dauert, obwohl es durch die 68K Emu von WinUAE quetschen muss.

Und wenn eine CPU extentions hat, warum sollte man die nicht nutzen ?
Du willst doch gerade die Stärken von CPUs miteinander vergleichen.

Bei einem C Prog würde ich aber auch den gleichen C Compiler nehmen, damit wenigstens die High-Level optimierungen gleich sind. Da kommt eigentlich nur GCC in Frage, den gibts quasi auf jeder Plattform.


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de



[ Dieser Beitrag wurde von Der_Wanderer am 16.01.2008 um 14:46 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

16.01.2008, 17:37 Uhr

Back2Root
Posts: 8
Nutzer
@Der_Wanderer:
Es geht mir eigentlich darum:
Ich baue einen PC und einen Amiga nebeneinander auf. Beide Rechner haben etwa die gleiche Rechenleistung. Sagen wir mal ein PC mit 486 25 MHz CPU und einen Amiga mit 68040 25 MHz CPU. Jetzt lasse ich den Basic Benchmark (Da ich nur in Basic Programmieren kann) auf beiden Rechner laufen. Zu erwarten währe jetzt das beide Programme in etwa gleich schnell rechnen (wenn der Basic Kompilier bei beiden Rechner gleich gut programmiert wurde). Ist es aber nicht!!! Bei den Versuchen mir ACE Basic Kompilier oder Maxon Basic brachten für den Amiga weitaus schlechtere Ergebnisse. Nun frage ich mich natürlich warum. Mir scheint es so, als ob sowohl ACE Basic als auch Maxon Basic die FPU gar nicht nutzt. Deshalb scheint mir Amiblitz genau der richtige Basic Kompilier zu sein da dieser eben die FPU unterstützt. Deshalb der Aufruf zu dem Amiblitz Listing.
Nun scheint sich die Waage aber stark in Richtung Amiga zu verschieben. Es gibt natürlich auch auf den PC schnellere Basic Kompilier als QBasic (Vielleicht Blitzbasic das ja der Urvater von Amiblitz ist).
Wie es aussieht scheint die Programmiersprache C doch die einzige Möglichkeit zu sein ein Einigermasen gleiche Startvoraussetzung für beide Plattformen zu schaffen. Ich muss mich mal in C einlesen. Die umsetzen der „Berechnungsschleifen“ sollte eigentlich kein großes Problem sein. Etwas schwieriger stelle ich mir das mit der Time Funktion vor. Naja mal schauen….
Zu den Extentions: Natürlich sollte jedes „richtige Programm“ möglichst viele CPU Extensionen nutzten um das Programm möglichst schnell zu machen. Da aber die 68xxx Linie bestenfalls eine FPU hat und der schnellste CPU (68060) bestenfalls mit einem Ur Pentium (der auch nur eine FPU hat) in der x86 Line zu vergleichen ist, braucht man eigentlich nur die FPU Extension. Da es sowieso keinen Sinn mach einen alten 68xxx CPU mit einen aktuellen x86 CPU (oder anderen) zu vergleichen.
Zu GCC Kompilier:
Hatte mal vor Jahren GCC auf dem Amiga installiert, was zumindest damals nicht so einfach war. Und auch einmal das „tolle Programm“ „Hello World“ programmiert.
Zu guter letzt:
Das „Benchmark Programm“ ist natürlich nur eine Spielerei. Es gibt viele Benchmark Programme die das weitaus besser können. ;-)


[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Wer kann mir dieses Programm in AmiBlitz übersetzten? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.