Медленно но верно, мой алгодвижок становится многопоточным.
Что это значит на практике? Одной из фишек моего движка — тестер-оптимизатор с визуальным представлением всех кривых эквити. Один год минутных данных на 80 инструментах робот считал примерно пять минут, пятиминутки считались около минуты. Это было сопоставимо с производительностью Wealth-Lab, и в общем, приемелемо, однако задача стоит более глобальная, и она потребует много исторических расчетов.
В связи с тем, что мне пришлось работать с многопоточностью для Takion, я решил попробовать использовать подобную технику для оптимизатора, и результаты меня порадовали.
После добавления многопоточности и небольшой оптимизации алгоритмов скорость на i7-3770K увеличилась в десять раз и стала более чем приемлема. Минутки — 30 секунд, пятиминутки — 6.
На этом я не успокоился и собрал сервер с двумя Xeon X5650 2.6GHz, 6 ядер в каждом. Итого у меня появилась возможность запускать сразу 24 потока.
Прирост скорости не впечатлил, если честно. Вместо планируемого ускорения в два с лишним раза я получил прирост в районе 20%. Думаю, надо лучше работать с данными, на картинке внизу видно, что процессоры загружены не полностью, и в какие-то моменты, очевидно, находятся в режиме ожидания очереди. В общем, есть над чем работать.
В планах, если когда-нибудь возникнет потребность работать с большим количеством тиковых данных, я хочу попробовать поработать с технологией обсчета на видеокартах NVidia. Например, за 5 тысяч долларов можно купить NVidia Tesla K40 и получить маленький атомный реактор, но пока это не актуально, загрузка роботом CPU в режиме торговли у меня сейчас в районе 1%, терминалы же успешно грузят один поток.
И еще, я заметил справа графики загрузки проца. Там хоть и написано 100%, но судя по графику, загрузка не полная…
Мне интересно, по какому признаку ты выбираешь из нескольких эквити лучшую?
П.С. Заходи в чат, у меня в профиле ссылка есть. Там проще обсуждать.