Original_NNB/MQL5/Scripts/NeuroNetworksBook/opencl_test.mq5
super.admin e81e22b7b8 convert
2025-05-30 16:15:14 +02:00

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;
}
//+------------------------------------------------------------------+