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

 

Что-то у меня ничего не получается. Строка инициализации нормальная:

2012.04.01 05:52:01    Terminal    CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.2 (2 units, 2793 MHz, 7912 Mb, version 2.0 (sse2))


(ставил OpenCL 1.1 от AMD, а на него сверху 1.2). Но теперь запуск теста выдает

2012.04.01 06:06:49    ParallelTester_00-01x (EURUSD,H1)    OpenCL not found.


Перед этим обновил Intel Graphics Driver на более новую версию, после чего снес AMD-шные драйвера ихней же инсталляхой, а потом снова ей все поставил.

И чего я теперь не так делаю?

P.S. А вот скоро Ivy будет, вот он-то и даст всем проср покажет, на что способен Интел в интегрированной графике, вместе со своей Intel HD 4000. Смотрите на графику.

Сравнение между Intel Ivy Bridge и Sandy Bridge в различных бенчмарках
Сравнение между Intel Ivy Bridge и Sandy Bridge в различных бенчмарках
  • 2011.11.30
  • gagadget.com
Стали доступны утекшие в сеть слайды, где с демонстрируется разница между процессорами Intel Ivy Bridge и Sandy Bridge в бенчмарках. Если быть точным, то сравниваются модели Core i7-3770 и Core i7-2600 (i7-3770K и i7-2600K по какой-то причине не были использованы).
 
Mathemat:

И чего я теперь не так делаю?

Перекомпиляй тест.  Должно помочь.  Если нет - в сервисдеск.
 
Mathemat:

И чего я теперь не так делаю?
CLCreateContext изменила параметр bool use_gpu на int device (номер устройства).  Поправте код.
 
mql5:
В новом билде изменился параметр функции CLContextCreate, теперь вместо bool use_gpu используется int device.

при device>=0 используется как номер OpenCL устройства по порядку
при device==OPENCL_DEVICE_ANY (-1) используется автоматический выбор из всех имеющихся устройств
при device==OPENCL_DEVICE_GPU (-2) используется автоматический выбор из всех имеющихся GPU устройств

Покажите, пожалуйста, как это сделать в коде. Вызываю CLContextCreate( OPENCL_DEVICE_ANY ), при компиляции получаю результат:

'OPENCL_DEVICE_ANY' - undeclared identifier    ParallelTester_00-01x.mq5    145    31


Билд 619.

И второй вопрос: где найти свежайшую справку?

P.S. Заработало, как только поставил аргумент -1. Константа OPENCL_DEVICE_ANY еще не объявлена :)

 
В сборке 619 эти константы переименованы в CL_DEVICE_ANY/CL_DEVICE_GPU.

Но в последующих билдах это будут CL_USE_ANY/CL_USE_GPU_ONLY
 

Решил проверить, как OpenCL будет работать на i3-2120 (это не мой компутер, в системе нет дискретного видео). Поставил AMD APP SDK, OpenCL-Z все определил. В терминале при инициализации отобразилась строка:

2012.04.02 03:59:47    Terminal    CPU: GenuineIntel  Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz with OpenCL 1.1 (4 units, 3310 MHz, 8039 Mb, version 2.0)


Проверял на коде MetaDriver'a, приложенном к сообщению и чуть модифицированном с учетом последних изменений в билде 619 (см. первые тесты вот тут). Результат:

2012.04.02 04:00:43    ParallelTester_00-01x (EURUSD,H1)    CpuTime/GpuTime = 0.741385550890401
2012.04.02 04:00:43    ParallelTester_00-01x (EURUSD,H1)    Result on Cpu МахResult==0.79567 at 734 pass
2012.04.02 04:00:43    ParallelTester_00-01x (EURUSD,H1)    Соunt inticators = 16; Count history bars = 144000; Count pass = 1280
2012.04.02 04:00:43    ParallelTester_00-01x (EURUSD,H1)    CPU time = 20483 ms
2012.04.02 04:00:22    ParallelTester_00-01x (EURUSD,H1)    Result on Gpu МахResult==0.79567 at 734 pass
2012.04.02 04:00:22    ParallelTester_00-01x (EURUSD,H1)    Соunt inticators = 16; Count history bars = 144000; Count pass = 1280
2012.04.02 04:00:22    ParallelTester_00-01x (EURUSD,H1)    GPU time = 27628 ms
2012.04.02 03:59:55    ParallelTester_00-01x (EURUSD,H1)    OpenCL init OK!


Во время выполнения на "GPU" все четыре потока процессора были заняты полностью, на 100%. 

Что нужно сделать, чтобы добиться ускорения? На системе на основе Pentium G840 (тоже без дискретного видео) ускорение было в 25 раз:

P.S. Отправил сообщение в сервисдеск, но, боюсь, тут скорее мои проблемы... Кажется, уже научился корректно ставить и удалять AMD APP SDK с закрытыми глазами, но, похоже, не все подводные камни обошел. А Intel OpenCL Runtime хоть и ставится в систему, но в терминале по-прежнему камень не опознается как дивайс OpenCL.

P.P.S. Оказывается, вот еще чего откопал (https://www.mql5.com/ru/forum/6042/page25):

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
2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD,M1) Result on Cpu МахResult==1.27347 at 1125 pass
2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD,M1) Соunt inticators = 16; Count history bars = 144000; Count pass = 1280
2012.03.05 17:45:23 ParallelTester_00-01x (EURUSD,M1) CPU time = 21309 ms
2012.03.05 17:45:02 ParallelTester_00-01x (EURUSD,M1) Result on Gpu МахResult==1.27347 at 1125 pass
2012.03.05 17:45:02 ParallelTester_00-01x (EURUSD,M1) Соunt inticators = 16; Count history bars = 144000; Count pass = 1280
2012.03.05 17:45:02 ParallelTester_00-01x (EURUSD,M1) GPU time = 29001 ms
2012.03.05 17:44:33 ParallelTester_00-01x (EURUSD,M1) OpenCL init OK!
 

:(((

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

Даже процессор почти идентичен i3-2120...
Файлы:
 

Всё-таки GPU+OpenCL - это весчь!

2012.04.08 00:41:22    ParallelTester_00-02-(16x7x3) (USDJPY,M30)    CpuTime/GpuTime = 728.1857142857143
2012.04.08 00:41:22    ParallelTester_00-02-(16x7x3) (USDJPY,M30)    Result on Cpu МахResult==3.78654 at 50 pass
2012.04.08 00:41:22    ParallelTester_00-02-(16x7x3) (USDJPY,M30)    Соunt inticators = 16; Count history bars = 50000; Count pass = 1280
2012.04.08 00:41:22    ParallelTester_00-02-(16x7x3) (USDJPY,M30)    CPU time = 101946 ms
2012.04.08 00:39:40    ParallelTester_00-02-(16x7x3) (USDJPY,M30)    Result on Gpu МахResult==3.78654 at 50 pass
2012.04.08 00:39:40    ParallelTester_00-02-(16x7x3) (USDJPY,M30)    Соunt inticators = 16; Count history bars = 50000; Count pass = 1280
2012.04.08 00:39:40    ParallelTester_00-02-(16x7x3) (USDJPY,M30)    GPU time = 140 ms

 
MetaDriver:

Всё-таки GPU+OpenCL - это весчь!

2012.04.08 00:39:40    ParallelTester_00-02-(16x7x3) (USDJPY,M30)    GPU time = 140 ms

Предлагаю делать тесты такими, чтобы время вычисления GPU не было таким маленьким. Во всяком случае, 140 ms, imho, слишком ненадежное значение, особенно при ошибках измерения GetTickCount() в десятки миллисекунд.

MD, это я тебе так завидую.

 
Mathemat:

Предлагаю делать тесты такими, чтобы время вычисления GPU не было таким маленьким. 

У меня терпения ждать CPU не хватит :) Тут чем дальше в лес - тем круче GPU...
 
MigVRN:
У меня терпения ждать CPU не хватит :) Тут чем дальше в лес - тем круче GPU...

Аналогично. :)

Но щас таки запущу на 4096 пчёл.  Минут за пять ЦПУ сосчитает.