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

 
Mathemat:

Ну наконец-то, заждались уже Вас. Если готовы поэкспериментировать - поставьте у себя Intel OpenCL Runtime (инструкции по ссылке).

Запустите скрипт, ничего не меняя в нем, и выложите лог из закладки "Эксперты" так же, как это делали предыдущие коллеги. Полное время выполнения скрипта - примерно 3 минуты на Вашем камне, потерпите. Заодно узнаем, как OpenCL работает на самом крутом голом камне Sandy Bridge.

Если Вашего терпения не хватит или Вам кажется, что это выше Ваших способностей, - ничего страшного, не обидимся.

P.S. Цель этого скрипта - посмотреть, на что способен голый CPU без всяких дискретных видеодраконов. Подозреваю, что при правильно вставшем Intel Runtime и на этом скрипте будет ускорение в районе 200 или даже чуть повыше.

Есть сомнения, что  Intel OpenCL Runtime встал корректно.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1347.164383561644

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==0.9316 at 10253 pass

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 4


 
casinonsk:

Есть сомнения, что  Intel OpenCL Runtime встал корректно.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

Вы, вероятно, выставили аргументом CLContextCreate() не нуль, а что-то другое. Ну просил же Вас ничего не менять! Возможности Вашего двухголового видеодракона нам уже известны. Но у Вас их, похоже, даже несколько...

По моим грубым оценкам, при CLContextCreate(0) у Вас должны быть цифры соответственно порядка CPU time = 180000 ms и GPU time = 900 ms (примерно). У Вас странно большое первое время исполнения - для такого CPU. Может, он был сильно загружен другими задачами?

Вы можете просто прогнать скрипт в том же виде, в каком я его прикрепил, - ничего не меняя в коде, ни единого символа?

P.S. Конечно, возможно, device = 0 у Вас соответствует не CPU, а чему-то еще. Ну тогда поэкспериментируйте (от 0 до 3). Самое большое время GPU time по идее должно соответствовать голому CPU, т.е. хосту.

 
Mathemat:

Вы выставили аргументом CLContextCreate() не нуль, а что-то другое. Ну просил же Вас ничего не менять! Возможности Вашего двухголового видеодракона нам уже известны. Но у Вас их, похоже, несколько...

По моим грубым оценкам, при CLContextCreate(0) у Вас должны быть цифры соответственно порядка CPU time = 180000 ms и GPU time = 900 ms (примерно). У Вас странно большое первое время исполнения - для такого CPU. Может, он был сильно загружен другими задачами?

Вы можете просто прогнать скрипт в том же виде, в каком я его прикрепил, - ничего не меняя, ни единого символа?

P.S. Конечно, возможно, device = 0 у Вас соответствует не CPU, а чему-то еще. Ну тогда поэкспериментируйте (от 0 до 3). Самое большое время GPU time по идее должно соответствовать голому CPU, т.е. хосту.

Параметры не менял! Запустил как есть.

По видео да так и есть 2x590.

 Запустил еще раз при CLContextCreate(0)1,2,3 результат тот же, что был раньше.

Возможно проблема с  Intel OpenCL Runtime.

 
casinonsk:

Параметры не менял! Запустил как есть.

Запустил еще раз при CLContextCreate(0)1,2,3 результат тот же, что был раньше.

Все результаты одинаковые? Не верю... ну не может в этом скрипте на голом CPU быть GPU time = 219 ms. В самом лучшем случае будет порядка 800 ms, но никак не 200. 

Вот мой типичный результат (у меня CPU Pentium G840):

2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CpuTime/GpuTime = 88.40817091454272
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Result on Cpu МахResult==1.05116 at 7785 pass
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CPU time = 235873 ms
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Result on Gpu МахResult==1.05116 at 7785 pass
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    GPU time = 2668 ms
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    OpenCL init OK!
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    CLGetInfoInteger() returned 1

ОК, проехали.

 
Mathemat:

Все результаты одинаковые? Не верю... ну не может в этом скрипте на голом CPU быть GPU time = 219 ms. В самом лучшем случае будет порядка 800 ms, но никак не 200.

ОК, проехали.

Вот только что еще раз попробовал с CLContextCreate(0)

 2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1265.405982905983

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==1.48772 at 2051 pass

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 296105 ms

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==1.48772 at 2051 pass

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 234 ms

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 5


 
casinonsk: Вот только что еще раз попробовал с CLContextCreate(0)

