/* cuEstimateStats.cu 9/23/2017, Minyan Zhong */ #include "cuArrays.h" #include "float2.h" #include #include "cudaUtil.h" #include "cudaError.h" #include "cuAmpcorUtil.h" #include #include #include #include template __global__ void cudaKernel_estimateSnr(const float* corrSum, const int* corrValidCount, const float* maxval, float* snrValue, const int size) { int idx = threadIdx.x + blockDim.x*blockIdx.x; if (idx >= size) return; float mean = (corrSum[idx] - maxval[idx] * maxval[idx]) / (corrValidCount[idx] - 1); snrValue[idx] = maxval[idx] / mean; } void cuEstimateSnr(cuArrays *corrSum, cuArrays *corrValidCount, cuArrays *maxval, cuArrays *snrValue, cudaStream_t stream) { int size = corrSum->getSize(); //std::cout<allocateHost(); //corrSum->copyToHost(stream); //std::cout<<"corr sum"<allocateHost(); //corrValidCount->copyToHost(stream); //std::cout<<"valid count"<allocateHost(); //maxval->copyToHost(stream); //std::cout<<"maxval"<hostData[i]<hostData[i]<hostData[i]<<<< IDIVUP(size, NTHREADS), NTHREADS, 0, stream>>> (corrSum->devData, corrValidCount->devData, maxval->devData, snrValue->devData, size); getLastCudaError("cuda kernel estimate stats error\n"); }