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

 
Ashes:

2012.03.05 17:43:16 Terminal CPU: GenuineIntel  Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.1 (4 units, 3092 MHz, 4008 Mb, version 2.0)

2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD,M1) CpuTime/GpuTime = 0.7347677666287369

[...] Может, у меня "гранаты не той системы"? (В смысле версии SDK от AMD)

Потрясно. Камень, мать, память и кулер покупал в самом обычном магазинчике, который нашел в сети. Все вместе обошлось примерно в 6 тыр. Наверно, случайно подсунули камешек из будущего.

Может, и правда все дело в SDK. На память грешить вряд ли стоит, она по умолчанию только DDR-III. А одноканальная она или нет - конечно, влияет, но не настолько жутко.

 
Mathemat:

Интересно. У fyords карта сильнее (GeForce GT 440), а время расчета на порядок больше. ...

А интересно, скорость вычислений зависит от разрешения (у меня 1920х1080), ведь рабочий стол тоже что-то ест (тема Aero)?

Может по тому и больше времени нужно на расчеты. 

 
fyords: А интересно, скорость вычислений зависит от разрешения (у меня 1920х1080), ведь рабочий стол тоже что-то тоже что-то ест (тема Aero)?

Да, возможно. Что у Вас показывает индекс производительности Windows по Aero? Вот у меня:


А вообще у меня он отключен, мне не нужны эти фитюльки с бантиками.

P.S. Проверил. Никак не влияет.

 

Прошлый тест (3.12.2011) нормально проходил, а сейчас какой-то глюк вылазит, но оценка 6.8 для видео. Может в этом проблема (в глюке). Железо новое не ставил. Может проблема новых дров, тогда подожду нового релиза, там снова тест сделаю.

 

x32

x32

x64

x64 

 

cpu-z

1 

2 

 

Добавил тупенькую генетику и зациклил на максимизацию.  Получился оптимизатор подгоняющий однослойный решетрон на смоделированных данных, эквивалентных 500 дням истории на пятиминутках по ценам открытия (16 индикаторов на входе).

Прошу тестить.

На этом агитацию считаю успешно завершённой, поскольку тест оптимайзера вставляет вполне достаточно. ;)

У кого тормозит (по сравнению с другими) - теперь знаете на что копить ;-)

Итак, мои результаты:

2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Full time of optimization == 14 sec 305 ms
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Optimization is closing. Best result == 1.91356 at 92 generation.
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Generation 92: MaxResult==1.91356
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Generation 91: MaxResult==1.91356
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Generation 90: MaxResult==1.91356
2012.03.06 03:44:23     ParallelOptimazer_00-02 (EURUSD,M30)    Generation 89: MaxResult==1.91356
.............
.........

Последний раз на пальцах объясняю: это полный цикл оптимизации примитивненького нейросетевого эксперта.

// Ну почти эксперта. Дополнительные расчёты в коде ЭТОГО "эксперта", чтоб он считал прибыль достаточно реалистично,

// не превысят (по времени счёта.  при толковой реализации) тех расчётов что уже есть. Т.е. замедление может быть, скажем, двухкратным.

Файлы:
 
MetaDriver:

Добавил тупенькую генетику и зациклил на максимизацию.  Получился оптимизатор подгоняющий однослойный решетрон на смоделированных данных, эквивалентных 500 дням истории на пятиминутках по ценам открытия (16 индикаторов на входе).

Прошу тестить.

...

Спасибо.))

...

NJ 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:06 Generation 36: MaxResult==2.29423
NO 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:08 Generation 37: MaxResult==2.29426
FE 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:10 Generation 38: MaxResult==2.29426
PJ 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:14 Generation 39: MaxResult==2.29427
HO 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:14 Generation 40: MaxResult==2.29427
QE 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:14 Generation 41: MaxResult==2.29427
EJ 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Generation 42: MaxResult==2.29427
LP 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Generation 43: MaxResult==2.29427
KE 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Generation 44: MaxResult==2.29427
DI 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Optimization is closing. Best result == 2.29427 at 44 generation.
KO 0 ParallelOptimazer_00-02 (GBPJPY,M5) 03:46:15 Full time of optimization == 81 sec 917 ms 
 

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

Запустил твой оптимизатор. Выходит примерно так:

