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

 
Mathemat:

А результат твоего камня, эмулирующего OpenCL (твой второй тест), кажется подозрительно слабым даже в сравнении с моим (у меня было около 10 секунд на "GPU").

У тебя считалось на CPU-щном GPU - ядер поболее чем у меня. А у меня считалось на чистом CPU c 4-мя ядрами (device 1).
 
joo: У тебя считалось на CPU-щном GPU - ядер поболее чем у меня. А у меня считалось на чистом CPU c 4-мя ядрами.

Не, не так, Андрей. imho, у меня тоже считалось на чистом CPU с 2 ядрами. Есть 3 аргумента "за". Первый - просто железобетонный, второй и третий - не такие твердые:

1. У меня в системе только один дивайс OpenCL. С другой стороны, одним из этих дивайсов в любом случае должен быть хост, т.е. голый CPU. Он и есть. Это не GPU, я проверил это на GPU Caps.

Так что подозреваю, что CPU-дивайсом, эмулирующим OpenCL, может быть любой камень, поддерживающий SSE2 и выше. Неважно, есть у него встроенная графика или нет. В том числе и Intel Core i5-750, кстати.

2. Моя CPU-графика - это Intel HD Graphics. Там 6 конвейеров, но 24 процессора (нити, мухи?). Обвел характеристики графики, близкие к тому, что есть и у тебя, и у меня.

Так как мушиная частота значительно ниже частоты камня, то не могу представить себе, чтобы 24 нити GPU на более низкой частоте ускорили бы исполнение в сравнении с чистым CPU более чем в 25 раз (а такое у меня было). Остается только одно: это не GPU, а CPU-эмуляция OpenCL. Возможно, я неправильно считаю, но более подробных данных об архитектуре графической части интеловских камней у меня нет.

У тебя встроенная графика примерно такая же, как у меня, - Intel HD Graphics 2000, - но что-то там встало криво. Я не знаю, чем объяснить такой странно низкий результат почти топового интеловского камня из линейки Sandy Bridge. Ускорение на нем должно быть, по грубым оценкам, в районе 50.

3. Формально поддержка OpenCL встроенной графикой Интела будет только у Ivy Bridge - вместе с Intel HD Graphics 2500 и 4000 (тут уже будет 64 быстрые мухи, значительно быстре интегрированных мух AMD). А сейчас ее, похоже, действительно нет.

Мне еще самому предстоит разбираться, почему у меня i3 не ускоряет вычисления.

 
Mathemat:
 

... 

Мне еще самому предстоит разбираться, почему у меня i3 не ускоряет вычисления.

 

Ура! Заработала!

2012.04.09 15:32:01 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.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 started (MetaQuotes Software Corp.)
 

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Result on Cpu МахResult==3.64642 at 1594 pass
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CPU time = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Result on Gpu МахResult==3.64642 at 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) GPU time = 93460 ms
2012.04.09 15:54:41 ParallelTester_00-02-316x7x3j (USDJPY,H1) OpenCL init OK!
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.573211516347179
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Cpu МахResult==3.82222 at 3357 pass
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 243907 ms
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Gpu МахResult==3.82222 at 3357 pass
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 94787 ms
2012.04.09 15:36:49 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
 

 
Ashes:

Ура! Заработала!

2012.04.09 15:32:01 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.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 started (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CPU time = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Result on Gpu МахResult==3.64642 at 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) GPU time = 93460 ms

Ну это уже лучше, чем 0.7, хоть какое-то ускорение. И что Вы такое сделали?

Хотя... очень уж оно слабенькое. На моем Pentium G840 вот так:

2012.04.08 22:01:08    Terminal    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.04.09 22:11:35    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    CpuTime/GpuTime = 26.0524992748719
2012.04.09 22:11:35    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Result on Cpu МахResult==4.04242 at 1775 pass
2012.04.09 22:11:35    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 22:11:35    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    CPU time = 269461 ms
2012.04.09 22:07:05    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Result on Gpu МахResult==4.04242 at 1775 pass
2012.04.09 22:07:05    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 22:07:05    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    GPU time = 10343 ms
2012.04.09 22:06:55    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    OpenCL init OK!

Как Вы считаете, это нормально или нет, если бюджетный камень обходит более мощный той же фирмы почти на порядок? Архитектура-то у них почти одинаковая, да и набор инструкций у i3 как минимум не беднее...

 
Mathemat:

Ну это уже лучше, чем 0.7, хоть какое-то ускорение. И что Вы такое сделали?

Хотя... очень уж оно слабенькое. На моем Pentium G840 вот так:

Как Вы считаете, это нормально или нет, если бюджетный камень обходит более мощный той же фирмы почти на порядок? Архитектура-то у них почти одинаковая, да и набор инструкций у i3 как минимум не беднее...

Обновил драйвер HD Graphics и установил по новой AMD OpenCL SDK с английским языком.

 

По поводу разницы в производительности предположу: версии OCL разные + изначально у Вас преимущество GPU над CPU по частоте (если предположить, что GPU-часть одинаковая).

 
Ashes: По поводу разницы в производительности предположу: версии OCL разные + изначально у Вас преимущество GPU над CPU по частоте (если предположить, что GPU-часть одинаковая).

Нет у меня никакого GPU OpenCL дивайса, читайте мой ответ joo. И у Вас его тоже не должно быть (я говорю об интегрированной графике). Все идет на чистейшей эмуляции на ядрах CPU. Да и преимущество по частоте - максимум в 2 раза, а производительность различается на порядок. Неувязка.

Второе: разница версий никак не влияет на производительность абсолютно на всех тестах, выложенных здесь. И на 1.1 все так же быстро считалось (на моем G840).

 
Mathemat:

Нет у меня никакого GPU OpenCL дивайса, читайте мой ответ joo. И у Вас его тоже не должно быть (я говорю об интегрированной графике). Все идет на чистейшей эмуляции на ядрах CPU. Да и преимущество по частоте - максимум в 2 раза, а производительность различается на порядок. Неувязка.

Второе: разница версий никак не влияет на производительность абсолютно на всех тестах, выложенных здесь. И на 1.1 все так же быстро считалось (на моем G840).

Похоже, Вы правы. Я рано радовался. По загрузке процессора видно, что GPU-расчёт в скрипте распараллелен на 4 ядра/потока (загрузка CPU 100%),  а CPU часть практически идёт на одном ядре (25-30%).

Вот и получается 4*0.7 (накладные расходы?) ~= 2.8 - GPU/CPU.

Непонятно, откуда такая разница в Вашем и моём случае, разве что AMD SDK использует не все возможности на "чужом" железе в x64 версии (у Вас, насколько я понял, x32). Версия драйвера HD Graphics (Intel Corporation, 14.02.2012, 8.15.10.2653).

Сравнение G840 и i3-2100 c intel.com:

 

 

PS. Упс, прозевал 8040Mb у Вас (т.е. x32/x64 отпадает).

 
Mathemat:
 

Второе: разница версий никак не влияет на производительность абсолютно на всех тестах, выложенных здесь. И на 1.1 все так же быстро считалось (на моем G840).

OpenCL 1.2 дал выигрыш примерно 10 % к 1.1:

2012.04.10 09:41:19 Terminal MetaTrader 5 x64 build 619 started (MetaQuotes Software Corp.)
2012.04.10 09:41:19 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.04.10 09:41:30 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 94365 ms
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Gpu МахResult==3.52408 at 1914 pass
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 244968 ms
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Cpu МахResult==3.52408 at 1914 pass
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.595962486091242
2012.04.10 10:20:22 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 93756 ms
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Gpu МахResult==4.06735 at 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 242426 ms
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Cpu МахResult==4.06735 at 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.585711847775076


2012.04.10 11:33:50 Terminal MetaTrader 5 x64 build 619 started (MetaQuotes Software Corp.)
2012.04.10 11:33:50 Terminal CPU: GenuineIntel  Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.2 (4 units, 3092 MHz, 4008 Mb, version 2.0 (sse2,avx))

2012.04.10 11:34:14 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 86923 ms
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Gpu МахResult==4.27665 at 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 246965 ms
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Cpu МахResult==4.27665 at 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.841192779816619
2012.04.10 11:47:50 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU time = 87610 ms
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Gpu МахResult==4.43566 at 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 245873 ms
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Result on Cpu МахResult==4.43566 at 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.806449035498231

 
Я так понял, если хотим передать в GPU двумерный/многомерный массив с данными, то можем воспользоваться представлением данных в виде структуры и структуру передавать?
 
Ashes: OpenCL 1.2 дал выигрыш примерно 10 % к 1.1:

Ну да, около того. Все равно выигрыш некритичен, не в разы же.

разве что AMD SDK использует не все возможности на "чужом" железе

Вначале такая гипотеза была и у меня.

Но CPU OpenCL тесты утилиты GPU Caps все проходят вполне прилично, проверял. Утилита - в прицепе, если что. Покрутите только CPU-эмуляции. 

На некоторых тестах fps на i3 в несколько раз больше, чем на G840 (на 4D Quaternion Julia Set - порядка 17 против 4-5).

Так что, получается, AMD тут сработала на высоте.

Проблема - в терминале, который по каким-то причинам "понимает" G840, но "не понимает" более крутые камни от Intel с установленным AMD APP SDK. Я отправлял сообщение в сервисдеск неделю назад, но пока никакой реакции нет.

Файлы: