64 lines
5.5 KiB
MQL5
64 lines
5.5 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| 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 <NeuroNetworksBook\algotrading\sum_vect_ocl.mqh>
|
|
#include <Math\Stat\Normal.mqh>
|
|
//+------------------------------------------------------------------+
|
|
//| Внешние параметры |
|
|
//+------------------------------------------------------------------+
|
|
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<MathMax(size1,size2); i++)
|
|
{
|
|
result[i]=(i<size1 ? source1[i] : 0) + (i<size2 ? source2[i] : 0);
|
|
}
|
|
//---
|
|
return true;
|
|
}
|
|
//+------------------------------------------------------------------+
|