OpenCL: внутренние тесты реализации в MQL5 - страница 64

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Konstantin Grebenshikov
1764
Konstantin Grebenshikov  

  http://www.ixbt.com/video3/rad2.shtml. - Лучше всего использовать для больших массивов данных оптимизированные библиотеки, нежели заниматься "творчеством" по написанию программ на OpenCL (сам факт этого я неисключаю) . Можно использовать гибридную систему вычисленией малые обьёмы обрабатываются с помощью OpenCL,  а большые оптимизированными библиотеками. Да! Возможно понабиться конвертировать библиотеки на специфический язык программирования и создать условия для включения этой библиотеки. Если это удасться реализовать, то получиться впечатляющий результат и соотвесвенно многократное ускорение операции. Обратите свое внимание на это.....

P.S Возможно это новая ветка в форуме 

������������������ AMD Radeon � �������������� �����������. ������������� AMD Core Math Library
  • www.ixbt.com
������� ������� ����������� �� �������, ��������� ����������� � ���� � �� �� �����, �� ������ ��� �� ����� ������. � ������� ������������ ������� �� ����� ����������� �� ����� �������, � �������� GPU ����� ����� ������������� �������� ��������� ������� ��������� ���� � ����� ����� �� ����� �����. � ���� ����� ������ ���������� ��� PC ����� x86...
Sceptic Philozoff
17690
Sceptic Philozoff  
GKS: Возможно понабиться конвертировать библиотеки на специфический язык программирования и создать условия для включения этой библиотеки. Если это удасться реализовать, то получиться впечатляющий результат и соотвесвенно многократное ускорение операции.

Нетехнологично это для разработчиков - подстраивать компилятор специально под крайне специфичный, хотя и уникальный в своем роде продукт.

Да и пока не вижу я трейдерских задач, требующих таких огромных размеров перемножаемых матриц.

hrenfx
3482
hrenfx  
MetaQuotes:

Анонс обновления MetaTrader 5

В течение ближайших дней будет опубликовано обновление платформы MetaTrader 5. После публикации обновления будет выпущена дополнительная новость, содержащая окончательный список изменений и номера билдов. Планируются следующие изменения:

MetaTrader 5 Client Terminal build 648

MetaTester: Добавлена поддержка использования OpenCL-программ в агентах тестирования.

Разобравшиеся в OpenCL, подготовьте задачу-тест под Cloud+OpenCL. Очень интересные мат. перспективы.
Sceptic Philozoff
17690
Sceptic Philozoff  
hrenfx: Разобравшиеся в OpenCL, подготовьте задачу-тест под Cloud+OpenCL. Очень интересные мат. перспективы.
Это больше к MetaDriver'у. Он у нас большой спец по OpenCL, да и вроде пытается эмулировать тестирование.
Vladimir Gomonov
8292
Vladimir Gomonov  
hrenfx:
Разобравшиеся в OpenCL, подготовьте задачу-тест под Cloud+OpenCL. Очень интересные мат. перспективы.
Mathemat:
Это больше к MetaDriver'у. .......................
Я подумаю.   Нужны идеи, в плане что именно нужно посчитать.
Dmitriy Parfenovich
8075
Dmitriy Parfenovich  

Недавно обновил драйвер на видео (  NVIDIA  301.42 ).

Ради интереса провел один из старых тестов (ParallelTester_00-01x) и глазам не поверил.

На 24 странице делал тест, так там был прирост 29, потом поставил память в 2х канальный режим режим, стало 39.

Теперь: ~306

2012.05.31 22:05:11     ParallelTester_00-01x (EURUSD,D1)       OpenCL init OK!
2012.05.31 22:05:11     ParallelTester_00-01x (EURUSD,D1)       GPU time = 141 ms
2012.05.31 22:05:11     ParallelTester_00-01x (EURUSD,D1)       Соunt inticators = 16; Count history bars = 144000; Count pass = 1280
2012.05.31 22:05:11     ParallelTester_00-01x (EURUSD,D1)       Result on Gpu МахResult==1.28051 at 1213 pass
2012.05.31 22:05:54     ParallelTester_00-01x (EURUSD,D1)       CPU time = 43259 ms
2012.05.31 22:05:54     ParallelTester_00-01x (EURUSD,D1)       Соunt inticators = 16; Count history bars = 144000; Count pass = 1280
2012.05.31 22:05:54     ParallelTester_00-01x (EURUSD,D1)       Result on Cpu МахResult==1.28051 at 1213 pass
2012.05.31 22:05:54     ParallelTester_00-01x (EURUSD,D1)       CpuTime/GpuTime = 306.8014184397163
2012.05.31 21:41:04     OpenCL  GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1023 Mb, version 301.42)
2012.05.31 21:41:04     OpenCL  CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2948 MHz, 2048 Mb, version 2.0)
Чудеса. Видать НВИДИА подстрагала драйвера по человечески.
Sceptic Philozoff
17690
Sceptic Philozoff  

fyords, а как Вы сделали так, что более ранние события выводятся в журнал выше?

А вообще это здорово, я Вас понимаю. Я так же радовался, купив по дешевке свою HD 4870 и увидев ее мощь.

Одна маленькая рекомендация: выбирайте параметры так, чтобы врeмя исполнения на GPU было сравнимо с 1 секундой. Тогда и отношение времен будет более точным. Средняя погрешность функции GteTickCount() - не меньше десятков миллисекунд. Так что время на GPU у Вас вполне могло бы получиться и 120 мс, и 170. А от этого сильно зависит величина ускорения.

Я тут слегка этот скрипт подрихтовал, чтобы он пробегал по всем доступным девайсам (смотрим снизу вверх: 1) CPU на платформе от Intel, потом 2) видяха HD 4870 на платформе от AMD, и 3) CPU на платформе AMD):

2012.05.31 15:48:35     OpenCL  CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version 2.0 (sse2))
2012.05.31 15:48:35     OpenCL  GPU: Advanced Micro Devices, Inc. ATI RV770 with OpenCL 1.0 (10 units, 780 MHz, 512 Mb, version CAL 1.4.1720)
2012.05.31 15:48:35     OpenCL  CPU: Intel(R) Corporation  Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.1 (2 units, 2800 MHz, 8040 Mb, version 1.1)

Результаты скрипта - снизу вверх!

2012.06.01 01:06:12     ParallelTester_00-01x_new_cycle (EURUSD,H1)     ------------
2012.06.01 01:06:12     ParallelTester_00-01x_new_cycle (EURUSD,H1)     Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.01 01:06:12     ParallelTester_00-01x_new_cycle (EURUSD,H1)     CpuTime/GpuTime = 24.76943755169562
2012.06.01 01:06:12     ParallelTester_00-01x_new_cycle (EURUSD,H1)     GPU time = 9672 ms
2012.06.01 01:06:02     ParallelTester_00-01x_new_cycle (EURUSD,H1)     Device number = 2
2012.06.01 01:06:02     ParallelTester_00-01x_new_cycle (EURUSD,H1)     ------------
2012.06.01 01:06:02     ParallelTester_00-01x_new_cycle (EURUSD,H1)     Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.01 01:06:02     ParallelTester_00-01x_new_cycle (EURUSD,H1)     CpuTime/GpuTime = 204.7606837606838
2012.06.01 01:06:02     ParallelTester_00-01x_new_cycle (EURUSD,H1)     GPU time = 1170 ms
2012.06.01 01:06:01     ParallelTester_00-01x_new_cycle (EURUSD,H1)     Device number = 1
2012.06.01 01:06:01     ParallelTester_00-01x_new_cycle (EURUSD,H1)     ------------
2012.06.01 01:06:01     ParallelTester_00-01x_new_cycle (EURUSD,H1)     Result on Gpu МахResult==0.87527 at 10902 pass
2012.06.01 01:06:01     ParallelTester_00-01x_new_cycle (EURUSD,H1)     CpuTime/GpuTime = 77.55584331498866
2012.06.01 01:06:01     ParallelTester_00-01x_new_cycle (EURUSD,H1)     GPU time = 3089 ms
2012.06.01 01:05:57     ParallelTester_00-01x_new_cycle (EURUSD,H1)     Device number = 0
2012.06.01 01:05:57     ParallelTester_00-01x_new_cycle (EURUSD,H1)     -------------------------
2012.06.01 01:05:57     ParallelTester_00-01x_new_cycle (EURUSD,H1)     Result on Cpu МахResult==0.87527 at 10902 pass
2012.06.01 01:05:57     ParallelTester_00-01x_new_cycle (EURUSD,H1)     Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.06.01 01:05:57     ParallelTester_00-01x_new_cycle (EURUSD,H1)     CPU time = 239570 ms
2012.06.01 01:01:58     ParallelTester_00-01x_new_cycle (EURUSD,H1)     ========================================
При последнем параметре, который в 10 раз меньше, моя карта не такая шустрая, как у Вас. Наверно, не успевает разогнаться толком :)
MetaQuotes
Админ
27022
Renat Fatkhullin  
Для информации: у GetTickCount погрешность сильно меньше 16 мс, не Windows 95 же используете.
Dmitriy Parfenovich
8075
Dmitriy Parfenovich  
Mathemat:

