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

Vladimir Gomonov
8292
Vladimir Gomonov  
Mathemat:

Да, MD, что-то у тебя не очень на голом CPU. Тут Интел все ж рулит по полной...

Ну да ладно, у тебя ж видяха суперская.

Ага.  Чешу репу.  Однако возможно драйвер криво стоит.  Трогать боюсь, один раз снёс, оказался в почти полных потёмках - Винда карту подцепила каким-то своим явно неподходящим драйвером.  Пришлось перевставлять AMD APP SDK в условиях 1%-ной видимости.  Было весело.. :))  На сто первый раз попал таки во все кнопки...................
Sceptic Philozoff
17690
Sceptic Philozoff  
MetaDriver: Ага.  Чешу репу.  Однако возможно драйвер криво стоит.  Трогать боюсь
Прикольно: даже родные драйвера встают криво - и у Intel, и у AMD. Будем надеяться, что это просто проблемы роста.
hrenfx
3482
hrenfx  

Народ, подскажите, этот OpenCL на чистом CPU такое ускорение только в MQL5 дает или и на других языках то же?

Делали такое сравнение: MQL5 + OpenCL VS C++ + Full Compiler Optimization?

Есть подозрение, что это не OpenCL крут, а отсутствие оптимизаций в самом MQL5.

P.S. У меня i7 2700K, попробую (как доберусь до него) протестить на чистом CPU.

Vladimir Gomonov
8292
Vladimir Gomonov  
Mathemat:
Прикольно: даже родные драйвера встают криво - и у Intel, и у AMD. Будем надеяться, что это просто проблемы роста.
Ну да,  я расчитываю что через пару лет такого уже не будет, всё будет работать чётко. Щаз пока у мну другие проблемы - научиться эту хрень толково программировать... :)
Vladimir Gomonov
8292
Vladimir Gomonov  
hrenfx:

Народ, подскажите, этот OpenCL на чистом CPU такое ускорение только в MQL5 дает или и на других языках то же?

Делали такое сравнение: MQL5 + OpenCL VS C++ + Full Compiler Optimization?

Есть подозрение, что это не OpenCL крут, а отсутствие оптимизаций в самом MQL5.

P.S. У меня i7 2700K, попробую (как доберусь до него) протестить на чистом CPU.

Не, не делали.

А давай! Хорошее дело. 

В принципе код портируется на С++ за десять минут максимум (на голом ЦПУ который считает).  Как в С++ OpenCL юзать только в букваре видел, ни разу толком не попробовал.  А надо бы вообще-то.

Sceptic Philozoff
17690
Sceptic Philozoff  
hrenfx: Есть подозрение, что это не OpenCL крут, а отсутствие оптимизаций в самом MQL5.

Да, логично, даже очень. Недавно схлестнулся на форуме ixbt с аналитиком по части CPU, он так же считает. Начало обсуждения - тут (мой ник - tamehtaM). Прошу не бить ногами за мою некомпетентность. Но есть такое впечатление, что и Felid палку перегибает: слишком часто он говорит о ГП (IGP) - даже когда его, IGP, тупо нет или он слишком слаб.

Мой первый пост в теме был написан, когда еще не знал, как правильно поставить Intel OpenCL runtime. Собственно, и до сих пор не уверен, что все стоит правильно. Но уже сейчас - примерно втрое лучше, чем на AMD APP SDK.

Цифры ускорения уж больно большие, это точно. И они явно должны стать меньше, когда оптимизации появятся.

Интересно другое: даже без этих оптимизаций пятера быстрее четверы.

Да и само ускорение - не главное. Главное - абсолютные цифры времени исполнения. Уж они-то точно хуже не станут. Точнее, не должны стать.

Sergey
819
Sergey  
Mathemat:

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

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

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

Вот результат.

2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) CpuTime/GpuTime = 439.0727802037846
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Cpu МахResult==1.41575 at 7544 pass
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) CPU time = 301643 ms
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu МахResult==1.41575 at 7544 pass
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) GPU time = 687 ms
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK! Device number = 4
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu МахResult==1.41575 at 7544 pass
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) GPU time = 234 ms
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK! Device number = 3
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu МахResult==1.41575 at 7544 pass
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) GPU time = 234 ms
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK! Device number = 2
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu МахResult==1.41575 at 7544 pass
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) GPU time = 234 ms
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK! Device number = 1
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu МахResult==1.41575 at 7544 pass
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) GPU time = 234 ms
2012.04.23 21:37:54 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK! Device number = 0

Sceptic Philozoff
17690
Sceptic Philozoff  
casinonsk:

Вот результат.

2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) CpuTime/GpuTime = 439.0727802037846
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Cpu МахResult==1.41575 at 7544 pass
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.23 21:42:58 ParallelTester_00-01x_cycle (EURUSD,H1) CPU time = 301643 ms
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Result on Gpu МахResult==1.41575 at 7544 pass
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.23 21:37:56 ParallelTester_00-01x_cycle (EURUSD,H1) GPU time = 687 ms
2012.04.23 21:37:55 ParallelTester_00-01x_cycle (EURUSD,H1) OpenCL init OK! Device number = 4

Ну вот, теперь понятно, device = 4 - это и есть голый CPU. И время GPU time = 687 ms  - вполне соответствует. Всё встало нормально у Вас.

Вот только непонятно мне, почему время иcполнения CPU time такое большое. У меня и то примерно 235000 ms - при значительно меньшей частоте ядра (2.8 GHz).

То ли памяти у Вас мало, то ли она очень медленная, то ли CPU все время загружен какой-то жутко ресурсоемкой задачей. Непонятно. Цифра отношения времен неестественно велика.

Sergey
819
Sergey  
Mathemat:

Ну вот, теперь понятно, device = 4 - это и есть голый CPU. И время GPU time = 687 ms  - вполне соответствует. Всё встало нормально у Вас.

Вот только непонятно мне, почему время иcполнения CPU time такое большое. У меня и то примерно 235000 ms - при значительно меньшей частоте ядра (2.8 GHz).

То ли памяти у Вас мало, то ли она очень медленная, то ли CPU все время загружен какой-то жутко ресурсоемкой задачей. Непонятно. Цифра отношения времен неестественно велика.

Советник оптимизирую, немного нагружены ядра. 

памяти 16Gb 

Sceptic Philozoff
17690
Sceptic Philozoff  
casinonsk: Советник оптимизирую, немного нагружены ядра.

Тогда все ясно. Попробуйте запустить тот же скрипт, когда оптимизация закончится. Она ж небось все ядра нагружает.

Очень интересно посмотреть на голый топовый CPU в условиях, когда больше ничего не мешает.