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

 
Ashes: Не помогло 

Рассказывайте подробно, что Вы делали. Начиная с того, как Вы сносили AMD APP SDK.

Кстати, возможно, в скрипте ParallelTester_00-01x Вы не вставили параметр в функцию CLContextCreate(), равный 0 (чтобы уж наверняка исполнялось на хосте, т.е. на CPU). Об этом у меня в посте не было написано.

 
Mathemat:
Рассказывайте подробно, что Вы делали. Начиная с того, как Вы сносили AMD APP SDK.

Удалил AMD APP SDK через запуск соответствующего Setup.exe,  Удалить. Перезагрузка.

Установил Intel OCL (intel_ocl_sdk_1.5_x64_setup.exe), только RunTime. Перезагрузка.

Запустил MT5 - мимо. Поправил реестр по Вашему совету.  Перезагрузка. Запуск MT5 - облом.

Добавил путь по совету mql5, пробовал и в кавычках, и без, и x64 ,и x32. Каждый раз после правки реестра перезагрузка, запуск MT5 - те же яйца, вид сбоку.

Сейчас HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors имеет следующий вид:

 

(По умолчанию)                                                                         REG_SZ           (значение не присвоено)

C:\Program Files (x86)\Intel\OpenCL SDK\1.5\bin\x86\intelocl.dll     REG_DWORD   0x00000000 (0)

 
Ashes: Сейчас HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors имеет следующий вид:

 

(По умолчанию)                                                                         REG_SZ           (значение не присвоено)

C:\Program Files (x86)\Intel\OpenCL SDK\1.5\bin\x86\intelocl.dll     REG_DWORD   0x00000000 (0)

А Вы туда заглядывали? У меня, скажем, по этому пути ничего такого нет (но я скачивал и ставил только runtime, может, потому и нет).

И, во-вторых, я просто сделал intelocl.dll без полного пути. Она все равно наверняка регистрировалась при инсталляции runtime.

P.S. Поэкспериментировал с полными путями. Не видит метатрейдер OpenCL с полными путями (обоими). А вот если в качестве имени указать просто intelocl.dll, все сразу становится видно, даже без перезагрузки компа.

Я не знаю, как из двух имеющихся в системе файлов с одинаковыми именами выбирается "правильный".

Отчитайтесь, пожалуйста, тут о процессе. Все же интересно, вдруг есть какие нюансы. Я сам тут уже давно мучаюсь и таки "намучил" полученный результат, который мне очень нравится.

P.P.S. Кстати, когда был на интеловском ресурсе, там советовали снести интеловский SDK полностью и переустановить заново, т.е. сносить не просто деинсталлятором, но еще и залезть в каталоги system32 и sysWOW64 и удалить там все, связанное с интеловским ocl. Это файлы intelocl*.dll, opencl*.dll и прочие. Где-то тут - http://software.intel.com/en-us/forums/intel-opencl-sdk/. Найду - брошу более точный ссыль.

Полезные ссылки: http://software.intel.com/en-us/articles/opencl-release-notes/

И вот - особенно полезная: http://software.intel.com/en-us/forums/showthread.php?t=102023&o=a&s=lr, там советы Uri Levy (Intel) могут реально помочь. Короче, все равно игра с бубном.

 
MetaDriver (стр. 53):

Это на ЦПУ  (у меня это девайс №1):

Вытащил параметр CLContextCreate(device) в параметр скрипта.  Можно потыкать все варианты.  

А вот интересно-то как:

Вот этот скрипт на 630-м билде как-то не так запускается. Никаких сообщений, входит в цикл, загружая камень на все 100. И не выходит за разумное время. Но у меня уже Intel runtime.

 
Mathemat:

А вот интересно-то как:

Вот этот скрипт на 630-м билде как-то не так запускается. Никаких сообщений, входит в цикл, загружая камень на все 100. И не выходит за разумное время. Но у меня уже Intel runtime.

Перекомпилял.  У меня работает.

2012.04.21 00:33:21     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       CpuTime/GpuTime = 326.6
2012.04.21 00:33:21     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       Result on Cpu МахResult==4.15901 at 208 pass
2012.04.21 00:33:21     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 512
2012.04.21 00:33:21     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       CPU time = 40825 ms
2012.04.21 00:32:40     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       Result on Gpu МахResult==4.15901 at 208 pass
2012.04.21 00:32:40     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 512
2012.04.21 00:32:40     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       GPU time = 125 ms
2012.04.21 00:32:40     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       OpenCL init OK!

Файлы:
 
MetaDriver: Перекомпилял.  У меня работает.

Это на CPU такие результаты?! Ну если да - ты меня пугаешь...

Рано я обрадовался. Запустил - ни хрена внятного.  Ни одной записи вааще в логе Экспертов. Хотя скрипт запустился и тут же заполнил собой весь камень. То есть он что-то молотит изо всех сил, но до CLContextCreate() так и не доходит (если бы дошел - что-то сказал бы, так?).

Что-то новенькое. Будто интеловский runtime не понимает код, скомпиленный на AMD SDK. OCL_Device ставил и 0, и -1. Без толку.

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

 
Mathemat:

Это на CPU такие результаты?! Ну если да - ты меня пугаешь...

Нет, на ГПУ. Но OpenCL устройство можно выбирать. Вот на ЦПУ:

2012.04.21 06:20:18     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       CpuTime/GpuTime = 74.28571428571429
2012.04.21 06:20:18     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       Result on Cpu МахResult==3.53209 at 36 pass
2012.04.21 06:20:18     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 512
2012.04.21 06:20:18     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       CPU time = 40560 ms
2012.04.21 06:19:38     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       Result on Gpu МахResult==3.53209 at 36 pass
2012.04.21 06:19:38     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       Соunt inticators = 16; Count history bars = 50000; Count pass = 512
2012.04.21 06:19:38     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       GPU time = 546 ms
2012.04.21 06:19:37     ParallelTester_00-02-{16x7x3} (EURUSD,M1)       OpenCL init OK!

Рано я обрадовался. Запустил - ни хрена внятного.  Ни одной записи вааще в логе Экспертов. Хотя скрипт запустился и тут же заполнил собой весь камень. То есть он что-то молотит изо всех сил, но до CLContextCreate() так и не доходит (если бы дошел - что-то сказал бы, так?).

Что-то новенькое. Будто интеловский runtime не понимает код, скомпиленный на AMD SDK. OCL_Device ставил и 0, и -1. Без толку.

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

Ну блин, вымогатель.  :)

Ладно, держи исходник. Делай с ём что хошь.

Код не компилится на AMD SDK. По крайней мере OCL-код. OCL-программа компилируется уже во время выполнения mql-кода. В EX5-файле из оснастки OCL  скомпилированы только функции моста mql/ocl-драйвер. Не думаю, что они компилируются в разный машинный код в зависимости от производителя драйвера. Хотя полностью прояснить этот момент могут только разработчики.

Файлы:
 
MetaDriver: Код не компилится на AMD SDK.
Это понятно, я так косноязычно выразился (ну я ж не кодер-профи). Но что-то все же зависит от производителя "библиотеки" OpenCL (непосредственно внутренних функций, а не API).
 
Mathemat:

А Вы туда заглядывали? У меня, скажем, по этому пути ничего такого нет (но я скачивал и ставил только runtime, может, потому и нет).

И, во-вторых, я просто сделал intelocl.dll без полного пути. Она все равно наверняка регистрировалась при инсталляции runtime.

...

 

 

"Голый" intelocl.dll проверялся одним из первых. Файл с таким именем есть и в папке x64, и в x86.

 
Ashes: "Голый" intelocl.dll проверялся одним из первых. Файл с таким именем есть и в папке x64, и в x86.

Тогда не знаю, что делать. Сам замучился искать решение, пока Support Team не подсказала. Вероятно, это не полное решение, но на моем компутере оно все же заработало.

Наверно, в первую очередь надо научиться чисто удалять следы прежних SDK.