Jaki komputer do testów strategii inwestycyjnej?


Poniżej opisuję moje kolejne kroki w przyśpieszaniu sprzętu służącego do analiz w Amibroker (przyśpieszanie programowe opisałem na bezemerytury.pl/jak-radykalnie-przyspieszyc-optymalizacje-w-amibroker

Serwery w chmurze

Najpierw korzystałem z Amazon (ciekawa opcja wynajmu na godziny, dni i „pauzowanie” bez utraty danych, jak ktoś chce sobie robić testy od czasu do czasu na silnej maszynie). Później korzystałem z serwera w host1.eu. Najlepsze ceny, jakie znam, sprawna komunikacja (po polsku).

Na potrzeby optymalizacji parametrów mojego systemu w Amibrokerze potrzebowałem jednak znacznie mocniejszego komputera. A właściwie to najmocniejszego, jaki da się postawić w domu, bo jego koszt dość szybko się zwróci, jeśli znajdzie bardziej opłacalny system. A dodatkowo, silny sprzęt pozwoli testować systemy od razu na kilku rynkach.

Jeszcze kilka miesięcy temu dogłębne testy jednego systemu na jednym rynku zajmowały kwartał (tak, tak). Niedawno skróciłem optymalizację do 40 godzin. Ale chcąc sprawdzić nową wersję tylko na podstawowych instrumentach (FW20, DAX, NASDAQ, S&P, DJ) potrzebowałem na to 9-10 dni. To zdecydowanie za długo, zwłaszcza że planowałem też zwiększyć komplikację systemów (dodając 3-4 parametry), co wydłużyłoby ten czas nawet 20-krotnie. Konieczna była zatem zmiana sprzętu.

Dlaczego nie wynajem

Koszty najszybszego sprzętu, jaki obsłuży Amibroker (32 wątki procesora) w OVH i Host1 wyniosłyby 2-3 tys zł. Co miesiąc. Za opłatę kwartalną jednak można złożyć własny sprzęt… Oczywiście jak ktoś rozważa sprzęt do stałej pracy to należy wziąć pod uwagę zużycie energii (co jest głównym argumentem firm hostingowych). Taki komputer zużywa ok 300W, co oznacza koszt energii ok 1000zł rocznie (ja tym procesorem ogrzewam wodę w akwarium zamiast dotychczasowych grzałek).

Jaki procesor wybrać?

Procesor dla obliczeń to sprawa kluczowa. Pamięć, dysk, grafika itd. nie mają żadnego znaczenia. Potwierdził to mój test z dwoma dyskami ssd – jeden dość szybki, ale drugi szybszy 5x (zarówno w odczycie, jak i zapisie). Wpływ na szybkość wykonywania obliczeń był zerowy. Podobnie z pamięcią – identyczne czasy dla pamięci o prędkości 2133MHz i 3200MHz. Jaki zatem procesor jest najlepszy?

1. Z dużym cache
Cache poziomu L3 jest 2x szybsza od pamięci RAM. A cache poziomu L2 jest szybsza jeszcze o 25% od L3. Zatem powinniśmy wybrać procesor o takiej wielkości cache, by zmieściły się w niej dane potrzebne do obliczeń, aby nie trzeba było sięgać do pamięci RAM.
Pliki poszczególnych symboli w Ambroker (akcje itd.) mają zwykle ok. 500-5000KB. np. pliki kolejnych serii kontraktów na WIG20 z timeframe 5-min mają ok. 600-900KB, warto zatem wybrać procesor o cache L2 1MB. Takie procesory to seria i9 i niektóre modele i7.

2. Z dużą częstotliwością
Prędkość procesora wynika wprost z prędkości trybu turbo na wszystkich rdzeniach. Obecnie dzięki podkręcaniu jest często możliwa prędkość ok. 5GHz.

3. Z dużą liczbą rdzeni
Amibroker jest w stanie obsłużyć 32 wątki równoległych obliczeń (np. opcja individual optimize). Wydawałoby się zatem, że najlepiej wybrać procesor właśnie o 32 watkach (16 rdzeniach) np. i9-7960X. Okazuje się jednak, że jest on wolniejszy aż o 27%, od znacznie tańszego (33%) i9-7920X (poniżej wyjaśnię dlaczego), a i9-7920X jest tylko 2% szybszy od kosztującego 3x mniej i7-7800X.

Dlaczego procesor o 32 wątkach jest aż 20% wolniejszy od tego o 12 wątkach?

Wynika to z prawa Amdahl’a. Każdy program wykonywany w procesorze ma część kodu, którą da się skalować (i wtedy mogą ją wykonywać wszystkie rdzenie równolegle) i część nieskalowaną (wtedy wszystkie rdzenie czekają, aż pierwszy dokona obliczeń). W sytuacji, gdy część nieskalowalna to 5% kodu, procesor o 32 wątkach wykona dany kod nie 32x szybciej niż procesor o 1 wątku, lecz tylko 13x szybciej. A gdy część nieskalowalna to 10% kodu, przyśpieszenie będzie tylko 8x. Przy udziale części nieskalowalnej 30% (tak jest w moim kodzie) przyśpieszenie nie ma już miejsca powyżej 12 wątków procesora (dlatego wybrałem i7-7800X). Ilustruje to dobrze poniższy wykres:

Zobacz 640px AmdahlsLaw.svg - Jaki komputer do testów strategii inwestycyjnej?

Skąd wiadomo, jaka część kodu AFL z Amibrokera jest skalowalna? Wystarczy włączyć optimize i w zakładce info odczytać wartości UI thread i worker threads. Dla przykładu w moich obliczeniach UI thread: 11869.63 to właśnie 32% całości (suma obu wartości). Zatem 12 wątków procesora to maksimum, co da się użyć efektywnie do obliczeń.

Zobacz amibroker czas optymalizacji 1 600x43 - Jaki komputer do testów strategii inwestycyjnej?

Czy podkręcanie ma sens

Z moich testów wynika, że podkręcanie spowodowało skrócenie czasu analiz mojego systemu o 22% (z 97s do 76s), a komputer zużywał wtedy 35% więcej energii (181W zamiast 134W). Z tego punktu widzenia zatem opłacalność podkręcania jest dyskusyjna. Jednakże skoro komputer ma mi podgrzewać wodę z akwarium, zostawiłem go podkręconego, bo utrzymanie oczekiwanej temperatury wody wymaga właśnie ok 200W – energia zatem i tak byłaby potrzebna, więc niech służy zarówno obliczeniom, jak i rybkom 🙂


Chcesz wiedzieć więcej? Wejdź na stronę z Poradnikami.


  1. ; Tomasz Janeczko pisze:

    Pańskie wnioski odnośnie liczby wątków są całkowicie błędne. Z niewiadomych przyczyn uważą Pan jednostkowe rezultaty za reprezentatywne dla wszystkich. Tak nie jest. Każdy przypadek jest inny i uogolnianie jednego przypadku na wszystkie i podawanie konkluzji w stylu (do 12 wątków) jest całkowicie błędne.
    Gracze giełdowi często popełniają błędy w postaci znajdowania „reguł” które naprawdę nie istnieją (patrz teoria fal eliota, Gann itp „techniki geometryczne”). Analiza techniczna w połowie jest oparta na tym że „komuś się coś wydawało” i Pańska „analiza” jest dokładnie taka.
    Sam Pan może wierzyć w cokolwiek. Innym polecam testy samodzielne.

  2. ; Mariusz Szepietowski pisze:

    Poza pierwszym zdaniem, zgadzam się z Pana komentarzem. Natomiast moje wnioski są prawidłowe, bo zweryfikowane w wielu testach, na podstawie których powstał właśnie ten tekst. Oczywiście dotyczą mojego systemu, co wskazuję wyraźnie, nie dotyczą wszystkich. Bardzo chętnie dowiedziałbym się, że komuś system (nie pojedyncza funkcja) w AFL działa na wielu rdzeniach ponad 7x szybciej, niż na jednym. Mi się to jeszcze nie udało, ale oby ktoś miał więcej szczęścia 🙂

    Pan, jako autor Amibrokera zapewne mógłby szybciej znaleźć wąskie gardło poprzez testy z procesorem 16 rdzeniowym, jaki w ostatnich tygodniach miał swoją premierę i wskazać swym klientom, co zrobić, by uzyskać jak największe przyśpieszenie optymalizacji. Problem leży w procesie obróbki danych (data), który nie rozkłada się na wątki, ani nie daje się przyśpieszyć poprzez lepszy procesor, pamięć RAM, czy dysk. Zostają więc kwestie wewnątrz architektury Amibrokera, może coś dałoby się poprawić…

Zostaw komentarz