#include #include #include #include #include #include "HitTrk.h" extern "C" void CircleFitG(double X[HIT], double Y[HIT], double Z[HIT], double Zerr[HIT], double *Mx,double *My,double *M0,double *result) { // printf(" Now in Cuda : Mx = %g : My = %g \n", Mx[0],My[0] ); /* for(int i=0; i<50; i++){ printf(" Zerr[%i] = %g : Z[%i] = %g \n", i, Zerr[i],i ,Z[i] ); } */ double *d_X; double *d_Y; double *d_Z; double *d_Zerr; double *d_Mx; double *d_My; double *d_M0; double *d_result; /* result[0]=1; result[1]=1; result[2]=1;*/ size_t size =sizeof(double); //allocate memory for arrays on device CUDA_SAFE_CALL( cudaMalloc((void **) &d_X, size*HIT)); CUDA_SAFE_CALL( cudaMalloc((void **) &d_Y, size*HIT)); CUDA_SAFE_CALL( cudaMalloc((void **) &d_Z, size*HIT)); CUDA_SAFE_CALL( cudaMalloc((void **) &d_Zerr, size*HIT)); CUDA_SAFE_CALL( cudaMalloc((void **) &d_Mx, size)); CUDA_SAFE_CALL( cudaMalloc((void **) &d_My, size)); CUDA_SAFE_CALL( cudaMalloc((void **) &d_M0, size)); CUDA_SAFE_CALL( cudaMalloc((void **) &d_result, size*8)); CUDA_SAFE_CALL( cudaMemcpy(d_X, X, size*HIT, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(d_Y, Y, size*HIT, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(d_Z, Z, size*HIT, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(d_Zerr, Zerr,size*HIT, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(d_Mx, Mx, size, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(d_My, My, size, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(d_M0, M0, size, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(d_result, result, size*8, cudaMemcpyHostToDevice)); dim3 dimBlock2(HIT, 1); dim3 dimGrid2(1,1); Fit<<< dimGrid2, dimBlock2 >>> (d_X, d_Y,d_Z, d_Zerr,d_Mx,d_My,d_M0, d_result); CUDA_SAFE_CALL(cudaMemcpy(result, d_result, size*8, cudaMemcpyDeviceToHost) ); // printf(" %f %f %f % f %f %f %f %f \n", result[0], result[1],result[2], result[3] ,result[4],result[5] ,result[6],result[7]); CUDA_SAFE_CALL( cudaFree(d_X)); CUDA_SAFE_CALL( cudaFree(d_Y)); CUDA_SAFE_CALL( cudaFree(d_Z)); CUDA_SAFE_CALL( cudaFree(d_Zerr)); CUDA_SAFE_CALL( cudaFree(d_Mx)); CUDA_SAFE_CALL( cudaFree(d_My)); CUDA_SAFE_CALL( cudaFree(d_M0)); CUDA_SAFE_CALL( cudaFree(d_result)); } extern "C" void CircleFitGAllD(double X[TRK*HIT], double Y[TRK*HIT], double Z[TRK*HIT], double Zerr[TRK*HIT], double Mx[TRK],double My[TRK],double M0[TRK],double result[TRK*8]) { // printf(" Now in Cuda : Mx = %g : My = %g \n", Mx[0],My[0] ); /* for(int j=0; j<100; j++){ for(int i=0; i>> (d_X, d_Y,d_Z, d_Zerr,d_Mx,d_My,d_M0, d_result); // cudaThreadSynchronize(); printf(" Now calling the device \n"); CUDA_SAFE_CALL(cudaMemcpy(result, d_result, size*8*TRK, cudaMemcpyDeviceToHost) ); /* for(int j=0; j>> (d_X, d_Y,d_Z, d_Zerr,d_Mx,d_My,d_M0, d_result); // cudaThreadSynchronize(); cudaMemcpy(result, d_result, size*8*TRK, cudaMemcpyDeviceToHost); /* for(int j=0; j>> (d_X, d_Y,d_Z, d_Zerr,d_Mx,d_My,d_M0, d_result); CUDA_SAFE_CALL(cudaMemcpy(result, d_result, size*8, cudaMemcpyDeviceToHost) ); // printf(" %f %f %f % f %f %f %f %f \n", result[0], result[1],result[2], result[3] ,result[4],result[5] ,result[6],result[7]); CUDA_SAFE_CALL( cudaFree(d_X)); CUDA_SAFE_CALL( cudaFree(d_Y)); CUDA_SAFE_CALL( cudaFree(d_Z)); CUDA_SAFE_CALL( cudaFree(d_Zerr)); CUDA_SAFE_CALL( cudaFree(d_Mx)); CUDA_SAFE_CALL( cudaFree(d_My)); CUDA_SAFE_CALL( cudaFree(d_M0)); CUDA_SAFE_CALL( cudaFree(d_result)); }