#include #include #include "DKSBase.h" using namespace std; void initData(vector< vector > &v, int length) { for (unsigned int i = 0; i < v.size(); i++) { for (int j = 0; j < length; j++) { v[i].push_back(j); } } } void printData(vector< vector > &v) { for (unsigned int i = 0; i < v.size(); i++) { for (unsigned int j = 0; j < v[i].size(); j++) { cout << v[i][j] << "\t"; } cout << endl; } } void initData(double *data, int sensors, int length) { for (int i = 0; i < sensors; i++) { for (int j = 0; j < length; j++) { data[i*length + j] = j; } } } void printData(double *data, int sensors, int length) { for (int i = 0; i < sensors; i++) { for (int j = 0; j < length; j++) { cout << data[i*length + j] << "\t"; } cout << endl; } } void initPar(double *par, int npar) { for (int i = 0; i < npar; i++) par[i] = (double)i / npar; } void printDiv(int size) { for (int i = 0; i < size; i++) cout << "="; cout << endl; } void calcChisq(vector< vector > fData, double * par, double fTimeResolution, double fRebin) { double chisq = 0.0; double theo, data; const double tau=2.197019; const double dt0 = fTimeResolution*0.5*(fRebin-1); double time; double w = par[0]*0.08516155035269027; unsigned int i, j; for (i=0; i > fData; fData.resize(sensors); initData(fData, length); printData(fData); printDiv(75); DKSBase dksbase; if (useCuda) dksbase.setAPI("Cuda", 4); else dksbase.setAPI("OpenCL", 6); dksbase.setDevice("-gpu", 4); dksbase.initDevice(); dksbase.setupFFT(0, NULL); void *mem_data, *mem_par, *mem_chisq; cout << "Allocate memory" << endl; mem_par = dksbase.allocateMemory(npar, ierr); mem_data = dksbase.allocateMemory(fData.size() * fData[0].size(), ierr); mem_chisq = dksbase.allocateMemory(fData.size() * fData[0].size(), ierr); cout << "Write data" << endl; dksbase.writeData(mem_par, par, npar); for (int i = 0; i < sensors; i++) dksbase.writeData(mem_data, &fData[i][0], length, i*length); cout << "Call PHistoTFFcn" << endl; dksbase.callPHistoTFFcn(mem_data, mem_par, mem_chisq, fTimeResolution, fRebin, sensors, length, npar, result); cout << "Result: " << result << endl; double *out_data = new double[ndata]; dksbase.readData(mem_chisq, out_data, ndata); printDiv(75); printData(out_data, sensors, length); printDiv(75); calcChisq(fData, par, fTimeResolution, fRebin); printDiv(75); cout << "Free memory" << endl; dksbase.freeMemory(mem_par, npar); dksbase.freeMemory(mem_data, ndata); dksbase.freeMemory(mem_chisq, ndata); return 0; }