Как оптимизировать скорость тестирования?
Atom Ответить
28.08.2013


Добрый день!
Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для полной загрузки всех ядер процессора и оперативной памяти?
Какие рекомендации для оптимизации скорости алгоритмов? (чем пользоваться, чем не пользоваться)
В примере:
Код

var periods = new[]
{
    new Triple<int, int, Color>(80, 10, Colors.DarkGreen),
    new Triple<int, int, Color>(70, 8, Colors.Red),
    new Triple<int, int, Color>(60, 6, Colors.DarkBlue),
};

Код

foreach (var period in periods)
{
    // создаем тестовый инструмент, на котором будет производится тестирование 
    var security = new Security
    {
......


Цитата:

... для каждого периода создается свой отдельный инструмент, портфель, стратегия, шлюз для тестирования и т.д. Это сделано для того, чтобы отдельные потоки могли менять свою копию данных, не создавая коллизии в других потоках тестирования.

Как такой код может параллельно считать в несколько потоков? Как-то не ясно из примера...

Теги:


Спасибо:



Скидка 15% на все обучение до 5 апреля (осталось 2 дней).

2 Ответов
IvanB

Фотография
Дата: 29.08.2013
Ответить


Bond Перейти
Добрый день!
Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для полной загрузки всех ядер процессора и оперативной памяти?
Какие рекомендации для оптимизации скорости алгоритмов? (чем пользоваться, чем не пользоваться)

Многое зависит от того какое тестирование Вы хотите провести, протестировать некоторую стратегию, с уже определенными параметрами на большой истории, или Вам надо подобрать параметры для своей стратегии.
Т.е. есть возможность распараллелить по двум направлениям: первый - поделить всю историю на отрезки и для каждого запустить полноценную инфраструктуру; второй - сформировать пакеты параметров стратегий и для каждого пакета запустить свою инфраструктуру, этот вариант продемонстрирован в примере SampleHistoryTestingParallel, входящим в архив S#.

Для реализации обоих схем, не обязательно, даже, навыки работы с многопоточностью в C#, большая часть распараллеливания будет сделана неявно.

Bond Перейти

В примере:

Цитата:

... для каждого периода создается свой отдельный инструмент, портфель, стратегия, шлюз для тестирования и т.д. Это сделано для того, чтобы отдельные потоки могли менять свою копию данных, не создавая коллизии в других потоках тестирования.

Как такой код может параллельно считать в несколько потоков? Как-то не ясно из примера...

В коде создается три значения:
Код

var periods = new[]
{
    new Triple<int, int, Color>(80, 10, Colors.DarkGreen),
    new Triple<int, int, Color>(70, 8, Colors.Red),
    new Triple<int, int, Color>(60, 6, Colors.DarkBlue),
};

каждый элемент списка (например первый:80, 10, Colors.DarkGreen), это параметры стратегии, которые мы хотим проверить, т.о. у нас имеется три пакета параметров, которые мы хотим проверить/протестировать.
Далее в коде мы создаем три абсолютно независимых направления, вплоть до того, что трейдер у нас будет разный (свой в каждом направлении), но при этом источник данных (хранилище storageRegistry) у нас одно.
И поскольку, S# активно использует возможности многопоточности (в своей реализации, в библиотеках), то все эти три направления будут работать в разных не зависимых потоках, которые в свою очередь будут распределены автоматически, средствами операционной системы, на разные процессоры, по возможности.
Таким образом, не оперируя явно потоками. мы можем распараллеливать тестирование.

Спасибо: Bond

Bond

Фотография
Курсы
Дата: 29.08.2013
Ответить


Спасибо, Иван! Ваши советы очень помогают! ThumpUp
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy