Wraz z dostępnością coraz większych mocy obliczeniowych oraz pojemności pamięci, często słyszałem narzekanie, że teraz programy nie są optymalizowane, tak jak kiedyś. Programiści idą na skróty, korzystają z bibliotek a kiedyś to było
Czasami było to prawdą i łatwość tworzenia oprogramowania okupiony był zwięszkonymi wymaganiami sprzętowymi. Warto pamiętać o trzech parametrach projektu: koszt, czas, jakość. Optymalizacja, która dotyczy tych parametrów może np. zakładać szybsze dostarczenie produktu gdy będziemy wymagali większych zasobów sprzętowych.
Optymalizacja wielkości programu i zapotrzebowania na RAM często wymuszona była przez skromne zasoby pamięci dostępnego mikrokontrolera. Optymalizacja szybkości wykonania kodu często była konieczna, aby rozwiązanie zadziałało na dostępnym sprzęcie.
Obecnie warstwy abstrakcji i narzuty na wykonanie programu są często wręcz konieczne, ułatwiają szybkie tworzenie rozwiązań, współdzielenie infrastruktury, zapanowanie nad złożonymi systemami. Kiedyś mając do dyspozycji modem dial-up nie było sensu tworzyć usługi YouTube, gdy przepustowość łącz do internetu znacząco się zwiększyła, wykreowało to potrzeby i możliwości nowych usług.
Kiedyś produkowane były komputery szachowe. Były to fizyczne szachownice z wbudowanym komputerem obliczającym ruchy. Obecnie znacznie lepiej zagra program uruchomiony na smartfonie, a jeszcze lepiej działający w chmurze dostępny online i często korzystający z AI. Tutaj znajdziecie materiał filmowy o komputerze szachowym na Z80 pod każdym polem znajdował się hallotron wykrywający położenie bierek, LEDy sygnalizowały ruchy komputera. W złącze rozszerzeń można było włożyć pamięć z otwarciami gry lub inny moduł z zakończeniami gry. Wtedy inaczej się nie dało. Robi wrażenie ile wysiłku (czasu) należało włożyć w opracowanie takiego urządzenia. Rozwiązanie musiało być zoptymalizowane aby w ogóle zadziałało i w rozsądnym czasie obliczyło ruch. Podejrzewam, że było to urządzenie dość drogie, droższe i mniej dostępne niż obecna aplikacja na komputer lub smatrfon, nie wspominając o grze przez przeglądarkę.
Tutaj prostszy model Hanimex HCG 1700 oparty o Hitachi HD44840
PCB urządzenia jest dość proste:
https://www.schach-computer.info/wiki/index.php?title=Datei:Hanimex_HCG1700_07.jpg
https://www.schach-computer.info/wiki/index.php?title=Datei:Hanimex_HCG1700_06.jpg
Taktowanie 600kHz, RAM 128B, ROM 5k i co ciekawe to mikrokontroler 4 bitowy.
Jakim cudem to działało?!
Optymalizacja musiała być naprawdę silna, gracz wybierał 1 z 8 poziomów gry (5s do 14min "myślenia" komputera nad ruchem).
Ten komputer szachowy osiągał siłę gry 1090 CElo.
Czy to była ewaluacja najlepszej pozycji i losowe lub iteracyjne sprawdzanie kolejnych ustawień w założonym czasie?
Prostszy i pewnie tańszy CXG-223 osiągał siłę gry 849 CElo na 4 bitowym HD44801 400KHz, 80B RAM, 2,7k ROM.
Kolejne urządzenia korzystały z coraz większych dostępnych zasobów sprzętowych Mephisto Europa A 8 bitowy mikrokontroler, 8MHz taktowanie, 16kB ROM i 256B RAM dawało siłę gry 1722 CElo.
Tutaj można porównać siłę gry różnych komputerów szachowych te na ARM Cortex M7 300 MHz dochodzą do 2594 CElo. Zaskoczyło mnie to, że takie urządzenia nadal są produkowane.
Patrząc na zasoby jakie posiadały pierwsze przenośne komputery szachowe, podejrzewam że większe wymania może mieć program na Arduino wyświetlający 'hello world' na wyświetlaczu OLED... Zasoby są potrzebne większe, ale czasu potrzeba mniej a i efekt może być dość złożony.
Czy optymalizowaliście kod aby zmieścić się w 2048B lub ilość instrukcji po wywołaniu przerwania aby zdążyć zareagować na jakieś zdarzenie?
Na jakie zadania optymalizacyjne natrafiliście?
Optymalizacja wielkości programu i zapotrzebowania na RAM często wymuszona była przez skromne zasoby pamięci dostępnego mikrokontrolera. Optymalizacja szybkości wykonania kodu często była konieczna, aby rozwiązanie zadziałało na dostępnym sprzęcie.
Obecnie warstwy abstrakcji i narzuty na wykonanie programu są często wręcz konieczne, ułatwiają szybkie tworzenie rozwiązań, współdzielenie infrastruktury, zapanowanie nad złożonymi systemami. Kiedyś mając do dyspozycji modem dial-up nie było sensu tworzyć usługi YouTube, gdy przepustowość łącz do internetu znacząco się zwiększyła, wykreowało to potrzeby i możliwości nowych usług.
Kiedyś produkowane były komputery szachowe. Były to fizyczne szachownice z wbudowanym komputerem obliczającym ruchy. Obecnie znacznie lepiej zagra program uruchomiony na smartfonie, a jeszcze lepiej działający w chmurze dostępny online i często korzystający z AI. Tutaj znajdziecie materiał filmowy o komputerze szachowym na Z80 pod każdym polem znajdował się hallotron wykrywający położenie bierek, LEDy sygnalizowały ruchy komputera. W złącze rozszerzeń można było włożyć pamięć z otwarciami gry lub inny moduł z zakończeniami gry. Wtedy inaczej się nie dało. Robi wrażenie ile wysiłku (czasu) należało włożyć w opracowanie takiego urządzenia. Rozwiązanie musiało być zoptymalizowane aby w ogóle zadziałało i w rozsądnym czasie obliczyło ruch. Podejrzewam, że było to urządzenie dość drogie, droższe i mniej dostępne niż obecna aplikacja na komputer lub smatrfon, nie wspominając o grze przez przeglądarkę.
Tutaj prostszy model Hanimex HCG 1700 oparty o Hitachi HD44840
PCB urządzenia jest dość proste:
https://www.schach-computer.info/wiki/index.php?title=Datei:Hanimex_HCG1700_07.jpg
https://www.schach-computer.info/wiki/index.php?title=Datei:Hanimex_HCG1700_06.jpg
Taktowanie 600kHz, RAM 128B, ROM 5k i co ciekawe to mikrokontroler 4 bitowy.
Jakim cudem to działało?!
Optymalizacja musiała być naprawdę silna, gracz wybierał 1 z 8 poziomów gry (5s do 14min "myślenia" komputera nad ruchem).
Ten komputer szachowy osiągał siłę gry 1090 CElo.
Czy to była ewaluacja najlepszej pozycji i losowe lub iteracyjne sprawdzanie kolejnych ustawień w założonym czasie?
Prostszy i pewnie tańszy CXG-223 osiągał siłę gry 849 CElo na 4 bitowym HD44801 400KHz, 80B RAM, 2,7k ROM.
Kolejne urządzenia korzystały z coraz większych dostępnych zasobów sprzętowych Mephisto Europa A 8 bitowy mikrokontroler, 8MHz taktowanie, 16kB ROM i 256B RAM dawało siłę gry 1722 CElo.
Tutaj można porównać siłę gry różnych komputerów szachowych te na ARM Cortex M7 300 MHz dochodzą do 2594 CElo. Zaskoczyło mnie to, że takie urządzenia nadal są produkowane.
Patrząc na zasoby jakie posiadały pierwsze przenośne komputery szachowe, podejrzewam że większe wymania może mieć program na Arduino wyświetlający 'hello world' na wyświetlaczu OLED... Zasoby są potrzebne większe, ale czasu potrzeba mniej a i efekt może być dość złożony.
Czy optymalizowaliście kod aby zmieścić się w 2048B lub ilość instrukcji po wywołaniu przerwania aby zdążyć zareagować na jakieś zdarzenie?
Na jakie zadania optymalizacyjne natrafiliście?
Fajne? Ranking DIY
