Forum: Mikrocontroller und Digitale Elektronik Schach für ARM Cortex


von Uwe M. (drosiusingolf)


Lesenswert?

Guten Abend Freunde der Elektronik!

Für den AVR und früher für den ZX81 gibt/gab es kleine Schachprogramme. 
Gibt es so etwas auch für Arm Cortex, die sicherlich aufgrund ihrer 
Rechenpower eine interessante Spielstärke erreichen könnten. Tante 
Google führt mich nur zu käuflichen Schachcomputern mit den Prozessoren.
Gruß

Uwe

Beitrag #5639263 wurde von einem Moderator gelöscht.
von Uwe M. (drosiusingolf)


Lesenswert?

Nochmals: Schach für Arm Cortex, nicht für Windows!

von Tom p. (Gast)


Lesenswert?

mit solch einer Frage sind offenbar einige hier schwer 
unterfordert...wie so oft..wird aus einer einzigen EINFACHEN Frage eine 
etliche Stunden laufende Diskussion..der nächste fragt dich gleich was 
Du denn damit willst..der nächste kommt damit das Du deine Anforderungen 
nicht klar ausgedrückt hast etc pp.
Ein Trauerspiel....

von Tom p. (Gast)


Lesenswert?

ach ja, und zum Schluss sagen sie, das Du vermutlich nur ein Troll bist 
und rumtrollen willst...das übliche eben

von pegel (Gast)


Lesenswert?

Mit Angabe des Wunsch MCU kann man auch suchen:

https://duckduckgo.com/?q=stm32+chess

von Cornelius (Gast)


Lesenswert?

Eine interessante Frage.

Schach gab's wohl schon auf dem 6502 und dem Z80:
https://www.schach-computer.info/wiki/index.php?title=Schachcomputer

Wenn man bedenkt, das früher Schach die Königsdisziplin der KI war.

Wie dumm ist doch der Mensch ...

von Dr. Sommer (Gast)


Lesenswert?

Warum soll der Algorithmus speziell für ARM sein? Ein in korrektem C, 
C++, Java, C#, ... geschriebener Schach-Algorithmus läuft auf jedem 
Prozessor. Auch wenn er irgendwann mal für ZX81 konzipiert war.

von Christopher J. (christopher_j23)


Lesenswert?

Dr. Sommer schrieb:
> Warum soll der Algorithmus speziell für ARM sein? Ein in korrektem C,
> C++, Java, C#, ... geschriebener Schach-Algorithmus läuft auf jedem
> Prozessor. Auch wenn er irgendwann mal für ZX81 konzipiert war.

Das ist so erstmal korrekt und im Falle von Stockfish läuft das ja auch 
so auf jedem Android-Handy. Für einen Cortex-M dürfte Stockfish 
allerdings zu groß sein.

Das hier sieht für mich aber sehr interessant aus: 
https://www.ct800.net/

Interessanter Spielstil und mit etwa 2100 Elo auch nicht so ganz ohne ;)

von jemand (Gast)


Lesenswert?

Dann nimmst du halt einen beliebiges Schachprogramm in C, wie dieses...
https://github.com/fogleman/MisterQueen

...und jagst das durch deinen Compiler.

Ob genau DAS für dich tut, weiß ich nicht. Ich haber nur schnell das in 
Google eingetippt. Aber du wirst fündig werden, denke ich.

Ja, das tut man so. Denn C ist eine Hochsprache, und ist im Normalfall 
Hardwareunabhängig. Um die Umsetzung auf deinem ARM Cortex kümmert sich 
dein Compiler. Im Höchstfall mussst du geringe Anpassungen machen.

von xXx (Gast)


Lesenswert?

Wenn du nach "open source schach" suchst solltest du was finden un dann 
ist auch die Plattform egal.

von Patrick B. (p51d)


Lesenswert?

Dr. Sommer schrieb:
> Warum soll der Algorithmus speziell für ARM sein? Ein in korrektem C,
> C++, Java, C#, ... geschriebener Schach-Algorithmus läuft auf jedem
> Prozessor. Auch wenn er irgendwann mal für ZX81 konzipiert war.

Das kommt halt ganz darauf an, wieviele Möglichkeiten man vorausrechnen 
will. Mit einer intelligenten Software kann man den Entscheidungsbaum 
schon mal vereinfachen. Aber die Rechentiefe ist abhängig von 
Prozessorleistung. Wenn man jetzt z.B. mit Assembler arbeitet oder 
Kombinationen damit macht, denke ich, dass ein paar Ebenen mehr drin 
sein sollten. Aber ob das nötig ist...

