//+------------------------------------------------------------------+ //| OpenCL_Test.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com/ru/users/dng | //+------------------------------------------------------------------+ //| Скрипт сравнения скорости вычисления суммы двух векторов | //| на CPU и OpenCL | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com/ru/users/dng" #property version "1.00" //+------------------------------------------------------------------+ //| Подключаем библиотеки | //+------------------------------------------------------------------+ #include #include //+------------------------------------------------------------------+ //| Внешние параметры | //+------------------------------------------------------------------+ sinput int Size1=2.6e8; //Размер вектора 1 sinput int Size2=1.0e8; //Размер вектора 2 int size_r; //+------------------------------------------------------------------+ //| Программа скрипта | //+------------------------------------------------------------------+ void OnStart() { double X[]; double Y[]; double Z[]; MathRandomNormal(0,1,Size1,X); MathRandomNormal(0,1,Size2,Y); size_r=(int)MathMax(Size1,Size2); ArrayResize(Z,size_r); OpenCL_Init(X,Y,Z); uint start=GetTickCount(); if(!SumVectorsOCL(X,Y,Z)) Print("Error OCL function"); uint end=GetTickCount(); PrintFormat("%.1e OCL duration %0 000d msec",size_r,end-start); OpenCL_Deinit(); start=GetTickCount(); if(!SumVectors(X,Y,Z)) Print("Error CPU function"); end=GetTickCount(); PrintFormat("%.1e CPU duration %0 000d msec",size_r,end-start); } //+------------------------------------------------------------------+ //| Функция сложения векторов на CPU | //+------------------------------------------------------------------+ bool SumVectors(double &source1[], double &source2[], double &result[]) { //--- int size1=ArraySize(source1); int size2=ArraySize(source2); //--- for(int i=0; i