Hallo Besucher, der Thread wurde 2,2k mal aufgerufen und enthält 6 Antworten

letzter Beitrag von strik am

N-Queens Problem

  • Hallo an die ASM-Coder,


    ich erstelle gerade anhand des bekannten N-Damen-Problems einen Geschwindigkeitsvergleich für Taschenrechner und Pocket-Computer. Zum besseren Vergleich habe ich auch einige andere Systeme mit in die Tabelle aufgenommen.


    Ich würde gern auch den C64, unbestritten der Homecomputer schlechthin, in die Tabelle aufnehmen, würde dazu aber eure Hilfe benötigen. Unter Calculator Benchmark sind bereits mehrere Assembler-Versionen zu finden. Falls interesse besteht, kann ich den Quellcode kommentieren.


    Natürlich sind auch Ergebnisse anderer Programmiersprachen willkommen.

  • Hallo Xerxes,


    ich habe dein N-Damen-Problem mal in c64-Assembler umgesetzt. Das Programm braucht für 1000 Wiederholungen 107 Sekunden. Es kann mit dem Assembler dasm übersetzt werden. Man kann das fertig übersetzte Programm mit RUN starten.


    Vorbild für mein Programm war das unstrukturierte C-Programm.


    Der C64 hat einen 6502-Prozessor, der mit etwa 0,985 MHz getaktet wird. Beim Test war der Interrupt aktiv und der Bildschirm war eingeschaltet.


    Viel Spaß mit dem Programm!

  • Hallo Mafiosino,


    vielen Dank für deine Umsetzung. Ich habe zwar inzwischen auch eine Version gecoded, diese aber nicht testen können, da ich kein C64 habe. Allerdings hat mir die Analyse deines Programms geholfen, einige Eigenheiten des 6502 besser zu verstehen und meine Version zu debuggen. :)


    Hier ist meine Version (Vorbild war der HD61700 Code):



    Vermutlich wird es bei der Laufzeit keinen nennenswerten Unterschied geben. Der 6502 ist bisher der schnellste 8-Bit-Prozessor im Verhältnis zur Taktfrequenz.


    Wenn die Interrupts gesperrt und der Bildschirm ausgeschaltet wären, könnte man dann einfach die Takte der Befehle addieren um auf die Laufzeit zu schliessen? Ich war nämlich schon dabei einen kleinen Emulator in Pascal zu schreiben, der die Takte der Befehle addiert.

  • Zitat

    Original von Xerxes
    Wenn die Interrupts gesperrt und der Bildschirm ausgeschaltet wären, könnte man dann einfach die Takte der Befehle addieren um auf die Laufzeit zu schliessen? Ich war nämlich schon dabei einen kleinen Emulator in Pascal zu schreiben, der die Takte der Befehle addiert.


    Ja, das kann man. Wieso benutzt du dafür aber nicht einen der schon existierenden Emulatoren? VICE z.B. kann auch Taktzyklen zählen...


    Gruß,
    - Spiro.

  • Hallo strik,


    danke für deinen Hinweis. Natürlich habe ich mir schon gedacht, daß es sowas gibt. Ich bin aber davon ausgegangen, daß es länger dauert sich dort einzuarbeiten, als ein kleines Pascal-Programm zu schreiben, was etwas über eine Stunde gedauert hat.


    Das Programm ist auf 100007 Takte gekommen, also 100007 / 1 MHz = ~0,100 Sekunden, was ja in etwa mit Mafiosinos Ergebnis übereinstimmt. Ich habe deshalb 1 MHz angenommen, da es ja die PAL- und die NTSC- Version gibt.

  • Zitat

    Original von Xerxes
    strik:
    So, habe nun doch Win-VICE heruntergeladen um ein paar Tests in BASIC zu machen, finde aber nicht heraus wo ich die Anzahl der Takte ersehen kann.


    Du mußt VICE selbst kompilieren, und zwar so, dass das C-Makro DEBUG definiert ist (#define DEBUG 1). Dann gibt es im File Menü einen Unterpunkt Debug, wo du einstellen kannst, was (CPU, Drive 8, Drive 9) du debuggen willst. Hier gibt dir VICE dann in die VICE.LOG immer aus, welcher Befehl gerade abgearbeitet wird, wie die Register stehen, und welcher Taktzyklus das gerade ist.


    Hiermit kann man wunderbar Taktzyklen zählen lassen.


    Gruß,
    Spiro