English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
계산을 위해 OpenCL을 설치하고 사용하는 방법

계산을 위해 OpenCL을 설치하고 사용하는 방법

MetaTrader 5 | 3 9월 2021, 09:45
1 035 0
MetaQuotes
MetaQuotes

MetaTrader 5 클라이언트 터미널의 OpenCL

MQL5에서 OpenCL용 프로그램을 작성할 수 있게 된 지 1년이 넘었습니다. 발견된 모든 OpenCL 장치의 항목은 이제 아래와 같이 MetaTrader 5 터미널 출시 시 저널에서 볼 수 있습니다.

발견된 OpenCL 장치에 관한 MetaTrader 5 터미널의 저널 항목

이 경우 MetaTrader 5 터미널은 MQL5 프로그램에서 직접 OpenCL을 실행하는 데 사용할 수 있는 4가지 방법을 감지했습니다. NVIDIA(OpenCL 1.1)의 그래픽 카드와 AMD(OpenCL 1.2)의 그래픽 카드, 두 가지 Intel Core-i7 CPU 사용률 옵션은 설치된 드라이버에 따라 다릅니다. 컴퓨터에 적합한 OpenCL 장치 버전 1.1 이상이 이미 있는 경우 설명 부분을 건너뛰고 성능 비교로 직접 진행하여 병렬 컴퓨팅을 허용하는 작업의 성능 향상을 직접 확인할 수 있습니다. .


OpenCL은 매력적입니다!

그러나 많은 사용자가 제공되는 새로운 가능성을 인식하지 못하고 필요한 지식이 없기 때문에 Expert Advisors, 지표 또는 스크립트에서 병렬 컴퓨팅을 사용하는 이점을 활용하지 못했습니다.

문제는 OpenCL을 사용하는 MQL5 프로그램을 실행하려면 적절한 소프트웨어를 설치해야 한다는 것입니다. 그렇기 때문에 많은 사용자가 Mandelbrot 세트 스크립트와 MQL5.community 포럼에서 사용할 수 있는 다른 많은 프로그램을 실행할 수 없었습니다.

이 글에서는 MQL5에서 병렬 컴퓨팅을 사용할 때의 이점을 직접 확인할 수 있도록 컴퓨터에 OpenCL을 설치하는 방법을 보여줍니다. 웹 사이트에 이미 이 주제를 다루는 두 개의 훌륭한 글이 있으므로 MQL5에서 OpenCL용 프로그램 작성에 대한 디테일은 고려하지 않을 것입니다.


OpenCL이란 무엇입니까?

OpenCL은 2008년 Khronos Group 컨소시엄에서 개발한 병렬 프로그래밍을 위한 개방형 표준입니다. 이 표준을 사용하면 이기종 시스템에서 아키텍처가 다른 GPU 또는 CPU에서 병렬로 실행할 수 있는 애플리케이션을 개발할 수 있습니다.

즉, OpenCL을 사용하면 작업을 계산할 때 모든 CPU 코어 또는 GPU의 바한 컴퓨팅 용량을 활용할 수 있으므로 프로그램 실행 시간이 단축됩니다. 따라서 OpenCL을 사용하면 힘들고 리소스 소모적인 계산과 관련된 작업을 처리할 때 매우 유용합니다.

예를 들어 MQL5에 대해 말하면 여러 기호 및 시간 프레임에 따라 과거 데이터의 복잡하고 긴 분석을 수행하는 특정 스크립트(지표 또는 Expert Advisor)를 처리할 때 성능 향상이 매우 유용할 수 있습니다. 병렬 실행을 사용하기 위한 MQL5 프로그램은 OpenCL API를 사용하여 특별한 방식으로 작성되어야 합니다.


OpenCL 지원

MQL5에서 OpenCL에 대한 지원은 2010년 6월에 릴리스된 버전 1.1부터 제공됩니다. 따라서 병렬 컴퓨팅을 사용하려면 표준에 적합한 비교적 새로운 소프트웨어와 하드웨어가 필요합니다.

즉, OpenCL을 사용하기 시작하려면 PC에 그래픽 카드가 있는지 여부가 중요하지 않습니다. CPU는 그렇게 할 것입니다. 즉, MQL5 프로그램의 실행 시간을 줄이려는 거의 모든 사용자가 OpenCL을 사용할 수 있습니다.

CPU는 분산 컴퓨팅 속도 측면에서 그래픽 라이벌에 확실히 뒤쳐져 있습니다. 그러나 좋은 멀티 코어 CPU는 상당한 속도 향상을 달성하는 데 충분합니다. 하지만 논의의 주제로 돌아가봅시다.

앞서 언급했듯이 병렬 컴퓨팅을 위해 그래픽 카드와 CPU를 모두 사용할 수 있습니다. 시장에는 Intel, AMD 및 NVidia의 세 가지 주요 관련 장치 제조업체가 있습니다. 다음 표는 세 ​​제조업체 각각에 대해 OpenCL 1.1을 지원하는 장치 및 운영 체제에 대한 정보를 제공합니다.

제조사 기기 운영체제
인텔 CPUs:

Core i3, i5, i7 - PC용,
Xeon - 서버용,
Xeon Phi - 보조 프로세서용(자세히 알아보기).
Windows 7, 8;
openSUSE;
Red Hat.
AMD 그래픽 카드:

6400 시리즈 이상의 AMD Radeon HD 그래픽,
5400 시리즈 이상의 ATI Radeon HD 그래픽,
ATI FirePro 그래픽 A300, S, W, V 시리즈,
5400 시리즈 이상의 ATI Mobility Radeon HD,
ATI FirePro M7820 M5800(자세히 알아보기).

K8 아키텍처 이상 기반 CPU:

Opteron, Athlon 64, Athlon 64 FX, Athlon 64 X2, Sempron, Turion 64, Turion 64 X2, Phenom, Phenom II(자세히 알아보기).

APU(하이브리드 CPU/GPU 프로세서):

CPU 시리즈 A, C, E, E2, G, R.
Windows Vista SP2, 7, 8;
openSUSE 11.x;
Ubuntu 11.04;
Red Hat 6.x.
NVidia GPU(CUDA 아키텍처 포함):

Tesla, Quadro, GeForce(자세히 알아보기).
Windows XP, Vista, 7, 8
Linux 및 Mac OS
(read more)
또한 개발자인 Khronos Group의 공식 웹사이트는 각 OpenCL 버전에 필요한 하드웨어 및 소프트웨어에 대한 완전한 정보를 제공합니다.

컴퓨터에서 사용 가능한 장치(CPU 또는 GPU)가 하나 이상 있는지 확인하고 해당 장치와 설치된 운영 체제가 OpenCL 1.1을 지원하는지 확인하십시오. 이러한 요구 사항이 충족되면 하드웨어 제조업체에 따라 OpenCL을 설정하는 방법을 설명하는 다음 섹션으로 안전하게 이동할 수 있습니다.

 

OpenCL 설정

컴퓨터에 필요한 하드웨어와 소프트웨어가 설치되어 있는 경우 MetaTrader 5에서 병렬 컴퓨팅을 사용하기 시작하기 위해 해야 할 일은 장치 중 하나에 대해 OpenCL을 설정하는 것입니다.

OpenCL 설정 절차는 사용하려는 하드웨어(GPU 또는 CPU)에 따라 다릅니다. MetaTrader 5 터미널이 OpenCL을 지원하는 그래픽 카드를 찾은 경우 드라이버를 최신 버전으로 업데이트하기만 하면 됩니다.

컴퓨터에 적절한 그래픽 카드가 없는 경우에만 CPU용 SDK를 설치해야 합니다.

중요: OpenCL 지원 그래픽 카드가 이미 설치된 경우 CPU에 OpenCL 에뮬레이션용 소프트웨어 버전을 설치할 필요가 없습니다!

OpenCL용 그래픽 카드는 확실한 이점을 제공하므로 실험에 필요하지 않은 한 말이죠.

다음 단락은 제조업체에 따라 OpenCL 설정 절차를 설명합니다. 해당 링크를 사용하여 관련 설정 지침으로 이동할 수 있습니다.



1. 인텔

Intel CPU에서 OpenCL을 사용하려면 OpenCL 응용 프로그램용 Intel SDK를 다운로드하여 설치해야 합니다. 이렇게 하려면 공식 개발자의 다운로드 페이지로 이동하세요.

그림 1.1. OpenCL용 인텔 SDK 다운로드 페이지.

그림 1.1. OpenCL용 인텔 SDK 다운로드 페이지.

여기에서 OpenCL에 대한 일반 정보와 다운로드할 수 있는 제품 목록을 찾을 수 있습니다. 사용 가능한 제품을 다운로드하려면 페이지 오른쪽 상단에 있는 제품 비교 및 ​​다운로드 버튼을 클릭하십시오.

그림 1.2. 사용 가능한 제품 및 설치 요구 사항에 대한 정보입니다.

그림 1.2. 사용 가능한 제품 및 설치 요구 사항에 대한 정보입니다.

클릭하면 지원되는 프로세서 유형 및 운영 체제에 대한 제품 요구 사항에 대한 정보가 있는 창이 표시됩니다. 제품 아이콘 위의 다운로드 버튼을 클릭하여 적합한 제품을 선택하고 다운로드합니다.

그림 1.3. SDK 다운로드 링크

그림 1.3. SDK 다운로드 링크

다운로드 링크가 있는 다른 창이 나타납니다. 32비트 또는 64비트 SDK를 선택하여 다운로드합니다. 몇 분 정도 기다렸다가 다운로드가 완료되면 얻은 파일을 실행합니다. SDK 구성 요소의 설치를 확인하고 폴더 중 하나에 파일의 압축을 풉니다.

그림 1.4. OpenCL용 인텔 SDK 설치를 시작합니다.

그림 1.4. OpenCL용 인텔 SDK 설치를 시작합니다.

OpenCL 1.2를 지원하는 OpenCL 응용 프로그램용 인텔 SDK라는 설치 창이 표시됩니다. 다음을 클릭하고 설치 지침을 따릅니다.

그림 1.5. 최종 사용자 사용권 계약에 동의합니다.

그림 1.5. 최종 사용자 사용권 계약에 동의합니다.

사용권 계약의 조건에 동의합니다. 그러면 설치할 구성 요소가 창에 표시됩니다. 계속하려면 다음을 클릭하십시오.

그림 1.6. SDK와 Visual Studio의 통합.

그림 1.6. SDK와 Visual Studio의 통합.

Microsoft Visual Studio 2008 소프트웨어(또는 이후 버전)가 이미 PC에서 사용 가능한 경우 OpenCL을 위해 소프트웨어와 통합하라는 메시지가 표시됩니다. 그런 다음 설치된 구성 요소에 액세스할 수 있는 사용자만 선택하고 SDK 설치 위치를 지정한 다음 설치를 클릭하면 됩니다.

그림 1.7. 설치.

그림 1.7. 설치.

설치는 몇 분 정도입니다. 성공적으로 완료되면 화면에 결과가 표시됩니다. 마침을 클릭하여 설치 프로세스를 마칩니다.

그림 1.8. 설치를 마칩니다.

그림 1.8. 설치를 마칩니다.

 

2.1. AMD 그래픽 카드 및 APU

AMD 그래픽 카드용 OpenCL을 설치하려면 드라이버를 사용 가능한 최신 버전으로 업데이트합시다. 이것은 드라이버 다운로드 페이지에서 수행할 수 있습니다.

그림 2.1.1. AMD 드라이버 다운로드 페이지.

그림 2.1.1. AMD 드라이버 다운로드 페이지.

그래픽 카드 사양을 알고 있다면 페이지 왼쪽의 양식을 작성하여 드라이버를 쉽게 찾을 수 있습니다. 모든 양식 필드에서 필요한 옵션을 선택했으면 결과 표시를 클릭하여 적절한 드라이버를 찾아보세요.

그림 2.1.2. AMD Catalyst 다운로드.

그림 2.1.2. AMD Catalyst 다운로드.

시스템은 OpenCL 드라이버를 포함하여 Catalyst Software Suite의 몇 가지 드라이버를 제공합니다. Catalyst를 다운로드하고 획득한 파일을 실행합니다.

그림 2.1.3. 그래픽 카드 유형 및 드라이버 버전 식별을 위한 응용 프로그램 다운로드 페이지입니다.

그림 2.1.3. 그래픽 카드 유형 및 드라이버 버전 식별을 위한 응용 프로그램 다운로드 페이지입니다.

페이지의 오른쪽 상단 모서리에 있는 해당 링크를 클릭하여 드라이버 자동 감지 시스템을 사용할 수도 있습니다(그림 2.1.1.). AMD 드라이버 자동 감지 애플리케이션을 다운로드하라는 메시지가 표시되면 다운로드하고 시작하십시오.

그림 2.1.4. 적절한 드라이버의 감지 및 다운로드를 위한 응용 프로그램입니다.

그림 2.1.4. 적절한 드라이버의 감지 및 다운로드를 위한 응용 프로그램입니다.

응용 프로그램은 시스템을 분석하고 적절한 그래픽 카드 드라이버를 다운로드하도록 제안합니다. 다운로드 후 획득한 파일을 실행합니다. 설치 관리자는 파일 압축을 풀 폴더를 선택하라는 메시지를 표시합니다. 선택하고 설치를 클릭합니다.

그림 2.1.5. AMD Catalyst 설치 관리자.

그림 2.1.5. AMD Catalyst 설치 관리자.

최종 사용자 사용권 계약이 팝업 창에 나타납니다. 이용 약관에 동의해야 합니다. 추가로 빠른 설치를 선택하고 AMD Catalyst 설치 위치를 지정하고 다음을 클릭합니다.

그림 2.1.6. 설치.

그림. 2.1.6. 설치.

설치는 몇 분 정도입니다. 완료되면 화면에 관련 메시지가 표시됩니다.

그림 2.1.7. 설치를 마칩니다.

그림. 2.1.7. 설치를 마칩니다.

 

2.2. AMD CPUs

AMD CPU용 OpenCL을 설치하려면 최신 버전의 AMD APP SDK를 다운로드하여 설치해야 합니다. 이를 위해 개발자 공식 웹사이트의 다음 페이지로 이동합니다.

그림 2.2.1. AMD APP SDK 다운로드 페이지.

그림 2.2.1. AMD APP SDK 다운로드 페이지.

이 페이지는 SDK 자체에 대한 몇 가지 정보를 제공하고 OpenCL에 대한 아이디어를 제공합니다. 여기서 필요한 것은 설명 아래에 있는 다운로드로 이동 링크를 찾아 클릭하는 것입니다.

그림 2.2.2. 다운로드 가능한 SDK 표입니다.

그림 2.2.2. 다운로드 가능한 SDK 표입니다.

페이지 하단에 다양한 운영 체제(32비트 또는 64비트)용 최신 SDK 버전 목록과 다운로드 링크가 있는 표가 표시됩니다. 관련 링크를 클릭하여 필요한 버전을 선택하십시오. 최종 사용자 사용권 계약 페이지로 이동합니다. 다운로드를 시작하려면 수락합니다.

다운로드한 설치 프로그램을 실행하면 설치 파일을 일부 폴더에 추출하라는 메시지가 표시됩니다. 그런 다음 CPU용 AMD APP SDK가 포함된 위에서 설명한 AMD Catalyst를 설치합니다. 촉매 설치 절차는 섹션 2.1의 그림 2.1.5 - 2.1.7에 나와 있습니다. 위에.

 

3. NVidia

NVidia 그래픽 카드가 있는 경우 OpenCL을 설치하려면 드라이버를 최신 버전으로 업데이트해야 합니다. 개발자 웹사이트의 드라이버 다운로드 페이지에서 다운로드할 수 있습니다.

그림 3.1. NVidia 드라이버 다운로드 페이지.

그림 3.1. NVidia 드라이버 다운로드 페이지.

이 페이지에서는 필요한 드라이버를 수동 또는 자동으로 찾는 옵션을 제공합니다. 수동 옵션을 사용하여 제품 유형, 시리즈, 운영 체제를 선택하고 검색을 클릭해야 합니다. 시스템이 그래픽 카드에 적합한 최신 드라이버를 찾고 다운로드하라는 메시지를 표시합니다.

그림 3.2. 선택한 드라이버 다운로드.

그림 3.2. 선택한 드라이버 다운로드.

옵션 2를 선택한 경우 그래픽 드라이버를 클릭해야 GPU_Reader Java 애플리케이션을 사용하여 시스템을 스캔하라는 메시지가 표시됩니다.

그림 3.3. 응용 프로그램을 실행하여 그래픽 카드 유형 및 드라이버 버전을 식별합니다.

그림 3.3. 응용 프로그램을 실행하여 그래픽 카드 유형 및 드라이버 버전을 식별합니다.

실행을 클릭하여 애플리케이션을 실행합니다. 그래픽 카드, 설치된 드라이버의 현재 버전 및 권장되는 최신 드라이버 버전에 대한 정보를 보려면 몇 초 동안 기다리십시오. 다운로드를 클릭하면 그림 3.2와 같은 다운로드 페이지로 이동합니다.

그림 3.4. 그래픽 카드 유형 및 드라이버 버전의 자동 식별 결과.

그림 3.4. 그래픽 카드 유형 및 드라이버 버전의 자동 식별 결과.

지금 다운로드를 클릭하고 동의 및 다운로드 버튼을 클릭하여 NVidia 소프트웨어 라이선스 계약에 동의합니다.

그림 3.5. 라이센스 계약에 동의하고 드라이버를 다운로드합니다.

그림 3.5. 라이센스 계약에 동의하고 드라이버를 다운로드합니다.

따라서 그래픽 카드의 최신 드라이버 버전을 얻습니다. 그런 다음 얻은 파일을 실행합니다. 폴더 중 하나에 드라이버 설치 파일을 추출하라는 메시지가 표시됩니다. 파일 압축을 풀면 설치가 시작됩니다. 먼저 NVidia 소프트웨어 사용권 계약 조건에 다시 한 번 동의해야 합니다.

그림 3.6. 첫 번째 설치 단계에서 사용권 계약에 동의합니다.

그림 3.6. 첫 번째 설치 단계에서 사용권 계약에 동의합니다.

그런 다음 고속 설치 옵션을 선택하고 다음을 클릭합니다. 또한 선택 사항인 NVidia Experience 추가 기능 프로그램을 설치하라는 메시지가 표시됩니다.

그림 3.7. 설치 옵션을 선택합니다.

그림 3.7. 설치 옵션을 선택합니다.

드라이버가 설치되었으며 MetaTrader 5 터미널에서 OpenCL을 사용할 수 있으려면 시스템을 다시 시작하기만 하면 됩니다.

그림 3.8. 설치.

그림 3.8. 설치.

그게 다입니다. 드라이버가 설치되었으며 MetaTrader 5 터미널에서 OpenCL을 사용할 수 있으려면 시스템을 다시 시작하기만 하면 됩니다.

그림 3.9. 설치를 마칩니다.

그림 3.9. 설치를 마칩니다.

 

성능 비교

OpenCL_Sample.mq5는 MQL5에서 OpenCL을 사용할 때의 이점을 보여주기 위해 작성되었습니다. 일부 집합에서 두 변수의 함수 값을 계산하고 그래픽 레이블(OBJ_BITMAP_LABEL)을 사용하여 차트 창에 결과를 표시합니다. 계산은 OpenCL을 사용하거나 사용하지 않는 두 가지 방법으로 수행됩니다. 이러한 블록은 각각 WithOpenCL() 및 WithoutOpenCL() 함수의 형태로 구현됩니다.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//...
   Print("\nCalculations without OpenCL:");
   WithoutOpenCL(values1,colors1,w,h,size,const_1,const_2);
//--- calculations with OpenCL
   Print("\nCalculations with OpenCL:");
   WithOpenCL(values2,colors2,w,h,size,const_1,const_2);
//...
  }
//+------------------------------------------------------------------+
//| Calculations without using  OpenCL                               |
//+------------------------------------------------------------------+
void WithoutOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                   const uint size,const uint const_1,const uint const_2)
  {
//--- store the calculation start time
   uint x=GetTickCount();
//--- calculation of function values
   for(uint i=0;i<h;i++)
      for(uint j=0;j<w;j++)
         values[i*w+j]=Func(InpXStart+i*InpXStep,InpYStart+j*InpYStep);
//--- print the function calculation time
   Print("Calculation of function values = "+IntegerToString(GetTickCount()-x)+" ms");
//--- determine the minimum value and the difference between 
//--- the minimum and maximum values of points in the set
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- store the calculation start time
   x=GetTickCount();
//--- calculate paint colors for the set
   uint a;
   for(uint i=0;i<size;i++)
     {
      a=(uint)MathRound(255*(values[i]-min)/dif);
      colors[i]=const_1*(a/16)+const_2*(a%16);
     }
//--- print the paint color calculation time
   Print("Calculation of paint colors = "+IntegerToString(GetTickCount()-x)+" ms");
  }
//+------------------------------------------------------------------+
//| Calculations using OpenCL                                        |
//+------------------------------------------------------------------+
void WithOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                const uint size,const uint const_1,const uint const_2)
  {
//--- variables for using OpenCL
   int cl_ctx;
   int cl_prg;
   int cl_krn_1;
   int cl_krn_2;
   int cl_mem_1;
   int cl_mem_2;
//--- create context for OpenCL (selection of device)
   if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE)
     {
      Print("OpenCL not found");
      return;
     }
//--- create a program based on the code in the cl_src line
   if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE)
     {
      CLContextFree(cl_ctx);
      Print("OpenCL program create failed");
      return;
     }
//--- create a kernel for calculation of values of the function of two variables
   if((cl_krn_1=CLKernelCreate(cl_prg,"Func"))==INVALID_HANDLE)
     {
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_1 create failed");
      return;
     }
//--- kernel for painting points of the set in the plane
   if((cl_krn_2=CLKernelCreate(cl_prg,"Grad"))==INVALID_HANDLE)
     {
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_2 create failed");
      return;
     }
//--- OpenCL buffer for function values
   if((cl_mem_1=CLBufferCreate(cl_ctx,size*sizeof(float),CL_MEM_READ_WRITE))==INVALID_HANDLE)
     {
      CLKernelFree(cl_krn_2);
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL buffer create failed");
      return;
     }
//--- OpenCL buffer for point colors
   if((cl_mem_2=CLBufferCreate(cl_ctx,size*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE)
     {
      CLBufferFree(cl_mem_1);
      CLKernelFree(cl_krn_2);
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL buffer create failed");
      return;
     }
//--- store the calculation start time
   uint x=GetTickCount();
//--- array sets indices at which the calculation will start 
   uint offset[2]={0,0};
//--- array sets limits up to which the calculation will be performed
   uint work[2];
   work[0]=h;
   work[1]=w;
//--- calculation of function values
//--- pass the values to the kernel
   CLSetKernelArg(cl_krn_1,0,InpXStart);
   CLSetKernelArg(cl_krn_1,1,InpYStart);
   CLSetKernelArg(cl_krn_1,2,InpXStep);
   CLSetKernelArg(cl_krn_1,3,InpYStep);
   CLSetKernelArgMem(cl_krn_1,4,cl_mem_1);
//--- start the execution of the kernel
   CLExecute(cl_krn_1,2,offset,work);
//--- read the obtained values to the array
   CLBufferRead(cl_mem_1,values);
//--- print the function calculation time
   Print("Calculation of function values = "+IntegerToString(GetTickCount()-x)+" ms");
//--- determine the minimum value and the difference between 
//--- the minimum and maximum values of points in the set
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- store the calculation start time
   x=GetTickCount();
//--- set the calculation limits
   uint offset2[1]={0};
   uint work2[1];
   work2[0]=size;
//--- calculation of paint colors for the set
//--- pass the values to the kernel
   CLSetKernelArg(cl_krn_2,0,min);
   CLSetKernelArg(cl_krn_2,1,dif);
   CLSetKernelArg(cl_krn_2,2,const_1);
   CLSetKernelArg(cl_krn_2,3,const_2);
   CLSetKernelArgMem(cl_krn_2,4,cl_mem_1);
   CLSetKernelArgMem(cl_krn_2,5,cl_mem_2);
//--- start the execution of the kernel
   CLExecute(cl_krn_2,1,offset2,work2);
//--- read the obtained values to the array
   CLBufferRead(cl_mem_2,colors);
//--- print the paint color calculation time
   Print("Calculation of paint colors = "+IntegerToString(GetTickCount()-x)+" ms");
//--- delete OpenCL objects
   CLBufferFree(cl_mem_1);
   CLBufferFree(cl_mem_2);
   CLKernelFree(cl_krn_1);
   CLKernelFree(cl_krn_2);
   CLProgramFree(cl_prg);
   CLContextFree(cl_ctx);
  }

스크립트를 실행한 후 몇 초 동안 차트 창에서 그려진 함수 값 집합을 볼 수 있습니다. 각각은 입력 매개변수(빨간색, 녹색 또는 파란색)에서 선택한 색상의 톤 중 하나에 해당합니다.

0.1단계에서 -22에서 22까지의 평면에 있는 점 집합에 대한 스크립트 실행 결과.

0.1단계에서 -22에서 22까지의 평면에 있는 점 집합에 대한 스크립트 실행 결과.

이미지 자체 외에도 "Expert Advisors" 저널에 두 방법의 함수 계산 시간이 표시되어 MQL5에서 OpenCL을 사용하는 이점과 실용적인 가치를 명확하게 볼 수 있습니다. 단계 값을 늘리고 스크립트 실행 결과를 얻어보세요.

두 가지 방법을 사용하여 함수 계산 및 색상 값 페인팅 결과.

두 가지 방법을 사용하여 함수 계산 및 색상 값 페인팅 결과.

OpenCL을 사용하여 CPU에서 함수 계산의 총 시간은 5배 이상 적은 것으로 나타났으며 이것은 한계가 아닙니다! OpenCL을 지원하는 고급 GPU의 계산이 CPU보다 훨씬 빠르다는 것은 잘 알려져 있습니다. 아래 표와 같이 다양한 OpenCL 장치에서 스크립트를 실행한 결과에서 이 사실에 대한 명확한 증거를 찾을 수 있습니다.

OpenCL 기기
OpenCL을 사용하지 않은 실행 시간, ms
OpenCL을 사용한 실행 시간, ms
성능 향상
AMD Radeon HD 7970 20,361 ms
171 ms
 119.07배
NVidia GeForce GT 630
24,742 ms
578 ms
 42.8배
Intel Core i5 430M
27,222 ms
5,428 ms
 5.01배
AMD Athlon X2 Dual-Core QL-65
45,723 ms
9,516 ms  4.8배

보시다시피, 최고급 AMD 그래픽 카드에서 OpenCL을 사용하면 계산 시간이 100배 단축되었습니다! 시간이 42배 단축된 2011년의 약간 오래된 GeForce GT 630에서도 상당한 결과를 얻었습니다. Intel과 AMD의 CPU가 마지막에 왔습니다. 그러나 이러한 성능 향상은 복잡한 계산을 처리할 때도 매우 유용합니다.

그게 다입니다. 비교 표는 대량 데이터 처리에서 병렬 컴퓨팅을 사용할 때의 분명한 이점을 보여줍니다. 그래픽 카드나 CPU에 적합한 드라이버를 설치하기만 하면 됩니다.

MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/690

파일 첨부됨 |
opencl_sample.mq5 (12.93 KB)
또 다른 MQL5 OOP 클래스 또 다른 MQL5 OOP 클래스
이 글은 이론적인 거래 아이디어를 구상하는 것부터 그 아이디어를 경험적 세계에서 현실로 만드는 MQL5 EA를 프로그래밍하는 것에 이르기까지 처음부터 객체 지향 Expert Advisor를 구축하는 방법을 보여줍니다. 행동으로 배우는 것은 IMHO 성공을 위한 확실한 접근 방식입니다. 그래서 저는 여러분이 Forex 로봇을 최종적으로 코딩하기 위해 아이디어를 주문하는 방법을 볼 수 있도록 실용적인 예를 보여주고 있습니다. 저의 목표는 또한 당신이 OO 원칙을 준수하도록 초대하는 것입니다.
MQL5 Coobook: 일반적인 차트 이벤트 처리 MQL5 Coobook: 일반적인 차트 이벤트 처리
이 문서에서는 일반적인 차트 이벤트를 고려하고 처리 예를 포함합니다. 우리는 차트 수정 이벤트에 대해서 뿐 아니라 마우스 이벤트, 키 입력, 그래픽 개체 생성/수정/제거, 차트 및 그래픽 개체에 대한 마우스 클릭, 마우스로 그래픽 개체 이동, 텍스트 필드의 텍스트 편집 완료에 중점을 둘 것입니다. 고려되는 각 이벤트 유형에 대해 MQL5 프로그램 샘플이 제공됩니다.
MQL5 마법사 및 Hlaiman EA 생성기를 사용하여 신경망 EA 생성 MQL5 마법사 및 Hlaiman EA 생성기를 사용하여 신경망 EA 생성
이 글에서는 MQL5 Wizard 및 Hlaiman EA Generator를 사용하여 신경망 EA를 자동으로 생성하는 방법을 설명합니다. 이론적인 정보 전체를 배우고 코드를 작성하지 않고도 신경망 작업을 쉽게 시작할 수 있는 방법을 보여줍니다.
MQL5 클라우드 네트워크: 아직도 계산 중입니까? MQL5 클라우드 네트워크: 아직도 계산 중입니까?
MQL5 클라우드 네트워크가 출시된 지 곧 1년 반이 됩니다. 이 최첨단 이벤트는 알고리즘 거래의 새로운 시대를 열었습니다. 이제 몇 번의 클릭으로 거래자는 거래 전략의 최적화를 위해 수백 수천 개의 컴퓨팅 코어를 마음대로 사용할 수 있습니다.