Autor Wątek: Interpretery BASIC na różne platformy - test wydajnościowy  (Przeczytany 9680 razy)

ZbyniuR

  • *****
  • Wiadomości: 2542
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX

W KOMPUTER 2-88 str.11 na dole środkowej kolumny trafiłem na wzmiakę o porównaiu prędkości Basica Spectrum do ruskiego Elektronika BK 0010 i GW-Basic w ST. Autor podaje że pętlę  FOR n=1 TO 10000:NEXT   pierwszy wykonuje w 42s, 2gi w 16s a 3ci  w 2sek.

I tak się zastanawiam czy spotkaliście się już z programami testującymi i porównującymi prędkość Basica na różnych platformach?
Albo czy jest tu ktoś zainteresowany takimi testami?  By już się nie opierać na subiektywnych wrażeniach ale na jednoznacznych wynikach. :)

Sam gdzieś kiedyś znalazłem (nie pamiętam w jakiej gazecie) wyniki czegoś takiego ale bez informacji jak to testowano i mierzono. A wynik był podano osobno za: test arytmetyczny, sortowanie zmiennych, wyświetlanie tekstu i rysowanie linii.

Czy ma ktoś pomysł co powinno być w takim teście. Czy taki podział jak powyżej jest optymalny? Jakich komend użyć? W CPC łatwo zmierzyć czas operacji zmienną TIME. A jak to zrobić w innych nie wiem, ale pewnie są tu tacy co wiedzą. :)
Można by to potem używać do porównywania kompilatorów. I stworzyć jednoznaczny ranking. ;)


PS.: Ciekawostka z innej baczki, porównanie wyglądu czcionek na różnych 8bit. :)
http://damieng.com/blog/2011/02/20/typography-in-8-bits-system-fonts
TREK is better than WARS.. ;)

steev

  • *****
  • Wiadomości: 875
  • Miejsce pobytu:
    inode 42
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #1 dnia: 2014.07.28, 20:15:12 »
PS.: Ciekawostka z innej baczki, porównanie wyglądu czcionek na różnych 8bit. :)
http://damieng.com/blog/2011/02/20/typography-in-8-bits-system-fonts
Zabookmarkowane.
Będzie jak znalazł jeśli kiedyś będę potrzebował fajnej czcionki 8px :)
Machines should work. People should think.

ZbyniuR

  • *****
  • Wiadomości: 2542
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
TREK is better than WARS.. ;)

steev

  • *****
  • Wiadomości: 875
  • Miejsce pobytu:
    inode 42
Machines should work. People should think.

popocop

  • *****
  • Wiadomości: 602
  • Miejsce pobytu:
    Warszawa
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #4 dnia: 2014.07.29, 19:32:12 »

W KOMPUTER 2-88 str.11 na dole środkowej kolumny trafiłem na wzmiakę o porównaiu prędkości Basica Spectrum do ruskiego Elektronika BK 0010 i GW-Basic w ST. Autor podaje że pętlę  FOR n=1 TO 10000:NEXT   pierwszy wykonuje w 42s, 2gi w 16s a 3ci  w 2sek.

Przytoczone porównanie nie ma większego sensu, bo to są różne komputery, pracujące z innymi prędkościami. Szybkość BASICa można porównywać, jeśli komputery pracują ze zbliżoną (lub taką samą) prędkością. Ewentualnie na jednym komputerze testuje się kilka wersji BASICa.
ZX Spectrum +2 & PicoDiv SD,
Timex 2048 & divIDE 57c

pear

  • Administrator
  • *****
  • Wiadomości: 4972
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #5 dnia: 2014.07.29, 19:47:12 »
Przytoczone porównanie nie ma większego sensu, bo (...)
Przecież o to chodzi w tym wątku ;)
ZX/Enterprise/CPC/Robotron/C128D

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #6 dnia: 2014.07.29, 21:22:39 »
Generalnie cały ten wątek jest NIEPOŻĄDANY  :D
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF

wojtek9989

  • ***
  • Wiadomości: 114
  • Miejsce pobytu:
    Toruń
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #7 dnia: 2014.07.29, 22:33:36 »
Ale właśnie w tym jest "seks" .Jak czytam ten wątek to jakbym przeniósł się do przeszłości ( patrz lat młodości) i wykłócał się z kumplami , który komp jest lepszy. Najlepsze jest to ,że mimo jestem zagorzałym commodorowcem , bardzo mnie urzekły maszyny ze stajni Sinclair, szczególnie pod względem AY (ma coś w sobie....).     

ZbyniuR

  • *****
  • Wiadomości: 2542
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #8 dnia: 2014.07.30, 00:49:43 »
[email protected] - To jesteś rzadkim przypadkiem, bo zwykle komodorowcy są zakochani w SIDzie. :)


[email protected] - Wybacz nie widzę podstaw by myśleć że nie ma sensu. To tak jakby uważać że nie da się porównać prędkości aut które mają różną wielkość kół, albo ilość biegów, albo jeden jest na benzynę a drugi na ropę. ;)
A przecież chodzi o to by sprawdzić które rozwiązanie się lepiej sprawdza. :)

Program testowy "się robi", potem przedstawię tu jego wersję wstępną w celu konsultacji oraz by poprosić zainteresowanych z innych platform o zrobienie wersji na inne Bejziki. Noo chyba że ktoś mnie uprzedzi i sam tu zamieści swoją wersję. :)

Pomysł jest taki by program się składał z kilku części:
1)  Rysowanie linii - (w tej konkurencji C64 odpada, no chyba że w jakimś popularnym kartridżu jest komenda DRAW lub jej odpowiednik). Proponuję by się ograniczyć do trybu graficznego z kwadratowymi pikselami oraz rozdziałki ze speccy żeby inne kompy nie musiały zapełniać większej ilości bajtów w pamięci ekranu niż on. Choć w CPC się tak nie da bo w takiej rozdziałce ma po 2 bity na piksel a nie 1 jak w pozostałych więc będzie mu trudniej.

2)  Wyświetlanie tekstu - Może być dowolny byle przygotowany wcześniej i aby się składał z takiej samej ilości znaków.

3)  Sortowanie - Oczywiście istnieje wiele metod i samo ich porównywanie to też ciekawe zajęcie dla maniaków. Użyjemy tej samej na wszystkich platformach.

4)  Operacje matematyczne i może jeszcze przekształcanie zmiennych. - A może to powinno być w osobnym teście?

Można by dodać jeszcze inne, czekam na propozycje. :) np. czas potrzebny na wczytanie z pamięci zewnętrznej 16KB. ;)
Oczywiście wyniki podawane w sekundach z dokładnością do paru cyfr po przecinku. Program napisać tak by wszystkie platformy miały takie komendy. Z tym że nie chodzi o brzmienie nazwy, ale o ich odpowiedniki robiące to samo. I przekonamy się która maszyna w czym jest szybsza i o ile. Sam jestem ciekaw które z mitów uda się potwierdzić a które obalić. :)

Gdy już ustalimy wyniki podstawowych konfiguracji można będzie przetestować jakieś rozszerzenia czy zamienniki standardowych procedur z ROM-u i sprawdzić o ile poprawiają one wynik danej maszyny w danej konkurencji. Ot tak z ciekawości. Albo jak sobie radzą bardziej egzotyczne komputery na które ktoś zdoła przetłumaczyć program testowy. :)

CPC ma komendę TIME która świetnie się nadaje do mierzenia jak długo coś się wykonuje. Nie wiem jak to zrobić na innych platformach, ale ufam że tacy co wiedzą się znajdą. :)

Jak ktoś ma jakieś uwagi na temat jakie "konkurencje" powinny być, lub jak sformułować algorytmy, z chęcią przeczytam. Jeśli ktoś jest po prostu ciekawy jak szybko maszyna z innego klanu robi jakąś rzecz, niech o tym napisze. :)
A komentarze o bezsensie takiej "Olimpiady" od teraz będę ignorował. :)
TREK is better than WARS.. ;)

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #9 dnia: 2014.07.30, 09:42:31 »
Jedna uwaga - porównując szybkość operacji w Basicu tak naprawdę nie porównujesz możliwości komputera - porównujesz warianty Basica a Basic to tak naprawdę program jak każdy inny tyle tylko że siedzący w ROMie.

Jak sam zauważyłeś C64 ma raczej kiepski Basic, bez funkcji graficznych jak linia czy okrąg, bez wsparcia dla sprajtów... Czy to znaczy że C64 jest kiepski?

Interpretatory Basica wcale nie były szczególnie wydajne na żadnym z komputerów. Wręcz przeciwnie, to często dość słaby kod, pisany byle się wyrobić w terminie oddania komputera do produkcji.Kilka razy widziałem że siadał już we współczesnych czasach człowiek, coś tam przepisywał i nagle jakaś operacja w Basicu zaczynała działać kilka razy szybciej

Czyli nie porównujesz SPRZĘTU (jak głosi tytuł wątku) tylko wydajność kodu różnych ludzi.
Ale jeśli o to właśnie chodzi to okay.

ZbyniuR

  • *****
  • Wiadomości: 2542
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #10 dnia: 2014.07.30, 18:22:31 »
Tak właśnie o to chodzi. :)

Oczywiście masz rację że w wielu przypadkach procedury w ROMach są słabo zoptymalizowane, co nie raz było poprawiane przez zdolnych koderów. A winę za tą powolność ponoszą programiści ROM-ów a nie konstrukcja sprzętu.  ::)
Niemniej jednak właśnie z taką postacią Basiców jaka jest w ROMach ludzie się głównie stykali, a to rzutowało na opinie o danej marce.

Nie napisałem że C64 ma kiepski Basic. Słyszałem nawet że w XE mimo szybszego procka Basic jest wolniejszy niż w C64. Ale nie wiem czy to prawda. Prawdą jest natomiast to że w C64 brak komend PLOT i DRAW, a są to jedne z ulubionych komend początkujących basicowców. Samodzielne napisanie takich procedur w kodzie jest dla nich niemożliwe. Brak też LOCATE, (w ZX to chyba PRINT AT), co instrukcja proponuje zastąpić serią kodów sterujących w CHR$, a jest to raczej mało wygodne.  :-\  Takie polecenie jest za to w kartridżu. Teraz nie pamiętam czy to był Final czy BlackBox. Sam kiedyś dzięki niej napisałem na C64 Sokobana w trybie znakowym, a gdybym miał się motać z kodami kontrolnymi albo POKE-ami to pewnie bym sobie odpuścił. :) Dodatkowe komendy były 1 lub dwu znakowe, a zaczynały się taką strzałką w lewo. Może ktoś kojarzy w czym to było.
Brakowało też paru innych komend zupełnie tak jakby ten Basic był napisany dla kompa co ma drukarkę zamiast ekranu. Na szczęście każdy komodorowiec miał takie rozszerzenie z którym jego basic stawał się całkiem użyteczny.  (...)


A co do nazwy wątku to wymyślił go Tygrys gdy wydzielił tą dyskusję z jeśli dobrze pamiętam:
http://speccy.pl/forum/index.php/topic,1106.0.html    czyli  "ZX vs C64 vs CPC"  chyba z obawy że przemieni się we wojnę, a chciał mieć możliwość zamknięcia tematu.   Zresztą może to nie głupi pomysł by to porównanie Basiców przenieść do nowego wątku np.  "Olimpiada Basiców" hehe  ;)


A teraz moja wstępna niedokończona wersja CPC programu testującego:

10 MODE 1:DEFINT a,x,d:t=TIME:FOR a=16384 TO 20480:POKE a+1,PEEK(a):NEXT:t2=TIME:PRINT"peek-poke"(t2-t)/300:END
20 SAVE"16KB",b,&C000,&4000:t=TIME:LOAD"16KB":t2=TIME:PRINT"load 16KB"(t2-t)/300:END
30 CLS:t=TIME:FOR x=0 TO 510 STEP 30:FOR d=0 TO 510 STEP 30:PLOT x,0:DRAW d,350:NEXT:NEXT:t2=TIME:PRINT"plot-draw"(t2-t)/300:END
40 CLS:t=TIME:FOR x=0 TO 510 STEP 30:FOR d=510 TO 0 STEP-30:PLOT x,0:DRAWR d-x,350:NEXT:NEXT:t2=TIME:PRINT"plot-drawR"(t2-t)/300:END

MODE 1 - zmienia tryb graficzny na 320x200 i czyści ekran
DEFINT - zmienia domyślną postać zapisywanych zmiennych liczbowych z REAL zapisywaną w 5 bajtach na INTEGER zapisywaną w dwóch bajtach, co nieco przyspiesza obliczenia które nie wymagają liczb zmienno-przecinkowych. Bez tej komendy musiałbym do zmiennych a,d,x dopisywać %.
TIME - to w CPC zmienna systemowa która "liczy" ile czasu minęło od ostatniego resetu. 300 takich jednostek to 1 sekunda. Jak widać łącznie ze zmiennymi t i t2 używam jej do mierzenia czasu trwania testowanych operacji.
DRAW - to odpowiednik DRAWTO w XE rysuje linię od ostatniej pozycji "kursora pikselowego" do tych podanych jako parametry względem współrzędnych 0,0 które w CPC są w lewym dolnym rogu.
DRAWR - to odpowiednik komendy DRAW w ZX rysuje linię od ostatniej pozycji "kursora pikselowego" do tych podanych jako parametry względem ostatniej pozycji "kursora pikselowego".

Linia 10 przenosi bajt po bajcie dokładnie 4KB, pod adres o 1 większy niż źródło czyli w praktyce zapełni te 4KB+1bajt wartością z pierwszego bajtu.
Linia 20 - nagrywa plik binarny o długości 16KB a potem mierzy jak długo go wczytuje z powrotem. W przypadku CPC pomiar może nie być precyzyjny. Po 1sze CPC nagrywa plikom binarnym nagłówek 128bajtów co przy zaokrąglaniu objętości pliku na dysku w górę do pełnego KB zajmuje 17KB a przy wczytaniu wymaga by odczytał o jeden sektor więcej niż zajmuje 16KB. Po 2ie sterownik stacji w CPC nie ma osobnego procesora w stacji tylko korzysta z procesora głównego i pauzuje na mikrosekundy przerwania procesora w trakcie odczytu danych z dysku w tym także te z których korzysta funkcja TIME, zaniżając nieco ilość sekund potrzebną na wczytanie pliku. Po 3ie plik testowy nagrany na pustym dysku wymaga przy odczycie mniejszej ilości ruchów głowicy miedzy ścieżkami niż na dysku pełniejszym. Po 4te na czas pomiaru wpływ ma także to czy w chwili wydania komendy LOAD dysk już się obraca czy jeszcze nie oraz pod jakim kątem dysk jest obrócony czyli ile mikrosekund potrzeba nim głowica dotrze do odpowiedniego sektora.
  Także odczyt pliku z kasety zależy od reakcji człowieka na wciśnięcie klawisza na klawiaturze, oraz od tego jak daleko od początku pliku jest ustawiona taśma. W praktyce każdy pomiar jest nieco inny, ale graniczne przypadki nie przekraczają kilku procent.

Linie 30 i 40 to dwie wersje testu rysujące identyczny wzór, ta druga jest ciut wolniejsza bo w komendzie DRAWR ma odejmowanie w pierwszym parametrze. Liczby współrzędnych są tak duże bo CPC w takiej rozdzielczości na każdy piksel na ekranie ma 4 piksele teoretyczne np 0,0 - 0,1 - 1,0 oraz 1,1 to ciągle ten sam piksel w lewym dolnym rogu. Dlatego w XE i ZX liczby 510, 350 i 30 muszą być zmniejszone o połowę na 255, 175 i 15 aby narysowały tam identyczny wzór. Z tym że linia 30 jest dla XE a 40 dla ZX. :)