Это явно на дискретной карте, а не на CPU: такие ускорения на эмуляции вряд ли возможны. И число дивайсов у Вас уже 5, жуть какая.

Если Вам не в лом - прогоните, пожалуйста, чуть измененный код, и выложите результат сюда. В коде вычисления для разных дивайсов OpenCL сведены в цикл (они должны быть быстрыми), а вычисление на x86, самое долгое,  выполняется только один раз. Портянка будет длинной, но сам скрипт выполняется однократно.

Я понимаю, что я Вас уже замучил. Но в любом случае это будет хорошая инфа для Support Team.
Файлы:
 

У меня интересный результат ))   понял, это не обшее количество устройств а текущее

2012.04.22 22:02:51     ParallelTester_00-01x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0

хотя расчеты еще идут, как закончит выложу.

Кстати в справке нет ни CLGetInfoInteger() ни CL_DEVICE_COUNT.

PS. результат

2012.04.22 22:02:51     ParallelTester_00-01x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0
2012.04.22 22:03:03     ParallelTester_00-01x_cycle (EURUSD,M30)        GPU time = 11357 ms
2012.04.22 22:03:03     ParallelTester_00-01x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:03:03     ParallelTester_00-01x_cycle (EURUSD,M30)        Result on Gpu МахResult==1.68487 at 9198 pass
2012.04.22 22:03:03     ParallelTester_00-01x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 1
2012.04.22 22:03:04     ParallelTester_00-01x_cycle (EURUSD,M30)        GPU time = 998 ms
2012.04.22 22:03:04     ParallelTester_00-01x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:03:04     ParallelTester_00-01x_cycle (EURUSD,M30)        Result on Gpu МахResult==1.68487 at 9198 pass
2012.04.22 22:10:13     ParallelTester_00-01x_cycle (EURUSD,M30)        CPU time = 428706 ms
2012.04.22 22:10:13     ParallelTester_00-01x_cycle (EURUSD,M30)        Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:10:13     ParallelTester_00-01x_cycle (EURUSD,M30)        Result on Cpu МахResult==1.68487 at 9198 pass
2012.04.22 22:10:13     ParallelTester_00-01x_cycle (EURUSD,M30)        CpuTime/GpuTime = 429.565130260521
 
fyords: Кстати в справке нет ни CLGetInfoInteger() ни CL_DEVICE_COUNT.

PS. результат

1. Обновите справку, Ваша явно устарела.

2. У Вас

2012.03.04 22:27:16     Terminal        GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1024 Mb, version 295.73)
2012.03.04 22:27:16     Terminal        CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2812 MHz, 2048 Mb, version 2.0)

очень вероятно, первая цифра, 11357 ms, относится к хосту (голому CPU), а вторая, 998 ms, - к видяхе. Порядок выигрыша на хосте, если грубо, вполне соответствует ускорению, достигаемому на AMD OpenCL (примерно 38 раз на 4-ядреном Атлоне II). Хотя и маловато на самом деле, должно быть побольше, где-то близко к 50-60. Вполне возможно, у Вас сильно медленная память.

Цифра CpuTime/GpuTime, конечно, вычисляется только для последнего обсчитанного дивайса.

 
Mathemat:

1. Обновите справку, Ваша явно устарела.

2. Цифра CpuTime/GpuTime, конечно, вычисляется только для последнего обсчитанного дивайса.

1. Обновил вручную все есть, спасибо, а что справка не обновляется вместе с терминалом и метаедитором?

2. Да, но все равно, приятно ).

 
papaklass:

С Вашим железом почти все понятно, у Вас только хост является дивайсом OpenCL. С другой стороны, странно, откуда взялся такой высокий результат раньше (стр. 51):

2012.04.08 13:28:01     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       OpenCL init OK!
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       GPU time = 7145 ms
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 13:28:08     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Result on Gpu МахResult==3.86669 at 1682 pass
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       CPU time = 422888 ms
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       Result on Cpu МахResult==3.86669 at 1682 pass
2012.04.08 13:35:11     ParallelTester_00-02-s16x7x3k (EURUSD,H1)       CpuTime/GpuTime = 59.18656403079076

У меня почему то невозможно вытащить курсор из вставки кода. И если кого то цитирую, такая же ерунда. Это баг форума?

Скорее баг движка форума, но не всегда так. Я обычно жму на батон HTML и вставляю вручную пару букв после последнего тэга. А потом возвращаюсь в визуальный режим редактирования поста.

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