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

 
fyords: В отчетах правой кнопкой "Просмотр", в новом окне кнопка "Запрос" и лог строится по времени правильно, да и читать (мне) удобнее.

Спасибо, я и не подозревал, что Вы отчет открываете.

Прирост стал еще больше.

Я поражен: это же бюджетная карточка стоимостью до 80 долларов! Значит, NVidia очень серьезно потрудилась над драйвером.

 

А вот новые результаты:

2012.06.01 09:25:23     ParallelTester_00-01x_new_cycle (EURUSD,D1)     ========================================
2012.06.01 09:32:25     ParallelTester_00-01x_new_cycle (EURUSD,D1)     CPU time = 421203 ms
2012.06.01 09:32:25     ParallelTester_00-01x_new_cycle (EURUSD,D1)     Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.06.01 09:32:25     ParallelTester_00-01x_new_cycle (EURUSD,D1)     Result on Cpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:25     ParallelTester_00-01x_new_cycle (EURUSD,D1)     -------------------------
2012.06.01 09:32:28     ParallelTester_00-01x_new_cycle (EURUSD,D1)     Device number = 0
2012.06.01 09:32:39     ParallelTester_00-01x_new_cycle (EURUSD,D1)     GPU time = 11263 ms
2012.06.01 09:32:39     ParallelTester_00-01x_new_cycle (EURUSD,D1)     CpuTime/GpuTime = 37.39705229512563
2012.06.01 09:32:39     ParallelTester_00-01x_new_cycle (EURUSD,D1)     Result on Gpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:39     ParallelTester_00-01x_new_cycle (EURUSD,D1)     ------------
2012.06.01 09:32:39     ParallelTester_00-01x_new_cycle (EURUSD,D1)     Device number = 1
2012.06.01 09:32:40     ParallelTester_00-01x_new_cycle (EURUSD,D1)     GPU time = 998 ms
2012.06.01 09:32:40     ParallelTester_00-01x_new_cycle (EURUSD,D1)     CpuTime/GpuTime = 422.0470941883768
2012.06.01 09:32:40     ParallelTester_00-01x_new_cycle (EURUSD,D1)     Result on Gpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:40     ParallelTester_00-01x_new_cycle (EURUSD,D1)     ------------

Я так понял: 1. чистый CPU, 2. CPU с  OpenCL, 3. GPU с OpenCL ?

И все равно - 422.

Mathemat:

Я поражен: это же бюджетная карточка стоимостью до 80 долларов! Значит, NVidia очень серьезно потрудилась над драйвером.

А как я поражен, из грязи в князи. Создается впечатление, что  NVidia'цы почитывают этот форум, делают подобные тесты, находят баги и правят их. 

Вот если бы тестер стратегий сам выбирал на чем ему моделироваться, т.е. без принудительного написания кода, это было бы очень хорошо. Все же 1 секунда (или 11 секунд если видео не позволяет или отсутствует) против 7 минут - это сила.

 
Чтобы проводить тесты в пределах малой погрешности, есть хороший метод в виде запуска серии замеров с усреднением результатов или отбрасыванием экстремумом. Но, конечно же, лучше увеличивать объем вычислений, чтобы стабилизировать результат.

Современные операционки и реально многоядерные процессоры серьезно сняли проблему разброса замеров через GetTickCount. Мой исходный комментарий был исключительно об ошибочном заявлении "средняя погрешность GetTickCount не меньше десятков мс".
 
Вниманию владельцев процессоров от Intel! При установке драйвера nVidia 301.42 автоматически устанавливаются драйвера OpenCL для процессора,

в реестре это выглядит примерно так:

[HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors]
"nvcuda.dll"=dword:00000000
"amdocl.dll"=dword:00000000
"amdocl64.dll"=dword:00000000

"IntelOpenCL64.dll"=dword:00000000

Они работают примерно в 1,5 раза медленнее (выделено красным), чем родной драйвер от Intel (выделено зелёным).

Можно удалить соответствующие значения реестра, но перед этой операцией сохраните ветку на всякий случай.

 

Уважаемый админ. Давно не был на вашем форуме, возможно упустил этот момент.

Будет ли реализована сдача видеокарт под нужды облака? 

 
ilovebtc:

Уважаемый админ. Давно не был на вашем форуме, возможно упустил этот момент.

Будет ли реализована сдача видеокарт под нужды облака? 

Уже почти готово https://www.mql5.com/ru/forum/23/page15#comment_201948

19. MetaTester: Добавлена поддержка использования OpenCL-программ в агентах тестирования.

Программы на OpenCL предназначены для выполнения вычислений на видеокартах с поддержкой стандарта OpenCL 1.1 или выше. Современные видеокарты содержат сотни небольших специализированных процессоров, которые могут одновременно выполнять простые математические операции над входящими потоками данных. Язык OpenCL берёт на себя организацию таких параллельных вычислений и позволяет добиться огромного ускорения для некоторого класса задач.
После тестов будем включать OpenCL в распределенной сети.
 
fyords: Я так понял: 1. чистый CPU, 2. CPU с  OpenCL, 3. GPU с OpenCL ?

Да, правильно.

А приложенный скрипт Вам не в лом прогнать и результаты выложить? Ну правда ведь интересно.

Не бойтесь большого количества цифр. Они просто для проверки корректности вычислений.

Скрипт так же проходит по всем девайсам. Основная задача - умножение двух больших матриц.

Настройки можно менять только внутри кода - линейный размер матриц _size в этой строке:

#define _size       2000

Меняйте, только если не хватит памяти. Признак этого - несоответствия в цифрах массивов при прогоне на дискретном GPU: если отличие чисел - больше 10^(-4), то это явная ошибка. Но у Вас вроде памяти должно хватить.

Файлы:
 

К примеру у меня видеокарта Radeon 6930, в ней 1280 потоковых процессоров. Как она будет отображаться в списке агентов?. Как 1 устройство, или все 1280.

Она одна в разы быстрее чем 10 процессоров, а бонус то канет не за 1 добавленное устройство.

 
Mathemat:

А приложенный скрипт Вам не в лом прогнать и результаты выложить? Ну правда ведь интересно.

Нет, не в лом. Самому интересно. В настройках ничего не менял.

2012.06.02 09:28:27     vect_v2_all_devices (EURUSD,D1) =======================================
2012.06.02 09:28:27     vect_v2_all_devices (EURUSD,D1) OCL martices mul:         ROWS1 = 2000; COLSROWS = 2000; COLS2 = 2000
2012.06.02 09:30:31     vect_v2_all_devices (EURUSD,D1) CPUTime = 124.504
2012.06.02 09:30:31     vect_v2_all_devices (EURUSD,D1) ---------------
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) read = 4000000 elements
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) Device = 0: time = 2.824 sec.
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) CPUTime / GPUTotalTime = 44.088
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1968,1939 ) = -5.27639246;    thirdCPU[ 1968,1939 ] = -5.27639246;    buf[ 1968,1939 ] = -5.27639198
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 585,810 ) = 3.74615073;    thirdCPU[ 585,810 ] = 3.74615073;    buf[ 585,810 ] = 3.74614906
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1131,1732 ) = -4.46934557;    thirdCPU[ 1131,1732 ] = -4.46934557;    buf[ 1131,1732 ] = -4.46934605
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 587,999 ) = -4.46048546;    thirdCPU[ 587,999 ] = -4.46048546;    buf[ 587,999 ] = -4.46048260
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 983,1903 ) = 3.42076445;    thirdCPU[ 983,1903 ] = 3.42076445;    buf[ 983,1903 ] = 3.42076564
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1927,313 ) = 5.62960339;    thirdCPU[ 1927,313 ] = 5.62960339;    buf[ 1927,313 ] = 5.62960196
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 355,1897 ) = 5.86679220;    thirdCPU[ 355,1897 ] = 5.86679220;    buf[ 355,1897 ] = 5.86678505
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1455,1651 ) = -3.67937088;    thirdCPU[ 1455,1651 ] = -3.67937088;    buf[ 1455,1651 ] = -3.67936754
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1207,856 ) = 1.30920172;    thirdCPU[ 1207,856 ] = 1.30920172;    buf[ 1207,856 ] = 1.30920100
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1699,575 ) = 2.55669522;    thirdCPU[ 1699,575 ] = 2.55669522;    buf[ 1699,575 ] = 2.55669498
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) ________________________
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) read = 4000000 elements
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) Device = 1: time = 1.514 sec.
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) CPUTime / GPUTotalTime = 82.235
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 407,514 ) = -3.69270682;    thirdCPU[ 407,514 ] = -3.69270682;    buf[ 407,514 ] = -3.69270515
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1421,1902 ) = -7.43944120;    thirdCPU[ 1421,1902 ] = -7.43944120;    buf[ 1421,1902 ] = -7.43943167
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1197,1072 ) = -1.49989450;    thirdCPU[ 1197,1072 ] = -1.49989450;    buf[ 1197,1072 ] = -1.49989557
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1249,1056 ) = -0.22817086;    thirdCPU[ 1249,1056 ] = -0.22817086;    buf[ 1249,1056 ] = -0.22817032
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 385,1856 ) = 3.88903213;    thirdCPU[ 385,1856 ] = 3.88903213;    buf[ 385,1856 ] = 3.88902068
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 952,488 ) = 0.37963703;    thirdCPU[ 952,488 ] = 0.37963703;    buf[ 952,488 ] = 0.37963703
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 345,1572 ) = 2.28500485;    thirdCPU[ 345,1572 ] = 2.28500485;    buf[ 345,1572 ] = 2.28500390
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1928,468 ) = -1.35805547;    thirdCPU[ 1928,468 ] = -1.35805547;    buf[ 1928,468 ] = -1.35805535
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1881,1968 ) = -3.12033391;    thirdCPU[ 1881,1968 ] = -3.12033391;    buf[ 1881,1968 ] = -3.12033129
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1454,575 ) = 5.97233009;    thirdCPU[ 1454,575 ] = 5.97233009;    buf[ 1454,575 ] = 5.97232151
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) ________________________

Только я ничего не понял из этих цифр. Поясните? Ну хоть на пальцах: это хорошо или нет? Между устройствами они разные, а по строкам 5-6 знак после запятой уже отличается местами.

Кажется понял: это множественный тест на повторяющихся операциях, итоговое время есть среднее для каждого девайса. Так? 

 
fyords: Только я ничего не понял из этих цифр. Поясните? Ну хоть на пальцах: это хорошо или нет? Между устройствами они разные, а по строкам 5-6 знак после запятой уже отличается местами.
sum( 407,514 ) = -3.69270682;    thirdCPU[ 407,514 ] = -3.69270682;    buf[ 407,514 ] = -3.69270515

Это просто проверочные цифры. Если они совпадают с точностью порядка 0.00001, то все нормально.  Индексы выбираются случайно - выборочная проверка корректности вычислений. Ну не будем же мы тут печатать результаты полной проверки всех 4 миллионов элементов полученной матрицы?!

Кажется понял: это множественный тест на повторяющихся операциях, итоговое время есть среднее для каждого девайса. Так?

Нет, это единичная операция умножения двух больших матриц.

По цифрам быстродействия: очень хорошо для этой карты. Теперь мои результаты. Устройства (снизу вверх - порядок инициализации):

2012.06.02 05:49:25     OpenCL  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.06.02 05:49:25     OpenCL  GPU: Advanced Micro Devices, Inc. ATI RV770 with OpenCL 1.0 (10 units, 780 MHz, 512 Mb, version CAL 1.4.1720)
2012.06.02 05:49:25     OpenCL  CPU: Intel(R) Corporation  Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.1 (2 units, 2800 MHz, 8040 Mb, version 1.1)

Т.е. вначале Intel CPU с движком OCL от Intel, потом мой динозавр HD 4870, а потом снова камень, но с движком от AMD. Скрипт:

2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1477,98 ) = -5.84002066;    thirdCPU[ 1477,98 ] = -5.84002066;    buf[ 1477,98 ] = -5.84001255
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1339,1186 ) = 0.59214997;    thirdCPU[ 1339,1186 ] = 0.59214997;    buf[ 1339,1186 ] = 0.59215009
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1410,1861 ) = -0.27033439;    thirdCPU[ 1410,1861 ] = -0.27033439;    buf[ 1410,1861 ] = -0.27033412
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1282,459 ) = -0.87189484;    thirdCPU[ 1282,459 ] = -0.87189484;    buf[ 1282,459 ] = -0.87189591
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 710,1645 ) = 4.86117268;    thirdCPU[ 710,1645 ] = 4.86117268;    buf[ 710,1645 ] = 4.86116362
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 526,938 ) = 0.94805324;    thirdCPU[ 526,938 ] = 0.94805324;    buf[ 526,938 ] = 0.94805157
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 914,489 ) = 5.58242941;    thirdCPU[ 914,489 ] = 5.58242941;    buf[ 914,489 ] = 5.58243275
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 811,257 ) = -1.11584055;    thirdCPU[ 811,257 ] = -1.11584055;    buf[ 811,257 ] = -1.11583853
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 318,498 ) = 1.62952971;    thirdCPU[ 318,498 ] = 1.62952971;    buf[ 318,498 ] = 1.62952805
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 648,1434 ) = -5.57316303;    thirdCPU[ 648,1434 ] = -5.57316303;    buf[ 648,1434 ] = -5.57315731
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 29.879
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) Device = 2: time = 3.105 sec.
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 684,439 ) = 0.21124490;    thirdCPU[ 684,439 ] = 0.21124490;    buf[ 684,439 ] = 0.21124732
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 795,204 ) = -1.68047857;    thirdCPU[ 795,204 ] = -1.68047857;    buf[ 795,204 ] = -1.68047154
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 579,1503 ) = 2.46559286;    thirdCPU[ 579,1503 ] = 2.46559286;    buf[ 579,1503 ] = 2.46558809
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 675,1504 ) = 0.44935751;    thirdCPU[ 675,1504 ] = 0.44935751;    buf[ 675,1504 ] = 0.44935691
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1251,1415 ) = -2.85569835;    thirdCPU[ 1251,1415 ] = -2.85569835;    buf[ 1251,1415 ] = -2.85569715
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 204,1755 ) = 0.31420049;    thirdCPU[ 204,1755 ] = 0.31420049;    buf[ 204,1755 ] = 0.31420231
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1999,74 ) = -2.22978306;    thirdCPU[ 1999,74 ] = -2.22978306;    buf[ 1999,74 ] = -2.22977948
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 436,657 ) = 0.59192652;    thirdCPU[ 436,657 ] = 0.59192652;    buf[ 436,657 ] = 0.59192693
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 967,922 ) = -4.91348410;    thirdCPU[ 967,922 ] = -4.91348410;    buf[ 967,922 ] = -4.91348314
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1489,1175 ) = -2.48868656;    thirdCPU[ 1489,1175 ] = -2.48868656;    buf[ 1489,1175 ] = -2.48868561
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 179.795
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) Device = 1: time = 0.516 sec.
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 303,1215 ) = -7.46387863;    thirdCPU[ 303,1215 ] = -7.46387863;    buf[ 303,1215 ] = -7.46388054
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1173,1406 ) = -5.64940453;    thirdCPU[ 1173,1406 ] = -5.64940453;    buf[ 1173,1406 ] = -5.64940882
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1617,1405 ) = -0.98162729;    thirdCPU[ 1617,1405 ] = -0.98162729;    buf[ 1617,1405 ] = -0.98162866
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 760,1003 ) = -0.97699410;    thirdCPU[ 760,1003 ] = -0.97699410;    buf[ 760,1003 ] = -0.97699606
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 679,793 ) = -5.41226530;    thirdCPU[ 679,793 ] = -5.41226530;    buf[ 679,793 ] = -5.41227150
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1345,1865 ) = 0.95630527;    thirdCPU[ 1345,1865 ] = 0.95630527;    buf[ 1345,1865 ] = 0.95630503
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1289,1659 ) = -3.82919979;    thirdCPU[ 1289,1659 ] = -3.82919979;    buf[ 1289,1659 ] = -3.82920074
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1216,1759 ) = 4.87398672;    thirdCPU[ 1216,1759 ] = 4.87398672;    buf[ 1216,1759 ] = 4.87398672
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1268,1060 ) = 2.78621030;    thirdCPU[ 1268,1060 ] = 2.78621030;    buf[ 1268,1060 ] = 2.78621435
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1686,577 ) = -4.36586094;    thirdCPU[ 1686,577 ] = -4.36586094;    buf[ 1686,577 ] = -4.36585188
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 22.783
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) Device = 0: time = 4.072 sec.
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:10     vect_v2_all_devices (EURUSD,H1) ---------------
2012.06.02 07:38:10     vect_v2_all_devices (EURUSD,H1) CPUTime = 92.774
2012.06.02 07:36:37     vect_v2_all_devices (EURUSD,H1) OCL martices mul:         ROWS1 = 2000; COLSROWS = 2000; COLS2 = 2000
2012.06.02 07:36:37     vect_v2_all_devices (EURUSD,H1) =======================================
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5