von Dr. Sommer (Gast)


Lesenswert?

Patrick B. schrieb:
> Aber die Rechentiefe ist abhängig von
> Prozessorleistung.

Gute Software sollte man die natürlich an die Prozessorleistung anpassen 
(skalieren) können.

Patrick B. schrieb:
> Wenn man jetzt z.B. mit Assembler arbeitet oder
> Kombinationen damit macht, denke ich, dass ein paar Ebenen mehr drin
> sein sollten.

Ein paar Ebenen entspricht dann einer Potenzierung, also mehrere 
Größenordnungen schneller. Ich bezweifle dann doch, dass man von Hand in 
Assembler so viel effizienter kodieren kann, zumal es dank moderner 
Pipeline-Prozessoren überhaupt ziemlich kompliziert ist, all die 
Timing-Details zu beachten die der Compiler eingebaut hat.

Beispiel: Im "ARM System Developer's Guide" (2004) sind einige 
Optimierungen gezeigt, wie man seinen C-Code schneller machen kann, mit 
Beispielen was der Compiler aus der "langsamen" und "schnellen" Variante 
macht. Das habe ich mal ausprobiert - ein aktueller GCC produziert für 
alle Varianten den gleichen Code, der noch effizienter als das ist, was 
im Buch steht...

von Uwe M. (drosiusingolf)


Lesenswert?

Dr. Sommer schrieb:
> Warum soll der Algorithmus speziell für ARM sein? Ein in korrektem C,
> C++, Java, C#, ... geschriebener Schach-Algorithmus läuft auf jedem
> Prozessor. Auch wenn er irgendwann mal für ZX81 konzipiert war.

Mit dem Ziel ARM Cortex zeige ich an, habe stark limitierten Speicher 
(256 Kb Flash), ebenso sehr stark limitiertes RAM, was für Hash Tables 
ein No go ist. Und ich möchte keinen Source Code haben, der unter 
Windows läuft, denn sollte auf Betriebssystemroutinen (Libraries) 
zurückgegriffen werden, ist Feierabend. Außerden sind die Windows- und 
Linux Schachprogramme meisten viel zu groß.

Source Code für Java- da brauche ich doch einen Java Interpreter 
(Runtime environment), das dürfte bei 256 kb Flash lustig werden...., 
oder?

von Dr. Sommer (Gast)


Lesenswert?

Uwe M. schrieb:
> Und ich möchte keinen Source Code haben, der unter
> Windows läuft, denn sollte auf Betriebssystemroutinen (Libraries)
> zurückgegriffen werden, ist Feierabend.

Wozu braucht ein Schach-Algorithmus Betriebssystemroutinen? Die 
braucht's nur für die Nutzeroberfläche, die du sowieso neu schreiben 
musst.

Uwe M. schrieb:
> Außerden sind die Windows- und
> Linux Schachprogramme meisten viel zu groß.

Wenn man die Grafiken und Texte für die GUI rausnimmt wird das schon 
viel weniger. 256 KB Flash (oder mehr, manche STM32 haben 2 MB) wirklich 
komplett nur mit Code zu füllen muss man erst mal schaffen,

Uwe M. schrieb:
> Source Code für Java- da brauche ich doch einen Java Interpreter
> (Runtime environment), das dürfte bei 256 kb Flash lustig werden....,
> oder?
Es gibt Java für STM32.

von PittyJ (Gast)


Lesenswert?

Ein Arm-Cortex alleine sagt nichts aus.
Es gibt die A, die R und die M Reihe mit unterschiedlichen Profilen.
Dahinter kommt meist noch eine Zahl.

Ich habe hier gerade einen ARM Cortex A15. Der hat 4 Core mit 1.4 GHz. 
Daran hängen 2 Gbyte Ram.
Der kann es locker mit älteren Pentiums aufnehmen. Ich habe C++ und auch 
Qt darauf.

Wenn Arm, dann gib genau an, was du an Prozessor hast.

von Jürgen F. (unterstrom)


Lesenswert?

Hallo,
such mal unter "Deep Evelyn", gabs vor Jahren mal als 
Programmierwettbewerb bei Elektor, lief unter 8051-Derivaten.
Oder hier: Beitrag "günstige Programmierumgebung für 8051?"

Jürgen

von Uwe M. (drosiusingolf)


Lesenswert?

>Ich bezweifle dann doch, dass man von Hand in
> Assembler so viel effizienter kodieren kann,

Ich hatte mal dieses Jahr ein Morseprogramm in C auf dem GCC und dem IAR 
Compiler (Optimierung an) für einen M0+ geschrieben, sollte ein Test 
sein, dann exakt diesen Algorithmus Zeile für Zeile in Assembler 
formuliert. Auf Anhieb Faktor 2,5 schneller erreicht, und dann später 
bis zum Faktor drei optimiert. Natürlich weiß ich, daß Aufwand und 
Portierbarkeit grausam sind (Ausnahme Portierung innerhalb einer 
Familie). Ich will die Leistung eines C Compilers nicht schmälern, vor 
dessen Optimierungsleistung ich viel Respekt habe. Aber Assembler ist 
nun mal unerreichbar in Sachen Geschwindigkeit und Codegröße.

von Uwe M. (drosiusingolf)


Lesenswert?

PittyJ schrieb:
> Ein Arm-Cortex alleine sagt nichts aus.

Stimmt, sorry! Ich meine einen M4.

von Nur mal so nebenbei (Gast)


Lesenswert?

Patrick B. schrieb:
> Dr. Sommer schrieb:
>> Warum soll der Algorithmus speziell für ARM sein? Ein in korrektem C,
>> C++, Java, C#, ... geschriebener Schach-Algorithmus läuft auf jedem
>> Prozessor. Auch wenn er irgendwann mal für ZX81 konzipiert war.
>
> Das kommt halt ganz darauf an, wieviele Möglichkeiten man vorausrechnen
> will. Mit einer intelligenten Software kann man den Entscheidungsbaum
> schon mal vereinfachen. Aber die Rechentiefe ist abhängig von
> Prozessorleistung. Wenn man jetzt z.B. mit Assembler arbeitet oder
> Kombinationen damit macht, denke ich, dass ein paar Ebenen mehr drin
> sein sollten. Aber ob das nötig ist...

Wenn man damit die Tiefe erreicht das Endspieldatenbanken das korrekte 
Endergebnis berechnen können, dann hat man sehr viel erreicht.


Übrigens, der C64 mit 64k Memory und Colossus 4.0 war damals schon so 
stark ,daß wenn er hier gegen die Forenteilnehmer spielen würde, 
mindestens 95% aller Punke holen würde.

von Dr. Sommer (Gast)


Lesenswert?

Uwe M. schrieb:
> Auf Anhieb Faktor 2,5 schneller erreicht, und dann später
> bis zum Faktor drei optimiert.

Wie üblich bei solchen Anekdoten wäre es schön, den genauen Code zu 
kennen. Beim M0 hat man wohl noch keine komplexe Pipeline und Cache, 
welche das Assembler-Programmieren erschweren.

von Bernd K. (prof7bit)


Lesenswert?

Lesenswert (schrittweise, alles erklärt, mit code):
http://web.archive.org/web/20120621100214/http://www.sluijten.com/winglet/

von Patrick B. (p51d)


Lesenswert?

Dr. Sommer schrieb:
> Beispiel: Im "ARM System Developer's Guide" (2004) sind einige
> Optimierungen gezeigt

Hei danke. Ich arbeite nun schon Jahre mit ARM aber die gezeigten 
Optimierungen, respektive Compiler-Verhalten sind mir neu.
Verhalten sich andere Prozessoren ähnlich? Oder kann es passieren, dass 
der gleiche Code massiv unterschiedliche Performance hat, je nach 
Zielsystem?

von Dr. Sommer (Gast)


Lesenswert?

Patrick B. schrieb:
> Verhalten sich andere Prozessoren ähnlich?

Worauf jetzt genau bezogen? Alle leistungsfähigen modernen Prozessoren 
haben Pipelines und Caches, falls es darum geht.

Patrick B. schrieb:
> Oder kann es passieren, dass
> der gleiche Code massiv unterschiedliche Performance hat, je nach
> Zielsystem?
Das sowieso. Was auf einem ARM schnell geht, kann beim AVR 
schnarchlangsam sein, allein schon weil der keinen Barrel-Shifter, 
weniger Adressierungs-Möglichkeiten, keine FPU, und natürlich weniger 
Bits pro Register hat.

von R.A. (Gast)


Lesenswert?

Hallo,

der Autor des CT800 hier. Da ich meine Backlinks nicht täglich prüfe, 
hat es etwas gedauert. Dass es außer dem CT800 soweit ich weiß kein 
OSS-Schachprojekt auf Cortex-M gibt, liegt einfach daran, dass bislang 
sonst niemand ohne finanzielle Kompensation den nötigen Aufwand 
getrieben hat.

Man kann grundsätzlich PC-Engines auf Cortex-M bringen, der CT800 ist ja 
ein Fork von NG-Play. Bitboard-Engines wie Stockfish sind aufgrund des 
Speicherbedarfes praktisch nicht möglich. Auch mit dem Stackverbrauch 
muss man sich Gedanken machen, weil das auf dem PC kein Gesichtspunkt 
ist. Hashtabellen gehen, nur entsprechend kleiner.

Der Löwenanteil des Aufwands geht in das User-Interface - besonders, 
wenn man ein vollwertiges Gerät mit diversen Zeitmodi, Optionen und 
Eröffnungsbuch bauen will. Dazu noch die Hardware, schließlich muss man 
das alles aufbauen und für die Ansteuerung auch Treiber schreiben.

viele Grüße, Rasmus

von Uwe M. (drosiusingolf)


Lesenswert?

Hallo Rasmus!

Vielen Dank für den Hinweis! Habe sofort deine Seite besucht und alles 
runtergeladen. Muss mich aber im Januar damit ausführlich beschäftigen, 
scheint umfangreich zu sein bei der Leistungsfähigkeit deines Programms, 
alle Achtung!!!
LG

Uwe

von R.A. (Gast)


Lesenswert?

Hi Uwe,

Freut mich, dass es dir gefällt!

Da das ja ein Fachforum für embedded ist: schau dir im Moment die 
Treiberschicht lieber nicht zu genau an. ;-) Die braucht ein 
Refactoring, was für das nächste Release Anfang Januar geplant ist.

Vom Umfang her dürfte der größte Einzelposten wohl das Eröffnungsbuch 
sein: 22000 verschiedene Züge in 12000 Positionen, jeder einzelne von 
Hand eingegeben und mit einem Desktop-Pprogramm geprüft.

Wenn man die PC/Android-Version auf ungefähr 30 kNPS (30000 Knoten pro 
Sekunde) drosselt und die Hashtabellen auf 1 MB einstellt, kommt die 
Spielstärke dem realen Gerät schon sehr nahe.

viele Grüße, Rasmus

von Bri (bri)


Lesenswert?

Vielleicht so als Idee abseits eines ARM Cortex, falls das in Frage 
kommt:

Ich bastel mir gerade einen Schachcomputer zusammen. Die Schachengine 
(z.B. Stockfish oder Toga 2) läuft auf einem Raspberry Pi und die 
Ansteuerung des Schachbretts macht ein Arduino mit paar zusätzlichen 
ICs. Die Zuganzeige auf dem Schachbrett wird mit 64 LEDs gemacht. Die 
Position der Figuren wird mit AH1802 Magnetfeldsensoren ermittelt. Für 
die Bedienung habe ich ein Waveshare 5" Touch LCD über HDMI und USB an 
den Raspberry Pi angeschlossen.

von Dr. Sommer (Gast)


Lesenswert?

Naja, der PI ist zwar kein Cortex-A sondern dessen veralteter 
ARM11-Vorgänger, aber dennoch ziemlich ähnlich. "Abseits von Cortex" 
stimmt also nicht so ganz...

von Teilnehmer (Gast)


Lesenswert?

Tom p. schrieb:
> ach ja, und zum Schluss sagen sie, das Du vermutlich nur ein Troll
> bist und rumtrollen willst...das übliche eben

Deshalb WAR das mal ein gutes Forum.
Heute ist es besser du kuemmerst dich um deine Probleme selbst und loest 
sie alleine.

von Uwe M. (drosiusingolf)


Lesenswert?

Teilnehmer schrieb:
> Deshalb WAR das mal ein gutes Forum.

Paar Idioten gibt es immer, auch in der realen Welt. Vermiete mal 
Wohnungen..... Dennoch muss ich sagen, hatte hier von den mehrheitlich 
konstruktiv veranlagten Leuten tolle Tipps erhalten, etwa beim Einstieg 
in die ARM-Cortex M Welt, Löten von 0,5 mm Strukturen, Schach, man hat 
mir Kicad schmackhaft gemacht (ich liebe Kicad!), so daß mein 
Lebensabend richtig spannend geworden ist. Erst SAM D M0+ Projekt mit 
Kicad layoutet, dann zu ST gewechselt zum M4, geiles Ding. Ich danke all 
diesen Leuten und wünsche allen einen guten Rutsch nach 2019!

Uwe

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.