Testy prędkości wyświetlania tekstów, matematyczne, obróbki zmiennych tekstowych, i sortowania z komendami warunkowymi i skoków - są na razie w chmurze moich myśli. Może ktoś mi coś podpowie?  ???

Mam nadzieję że już macie pomysły jak mierzyć czas na swoich platformach i czekam na wyniki testu oraz pytania, uwagi i komentarze. :)
TREK is better than WARS.. ;)

dely

  • ***
  • Wiadomości: 136
  • Miejsce pobytu:
    Radom
  • Trzcinowy Zakapior
    • atari.area
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #11 dnia: 2014.07.31, 21:24:53 »
Brak też LOCATE, (w ZX to chyba PRINT AT), co instrukcja proponuje zastąpić serią kodów sterujących w CHR$, a jest to raczej mało wygodne.  :-\ 
Jeśli chodzi Ci o umieszczenie znaku w konkretnym miejscu ekranu, to jest to na Atari instrukcja POSITION X,Y.

LOCATE X,Y,Z ma inną rolę. W zależności od trybu graficznego zwraca rejestr koloru na pozycji X,Y, rejestr koloru i znak, lub tylko znak.
Z drugiej strony barykady ~ http://www.atari.org.pl/

ZbyniuR

  • *****
  • Wiadomości: 2542
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #12 dnia: 2014.07.31, 22:36:28 »
Trzeba by kiedyś zrobić taką tabelkę z listą komend z popularnych Basiców, aby ktoś kto nie zna innych dialektów posiłkując się nią mógł wklepywać do swojego kompa listingi z innych maszyn. Bo prócz wspólnego kanonu typu PRINT, FOR NEXT, IF THEN, GOSUB RETURN, itp są takie kwiatki jak właśnie ten. :)

CPC - LOCATE / ZX - PRINT AT / XE - POSITION / C64 - <L (ale tylko z wetkniętym Turbo)  ;)

No to kawałek jest, jeszcze zostało ze 100 komend. :D

Widziałem tego typu tabelkę ale nie kompletną a raczej z przykładami jako ciekawostkę w KOMPUTER nr.7-86 str 24-25.


A coś takiego jak to LOCATE w XE to w CPC jest TEST do odczytu koloru piksela oraz COPYCHR$ do odczytu litery z ekranu, (jednak to drugie jest tylko w 6128 i 664). Ale Bajtek opisywał kiedyś trik jak to zrobić w 464. :)
« Ostatnia zmiana: 2014.07.31, 22:51:22 wysłana przez ZbyniuR »
TREK is better than WARS.. ;)

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #13 dnia: 2014.08.01, 11:19:37 »
Cytuj
A coś takiego jak to LOCATE w XE to w CPC jest TEST do odczytu koloru piksela oraz COPYCHR$ do odczytu litery z ekranu

Uzupełnię (choć na tym portalu w zasadzie każdy powienien to wiedzieć ;) ) że w Basicu Spectrum:

ATTR - zwraca atrybut (czyli kolory) pola w podanym miejscu na ekranie
SCREEN$ - zwraca znak w podanym miejscu na ekranie

W zasadzie wszystkie te Basiki mają to samo tylko inaczej się nazywa :)

Phonex

  • *****
  • Wiadomości: 1092
  • Miejsce pobytu:
    Warszawa
Odp: Interpretery BASIC na różne platformy - test wydajnościowy
« Odpowiedź #14 dnia: 2014.08.01, 12:17:05 »
ATTR - zwraca atrybut (czyli kolory) pola w podanym miejscu na ekranie
SCREEN$ - zwraca znak w podanym miejscu na ekranie

POINT - zwraca stan pixela  (1 lub 0) w podanym miejscu.