Original_NNB/MQL5/Scripts/NeuroNetworksBook/opencl_test.mq5

65 lines
5.5 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:15:14 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| OpenCL_Test.mq5 |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com/ru/users/dng |
//+------------------------------------------------------------------+
//| !:@8?B A@02=5=8O A:>@>AB8 2KG8A;5=8O AC<<K 42CE 25:B>@>2 |
//| =0 CPU 8 OpenCL |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link "https://www.mql5.com/ru/users/dng"
#property version "1.00"
//+------------------------------------------------------------------+
//| >4:;NG05< 181;8>B5:8 |
//+------------------------------------------------------------------+
#include <NeuroNetworksBook\algotrading\sum_vect_ocl.mqh>
#include <Math\Stat\Normal.mqh>
//+------------------------------------------------------------------+
//| =5H=85 ?0@0<5B@K |
//+------------------------------------------------------------------+
sinput int Size1=2.6e8; // 07<5@ 25:B>@0 1
sinput int Size2=1.0e8; // 07<5@ 25:B>@0 2
int size_r;
//+------------------------------------------------------------------+
//| @>3@0<<0 A:@8?B0 |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| $C=:F8O A;>65=8O 25:B>@>2 =0 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;
}
//+------------------------------------------------------------------+