BezEmerytury.pl

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:

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ń.

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 🙂

Exit mobile version