Как оптимизировать скорость тестирования?~/topic/3936/kak-optimizirovat-skorost-testirovaniya/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T01:26:59Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/27216/Спасибо, Иван! Ваши советы очень помогают! 2013-08-29T07:43:16Z2013-08-29T07:43:16ZBondhttps://stocksharp.ru/users/26882/info@stocksharp.ruСпасибо, Иван! Ваши советы очень помогают! [thumbup] Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/27215/Добрый день! Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для по...2013-08-29T07:28:23Z2013-08-29T07:28:23ZIvanBhttps://stocksharp.ru/users/26984/info@stocksharp.ru<div class="quote"><span class="quotetitle">Bond <a href="https://stocksharp.ru/posts/m/27191/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">Добрый день!<br />Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для полной загрузки всех ядер процессора и оперативной памяти?<br />Какие рекомендации для оптимизации скорости алгоритмов? (чем пользоваться, чем не пользоваться)<br /></div></div><br />Многое зависит от того какое тестирование Вы хотите провести, протестировать некоторую стратегию, с уже определенными параметрами на большой истории, или Вам надо подобрать параметры для своей стратегии.<br />Т.е. есть возможность распараллелить по двум направлениям: первый - поделить всю историю на отрезки и для каждого запустить полноценную инфраструктуру; второй - сформировать пакеты параметров стратегий и для каждого пакета запустить свою инфраструктуру, этот вариант продемонстрирован в примере SampleHistoryTestingParallel, входящим в <a href="http://www.stocksharp.com/login.aspx?ReturnUrl=%252fproducts%252fdownload%252f" title="http://www.stocksharp.com/login.aspx?ReturnUrl=%252fproducts%252fdownload%252f">архив S#</a>.<br /><br />Для реализации обоих схем, не обязательно, даже, навыки работы с многопоточностью в C#, большая часть распараллеливания будет сделана неявно.<br /><br /><div class="quote"><span class="quotetitle">Bond <a href="https://stocksharp.ru/posts/m/27191/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />В примере:<br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_e80160497d4f4033ae7e5ac997785554');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_e80160497d4f4033ae7e5ac997785554' style='display:none'><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
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),
};
</pre>
</div></div><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
foreach (var period in periods)
{
// создаем тестовый инструмент, на котором будет производится тестирование
var security = new Security
{
......
</pre>
</div></div></div><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />... для каждого периода создается свой отдельный инструмент, портфель, стратегия, шлюз для тестирования и т.д. Это сделано для того, чтобы отдельные потоки могли менять свою копию данных, не создавая коллизии в других потоках тестирования.<br /></div></div><br />Как такой код может параллельно считать в несколько потоков? Как-то не ясно из примера...</div></div><br />В коде создается три значения:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
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),
};
</pre>
</div></div><br />каждый элемент списка (например первый:80, 10, Colors.DarkGreen), это параметры стратегии, которые мы хотим проверить, т.о. у нас имеется три пакета параметров, которые мы хотим проверить/протестировать.<br />Далее в коде мы создаем три абсолютно независимых направления, вплоть до того, что трейдер у нас будет разный (свой в каждом направлении), но при этом источник данных (хранилище storageRegistry) у нас одно.<br />И поскольку, S# активно использует возможности многопоточности (в своей реализации, в библиотеках), то все эти три направления будут работать в разных не зависимых потоках, которые в свою очередь будут распределены автоматически, средствами операционной системы, на разные процессоры, по возможности.<br />Таким образом, не оперируя явно потоками. мы можем распараллеливать тестирование.<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/27191/Добрый день! Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для по...2013-08-28T07:18:47Z2013-08-28T18:24:06ZBondhttps://stocksharp.ru/users/26882/info@stocksharp.ruДобрый день!<br />Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для полной загрузки всех ядер процессора и оперативной памяти?<br />Какие рекомендации для оптимизации скорости алгоритмов? (чем пользоваться, чем не пользоваться)<br />В примере:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
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),
};
</pre>
</div></div><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
foreach (var period in periods)
{
// создаем тестовый инструмент, на котором будет производится тестирование
var security = new Security
{
......
</pre>
</div></div><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />... для каждого периода создается свой отдельный инструмент, портфель, стратегия, шлюз для тестирования и т.д. Это сделано для того, чтобы отдельные потоки могли менять свою копию данных, не создавая коллизии в других потоках тестирования.<br /></div></div><br />Как такой код может параллельно считать в несколько потоков? Как-то не ясно из примера...Copyright @ StockSharp Platform LLC 2010 - 2024