fyords, а как Вы сделали так, что более ранние события выводятся в журнал выше?

В отчетах правой кнопкой "Просмотр", в новом окне кнопка "Запрос" и лог строится по времени правильно, да и читать (мне) удобнее.

А по поводу скрипта, спасибо, попробую завтра, очень долго ждать завершения, особенно с Count pass = 12800.

Пока вот старый скрипт с  Count pass = 12800

2012.06.01 01:05:53     ParallelTester_00-01x (EURUSD,D1)       OpenCL init OK!
2012.06.01 01:05:54     ParallelTester_00-01x (EURUSD,D1)       GPU time = 999 ms
2012.06.01 01:05:54     ParallelTester_00-01x (EURUSD,D1)       Соunt inticators = 16; Count history bars = 144000; Count pass = 12800
2012.06.01 01:05:54     ParallelTester_00-01x (EURUSD,D1)       Result on Gpu МахResult==1.49697 at 10010 pass
2012.06.01 01:13:08     ParallelTester_00-01x (EURUSD,D1)       CPU time = 434167 ms
2012.06.01 01:13:08     ParallelTester_00-01x (EURUSD,D1)       Соunt inticators = 16; Count history bars = 144000; Count pass = 12800
2012.06.01 01:13:08     ParallelTester_00-01x (EURUSD,D1)       Result on Cpu МахResult==1.49697 at 10010 pass
2012.06.01 01:13:08     ParallelTester_00-01x (EURUSD,D1)       CpuTime/GpuTime = 434.6016016016016
Прирост стал еще больше.

 

Sceptic Philozoff
17690
Sceptic Philozoff  
Renat: Для информации: у GetTickCount погрешность сильно меньше 16 мс, не Windows 95 же используете.

Ошибка на самом деле не сильно меньше. Да, близка к ней, но бывают выбросы от среднего, групирующиеся около 32, 48 и даже больше. Они редки, не спорю, их можно не принимать во внимание.

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

Формально стандартное отклонение действительно мало - в районе 6-7 и слабо зависит от самого времени исполнения. Но оно плохо отражает истинный разброс. Вот гистограмма времен, фиксируемых при выполнении одинаковых вычислений:

Расстояние между соседними столбиками - 16 мс. Маленькие столбики вполне вероятны, а они отличаются друг от друга уже на 32 мс. Если средний столбик ("истинное время исполнения") - 140 миллисекунд, то левый - 124 мс, а правый - 156 мс.

Значит, реальный разброс при делении на малое время исполнения на GPU может быть немаленьким:

20 секунд/124 мс ~ 161

20 секунд/156 мс ~ 128.

При этом "истинное отношение" времен исполнения примерно соответствует самому большому столбику:

20 секунд/140 мс ~ 143.

Если же брать время исполнения на GPU побольше, то влияние этой ошибки будет намного меньше. Ну пусть хотя бы будет 500 мс. 

Скрипт для моделирования:

#define BIG       10000000
#define SMALL     1000

void OnStart( )
{
   Print( "Script started..." );
   double k;
   int times[ SMALL ];
   MathSrand( TimeCurrent( ) );
   for( int ii = 0; ii < SMALL; ii ++ )
   {
      Comment( ii );
      int st = GetTickCount( );
      for( int i = 0; i < BIG; i ++ )   k = sin( i );
      int timeTotal = GetTickCount( ) - st;
      times[ ii ] = timeTotal;
   }

   int h = FileOpen( "gtc_times.txt", FILE_WRITE, "\r\n"  );
   for( int ii = 0; ii < SMALL; ii ++ )
      FileWrite( h, times[ ii ] );   
   FileClose( h ); 
   Print("Script unloaded");
}
//+------------------------------------------------------------------+
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий