119 lines
5.4 KiB
Text
119 lines
5.4 KiB
Text
/*
|
|
Использование возможностей OpenCL для ускорения расчетов и обсуждение применения в торговле.
|
|
|
|
УРОК ПЕРВЫЙ: Основные принципы запуска программ в ядрах OpenCL.
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ЧАСТЬ ПЕРВАЯ: Подготовительные операции настройка ПО и оборудования.
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Ссылки на русском:
|
|
|
|
OpenCL: Мост в параллельные миры https://www.mql5.com/ru/articles/405
|
|
OpenCL: от наивного кодирования - к более осмысленному https://www.mql5.com/ru/articles/407
|
|
Как установить и использовать в расчетах OpenCL https://www.mql5.com/ru/articles/690
|
|
OpenCl и инструменты для него. Отзывы и впечатления. https://www.mql5.com/ru/forum/137422
|
|
|
|
Ссылки на английском:
|
|
|
|
Matthew Scarpino "OpenCL in Action. How to accelerate graphics and computations."
|
|
http://analog.nik.uni-obuda.hu/ParhuzamosProgramozasuHardver/02_GPGPU-Irodalom/03_CUDA-Irodalom_LovasIstvan/OpenCl/Books/%5BMatthew_Scarpino%5D_OpenCL_in_Action_How_to_Accele(Bookos.org).pdf
|
|
|
|
Программы для тестирования OpenCL и настройки:
|
|
|
|
GPU Caps viewer http://www.geeks3d.com/20171031/gpu-caps-viewer-1-37-0-released/
|
|
TechPowerUp GPU-Z https://www.techpowerup.com/download/techpowerup-gpu-z/
|
|
MSI Afterburner http://download.msi.com/uti_exe/vga/MSIAfterburnerSetup.zip
|
|
Intel OpenCL SDK https://www.mql5.com/go?link=https://software.intel.com/en-us/intel-opencl
|
|
Download AMD Drivers & Software for Radeon, FirePro, APU, CPU, desktops, and laptops http://support.amd.com/en-us/download
|
|
|
|
Пример из кодобазы:
|
|
|
|
OpenCL Test - скрипт для MetaTrader 5 https://www.mql5.com/ru/code/825
|
|
|
|
ШАГ 0. С чего начать?
|
|
|
|
1. Установить программу для отображения параматров OpenCL (например TechPowerUp GPU-Z) - для контроля правильности установки OpenCL.
|
|
2. Установить драйвера для видеокарты и/или процессора. проконтролировать (см. п.1), что OpenCL версии не ниже 1.1 установлен для оборудования.
|
|
|
|
ШАГ 1. Первые эксперименты.
|
|
|
|
Пробуем запускать программы из комплекта поставки МТ5:
|
|
Wavelet.mq5
|
|
MatrixMult.mq5
|
|
FFT.mq5
|
|
BitonicSort.mq5
|
|
|
|
Пример из статьи КАК УСТАНОВИТЬ И ИСПОЛЬЗОВАТЬ В РАСЧЕТАХ OPENCL https://www.mql5.com/ru/articles/690
|
|
opencl_sample.mq5
|
|
|
|
Попробуем для разминки решить следующую задачку:
|
|
Отправить в кернел массив из двух элементов, поменять значения элементов местами и вернуть обратно.
|
|
|
|
Первый вариант решения:
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Prog01_01A.mq5
|
|
|
|
Результат выполнения:
|
|
2017.12.11 22:00:59.128 LibreOCL_v1.002 (VTBR-12.17,M1) x[0]=1111.1 x[1]=9999.9
|
|
2017.12.11 22:00:59.136 LibreOCL_v1.002 (VTBR-12.17,M1) OpenCL: GPU device 'Pitcairn' selected
|
|
2017.12.11 22:00:59.136 LibreOCL_v1.002 (VTBR-12.17,M1) OpenCL found, Хендл на контекст OpenCL:65536 Error:0
|
|
2017.12.11 22:00:59.190 LibreOCL_v1.002 (VTBR-12.17,M1) OpenCL program create, Хендл программы OpenCL:65537 Error:0
|
|
2017.12.11 22:00:59.191 LibreOCL_v1.002 (VTBR-12.17,M1) OpenCL kernel create, Хендл кернела OpenCL:65538 Error:0
|
|
2017.12.11 22:00:59.191 LibreOCL_v1.002 (VTBR-12.17,M1) OpenCL buffer create, Хендл буфера OpenCL:65539 Error:0
|
|
2017.12.11 22:00:59.191 LibreOCL_v1.002 (VTBR-12.17,M1) В буфер записано 2 элементов
|
|
2017.12.11 22:00:59.191 LibreOCL_v1.002 (VTBR-12.17,M1) OpenCL set buffer, error:0
|
|
2017.12.11 22:00:59.191 LibreOCL_v1.002 (VTBR-12.17,M1) OpenCL execute, error:0
|
|
2017.12.11 22:00:59.194 LibreOCL_v1.002 (VTBR-12.17,M1) Из буфера прочитано 2 элементов
|
|
2017.12.11 22:00:59.194 LibreOCL_v1.002 (VTBR-12.17,M1) x[0]=9999.9 x[1]=1111.1
|
|
|
|
Обратите внимание на строку использованную при создании программы для кернела и содержащую инструкцию:
|
|
|
|
CLProgramCreate(h_CL_Context,CL_Source,BuildLog)
|
|
Здесь последний параметр строкового типа BuildLog содержит лог компиляции программы отправленной в кернел, если при компиляции обнаружены ошибки.
|
|
|
|
Например, если мы намеренно внесём ошибку в код функции:
|
|
|
|
//============================================================================================= MQL5 ===
|
|
// Код функций для OpenCL
|
|
//------------------------------------------------------------------------------------------------------
|
|
const string CL_Source=
|
|
"kernel void Exch(global double *ix) \r\n"
|
|
"{ \r\n"
|
|
" double z; XXX \r\n"
|
|
" z=ix[0]; \r\n"
|
|
" ix[0]=ix[1]; \r\n"
|
|
" ix[1]=z; \r\n"
|
|
"} \r\n";
|
|
|
|
То получим следующий лог:
|
|
|
|
"C:\Users\User9764\AppData\Local\Temp\OCL82CA.tmp.cl", line 3: error:
|
|
identifier "XXX" is undefined
|
|
double z; XXX
|
|
^
|
|
|
|
"C:\Users\User9764\AppData\Local\Temp\OCL82CA.tmp.cl", line 4: error: "z" has
|
|
already been declared in the current scope
|
|
z=ix[0];
|
|
^
|
|
|
|
"C:\Users\User9764\AppData\Local\Temp\OCL82CA.tmp.cl", line 3: warning:
|
|
variable "z" was declared but never referenced
|
|
double z; XXX
|
|
^
|
|
|
|
2 errors detected in the compilation of "C:\Users\User9764\AppData\Local\Temp\OCL82CA.tmp.cl".
|
|
|
|
Frontend phase failed compilation.
|
|
|
|
Второй вариант решения:
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Основная программа:
|
|
Prog01_01B.mq5
|
|
|
|
Кернел-программа, подключенная к основной программе как ресурс:
|
|
Prog01_01B.cl
|
|
|