Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот в чем и фишка. Аргументом внутри CLContextCreate() невозможно явно выбрать CPU, если есть хоть какой-то внешний GPU.
Не должно быть так - https://www.mql5.com/ru/docs/opencl/clcontextcreate
Параметры
device
[in] Номер OpenCL-устройства в системе по порядку. Вместо конкретного номера можно указать одно из значений: CL_USE_ANY – разрешается использовать любое доступное устройство с поддержкой OpenCL; CL_USE_GPU_ONLY – эмуляция OpenCL запрещена и разрешается использовать только специализированные устройства с поддержкой OpenCL (видеокарты).
Вроде да, не должно быть. Вот только где этот номер взять, а потом выбрать нужное?
https://www.mql5.com/ru/docs/opencl/clgetinfointeger? Но там есть только одно-единственное свойство - количество дивайсов, CL_DEVICE_COUNT.
У меня-то оно одно в системе, потому 1 и возвращает.
Вроде да, не должно быть. Вот только где этот номер взять, а потом выбрать нужное?
Нужно попробовать указать CL_USE_GPU_ONLY, тогда возьмется видеокарта и номер не нужен.
Шикарно! Значит, HD4200 дивайсом OpenCL не является, что ли?
Похоже, действительно тут идет чистая эмуляция на CPU. Мне нравится!
Вот научить бы этому же i3...
Начинаю смутно подозревать, почему AMD APP SDK не работает толком в МТ5 на i3: там же не все ядра настоящие, а у AMD нет технологии гипертрединга. Наверно, и драйвер потому встает как-то криво.
Или все же примочка - в самом МТ5, который формально распознает дивайс, но фактически от него никакого толку?
Вот в чем и фишка. Аргументом внутри CLContextCreate() невозможно явно выбрать CPU, если есть хоть какой-то внешний GPU.
Это на ЦПУ (у меня это девайс №1):
Вытащил параметр CLContextCreate(device) в параметр скрипта. Можно потыкать все варианты.
// Вдруг есть ещё секретная улётная комбинация ?? :))
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.08 22:05:59 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) CpuTime/GpuTime = 26.95192501511792
2012.04.08 22:05:59 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Result on Cpu МахResult==4.98137 at 1628 pass
2012.04.08 22:05:59 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 22:05:59 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) CPU time = 267417 ms
2012.04.08 22:01:32 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Result on Gpu МахResult==4.98137 at 1628 pass
2012.04.08 22:01:32 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 22:01:32 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) GPU time = 9922 ms
2012.04.08 22:01:22 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) OpenCL init OK!
Спасибо, а я-то не догадался...
Ну вообще-то почти не сомневался, что соотношение пропорций будет в районе 3 к 1: у тебя ж ядер в 3 раза больше, 74.735/26.952 ~ 2.77. И это все-таки радует: больше ядер - больше выигрыш! AMD и тут вырулила - за счет количества ядер!
А вот интересно, что будет у других - скажем, у кого i5 Sandy Bridge?
А если у кого Бульдозер е, там ваще улет может получиться... хотя может и не получиться, т.к. с FPU у него напряг.
А в этом тесте, почему то, моё железо порвало твоё.
2012.04.09 01:09:36 ParallelTester_00-02-316x7x3j (EURUSD,H1) CpuTime/GpuTime = 161.0007722007722
2012.04.09 01:09:36 ParallelTester_00-02-316x7x3j (EURUSD,H1) Result on Cpu МахResult==4.85831 at 2497 pass2012.04.09 01:09:36 ParallelTester_00-02-316x7x3j (EURUSD,H1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 01:09:36 ParallelTester_00-02-316x7x3j (EURUSD,H1) CPU time = 208496 ms
2012.04.09 01:06:08 ParallelTester_00-02-316x7x3j (EURUSD,H1) Result on Gpu МахResult==4.85831 at 2497 pass
2012.04.09 01:06:08 ParallelTester_00-02-316x7x3j (EURUSD,H1) Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 01:06:08 ParallelTester_00-02-316x7x3j (EURUSD,H1) GPU time = 1295 ms
2012.04.09 01:06:07 ParallelTester_00-02-316x7x3j (EURUSD,H1) OpenCL init OK!
А здесь этот тест на OpenCL CPU (загружены на 100% все 4 ядрища)
2012.04.09 01:11:15 ParallelTester_00-02-316x7x3j (EURUSD,H1) GPU time = 68547 ms
2012.04.09 01:10:07 ParallelTester_00-02-316x7x3j (EURUSD,H1) OpenCL init OK!
У GPU 480 мух, а у CPU 4, разница в 120 раз, то есть за раз может быть выполнено в 120 раз больше вычислений, однако CPU отстал от GPU только в 68547/1295=52,9 раза. Это означает, что CPU нитка быстрее GPU-шной, Но GPU выигрывает только потому, что может больше выполнять одновременных задач. Я правильно понимаю?
Масштабирование на CPU много меньше чем 100% (около 76%), вместо 4-кратного всего лишь 3-х кратное ускорение 208496/68547=3,04
Хотя, возможно, сказывается специфика этого теста.
Андрей, мне кажется, ты кое-что напутал: MD выкладывал тут этот тест только на CPU, без видяхи, т.е. напрямую выбрав CPU-эмуляцию. Как я понял, твой первый тест - на видяхе.
А результат твоего камня, эмулирующего OpenCL (твой второй тест), кажется подозрительно слабым даже в сравнении с моим (у меня было около 10 секунд на "GPU").
Если я чего-то недопонял, поправь.