2012.03.05 23:00:12     Terminal        CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.1 (2 units, 2793 MHz, 7912 Mb, version 2.0)
2012.03.06 04:24:34     ParallelOptimazer_00-02 (EURUSD,H1)     Full time of optimization == 58 sec 141 ms
2012.03.06 04:24:34     ParallelOptimazer_00-02 (EURUSD,H1)     Optimization is closing. Best result == 1.87689 at 60 generation.
2012.03.06 04:24:34     ParallelOptimazer_00-02 (EURUSD,H1)     Generation 60: MaxResult==1.87689
2012.03.06 04:24:33     ParallelOptimazer_00-02 (EURUSD,H1)     Generation 59: MaxResult==1.87689
2012.03.06 04:24:32     ParallelOptimazer_00-02 (EURUSD,H1)     Generation 58: MaxResult==1.87689
2012.03.06 04:24:31     ParallelOptimazer_00-02 (EURUSD,H1)     Generation 57: MaxResult==1.87689

Считая, что каждое generation считается примерно с одинаковыми временными затратами, получаем, что в сравнении с твоей Феррари мой "тазик" примерно в 6.5-7 раз медленнее, как и в прошлый раз (58.14 сек. на 60 поколений ~ 0.97 сек/поколение).

2 Graff: Если бы Вы смогли отрубить на время теста дискретную видюху и провести тест на интегрированной графике камня, было бы очень интересно (заодно и посмотреть на прогресс Intel в этой области при переходе от Lynnfield к Sandy Bridge).

Но для этого придется скачать SDK от AMD для OpenCL. Дискретной карте от этого хуже не должно стать (у нее свой драйвер), но вот на камень OpenCL 1.1 вполне может встать, хотя я в этом не на 100% уверен.

Но если Вы откажетесь - не обижусь нисколько.

 

Ре-пост с форума mql4.

Коллеги, у Вас с OpenCL будет МНОГО непонятностей и затыков. Не ждите лёгкого результата.

Вариантов затыков много, поскольку OpenCL - это программная технология, которая навешивается на видео-драйвер. Фактически видеодрайвер превращается в небольшую операционную систему. И всё что висит по ходу дела на нём: UltraVNC, MSI afterbufner, Agnitum OutPost web-control interactive, и ещё тысяча программ - все они могут мешать нормальной работе OpenCL.

При этом даже если удаётся заставить работать OpenCL для несложных потоковых вычислений, остаётся ещё одно непреодолимое препятствие, а именно : для сложных расчётов - технологически-конструктивной (32 бита частичной поддержки IEEE ) и эксплуатационной (потеря точности при разгоне игровой карты) точностЕЙ GPU пока ещё недостаточно для серъёзных научных расчётов. К тому же, если на GPU от nVidia есть обработка double precision 64-бита почти на всех современных видеокартах, то на видеокартах AMD - только на некоторых топовых сериях. У nVidia тоже есть бзик, но другой - они в одной банде с Микрософт и поэтому их пресловутая CUDA (и OpenCL) фактически не работают например на Server 2003, но при этом прекрасно работают на Server 2008 и даже на старой Win XP - чисто по маркетинговым соображениям Микрософт.

OpenCL - это для быстрых потоковых неточных 32-битных вычислений типа свёртки или фильтрации.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
AlexEros: потеря точности при разгоне игровой карты

А кто ее гнать будет? Чтобы получить 10-15% прироста в скорости расчетов, но с риском ошибки в результате расчета из-за смерти всего одной пчелы? Ну мы ж тут чай не в игрушки играем, в которых непрорисовка сотни вершин ни на что особо не влияет...

OpenCL - это для быстрых потоковых неточных 32-битных вычислений типа свёртки или фильтрации.

Сделаем оговорку. Вычисления должны быть действительно массовыми и тяжелыми, чтобы были основания считать потерю точности значимой. Интегрирование - это массовое суммирование/перемножение, это тяжелый случай.

Одно дело - сложить два числа, умножить на третье (каждое из них при 32-битных вычислениях имеет точность, достаточную для практических расчетов) и записать результат в некую ячейку в результате одной итерации цикла и больше никак его не использовать внутри GPU.

Другое дело - выполнить расчет числа пи на миллиарде итераций, применяя для расчета самый медленно сходящийся ряд типа ряда Лейбница (этот ряд очень любят использовать при демонстрации технологии OpenMP):


Во втором случае при использовании 32-битных чисел есть реальная угроза потерять точность, т.к. суммируется миллиард чисел. Тервер говорит, что итоговая ошибка в 99.7% случаев не будет превышать точности одного числа, умноженной на 2*10^5. Вот это уже серьезно - да и то не всегда.

Никто не мешает разработчику проделать несколько раз точные вычисления на честном CPU, чтобы оценить реальные ошибки.

Мне кажется, что при разумных мерах предосторожности эту технологию использовать можно. А с использованием современных процессоров от обоих производителей (AMD APU Llano или даже Intel Sandy Bridge) - так и вообще временно забыть о дискретной видеокарте: какая мне разница, ускорюсь я в 100 или только в 25 раз... И никакие пчелы погибать не будут, т.к. гнать процессор тоже не собираюсь.

Причина обращения: