//--- by default some GPU doesn't support doubles //--- cl_khr_fp64 directive is used to enable work with doubles #pragma OPENCL EXTENSION cl_khr_fp64 : enable //+------------------------------------------------------------------+ //| Morlet wavelet function | //+------------------------------------------------------------------+ double Morlet(const double t) { return exp(-t*t*0.5)*cos(M_2_PI*t); } //+------------------------------------------------------------------+ //| OpenCL kernel function | //+------------------------------------------------------------------+ __kernel void Wavelet_GPU(__global double *data,int datacount,int x_size,int y_size,__global double *result) { size_t i = get_global_id(0); size_t j = get_global_id(1); double a1=(double)10e-10; double a2=(double)15.0; double da=(a2-a1)/(double)y_size; double db=((double)datacount-(double)0.0)/x_size; double a=a1+j*da; double b=0+i*db; uint norm=1; double B=(double)1.0; //Morlet double B_inv=(double)1.0/B; double a_inv=(double)1.0/a; double dt=(double)1.0; double coef=(double)0.0; if(norm==0) coef=sqrt(a_inv); else { for(int k=0; k