diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.cc index 624f5b33f53a30354d9cd153e1cd7edf416affa1..01b5ef1c5c54ff2407bdb5d27815e9dd22a728ab 100644 --- a/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.cc +++ b/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.cc @@ -51,6 +51,7 @@ namespace LOFAR unsigned nrBitsPerSample_, unsigned nrChannels_, unsigned nrSamplesPerChannel_, + unsigned clockMHz_, double subbandBandwidth_, unsigned nrSAPs_, bool correlator_, @@ -67,6 +68,7 @@ namespace LOFAR nrBitsPerSample(nrBitsPerSample_), nrChannels(nrChannels_), nrSamplesPerChannel(nrSamplesPerChannel_), + clockMHz(clockMHz_), subbandBandwidth(subbandBandwidth_), nrSAPs(nrSAPs_), delayCompensation(delayCompensation_), @@ -227,8 +229,10 @@ namespace LOFAR if (itsParameters.transpose) defs["DO_TRANSPOSE"] = "1"; - if (itsParameters.dopplerCorrection) + if (itsParameters.dopplerCorrection) { defs["DOPPLER_CORRECTION"] = "1"; + defs["CLOCK_MHZ"] = lexical_cast<string>(itsParameters.clockMHz); + } return defs; } diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.h index 2b07f320470bc008a6d6940c1bf7c4c4f49078a6..b37693bd27234c5bde854afe50b80b9d98c5bacf 100644 --- a/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.h +++ b/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.h @@ -62,6 +62,7 @@ namespace LOFAR unsigned nrBitsPerSample, unsigned nrChannels, unsigned nrSamplesPerChannel, + unsigned clockMHz, double subbandBandwidth, unsigned nrSAPs, bool correlator, @@ -79,6 +80,9 @@ namespace LOFAR unsigned nrChannels; unsigned nrSamplesPerChannel; + // Clock freq used to calculate input samplie freq=clockMHz/1024 MHz + // for Doppler correction + unsigned clockMHz; double subbandBandwidth; unsigned nrSAPs; diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.cc index ef7c6f979ef7b92883e6f6efd3e78a45fdc23c8b..4d4e9dacdd10ca7bc965a6947e8c22739a7b86eb 100644 --- a/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.cc +++ b/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.cc @@ -121,9 +121,6 @@ namespace LOFAR return (dopplerCorrection? (size_t) 1 * nrSTABs * // nrSAPs=1 here NR_POLARIZATIONS * sizeof(double) : 0); - case FIR_FilterKernel::PHASE_ZEROS: - return (dopplerCorrection? - (size_t) nrSTABs * NR_POLARIZATIONS * sizeof(double): 0); default: THROW(GPUProcException, "Invalid bufferType (" << bufferType << ")"); } @@ -140,8 +137,7 @@ namespace LOFAR historySamples(stream.getContext(), params.bufferSize(HISTORY_DATA)), historyFlags(boost::extents[params.nrSubbands][params.nrSTABs]), delaysAtBegin(stream.getContext(), params.bufferSize(DELAYS)), - delaysAfterEnd(stream.getContext(), params.bufferSize(DELAYS)), - phase0s(stream.getContext(), params.bufferSize(PHASE_ZEROS)) + delaysAfterEnd(stream.getContext(), params.bufferSize(DELAYS)) { setArg(0, buffers.output); setArg(1, buffers.input); @@ -149,7 +145,6 @@ namespace LOFAR setArg(3, historySamples); setArg(4, delaysAtBegin); setArg(5, delaysAfterEnd); - setArg(6, phase0s); unsigned totalNrThreads = params.nrChannels * NR_POLARIZATIONS * 2; unsigned nrPasses = ceilDiv(totalNrThreads, maxThreadsPerBlock); @@ -195,8 +190,8 @@ namespace LOFAR void FIR_FilterKernel::enqueue(const BlockID &blockId, unsigned subbandIdx, double subbandFrequency) { - setArg(7, subbandIdx); - setArg(8, subbandFrequency); + setArg(6, subbandIdx); + setArg(7, subbandFrequency); Kernel::enqueue(blockId); } diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.h index 63a6605f45bbe0f6beae8af9624e7fce7d0f5b9c..7ab2d9499a8e703eef004c68cccd51b5fad5b5ef 100644 --- a/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.h +++ b/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.h @@ -45,8 +45,7 @@ namespace LOFAR OUTPUT_DATA, FILTER_WEIGHTS, HISTORY_DATA, - DELAYS, - PHASE_ZEROS + DELAYS }; // Parameters that must be passed to the constructor of the @@ -144,7 +143,7 @@ namespace LOFAR public: // Delay compensation constants to be written by the caller before enqueue() - gpu::DeviceMemory delaysAtBegin, delaysAfterEnd, phase0s; + gpu::DeviceMemory delaysAtBegin, delaysAfterEnd; }; //# -------- Template specializations for KernelFactory -------- #// diff --git a/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.cc index 2b96545c215eaee03f2477c6c730eedf2d3b079e..8c55db441f7105d15893b2f91269cf617d8a676c 100644 --- a/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.cc +++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.cc @@ -84,6 +84,7 @@ namespace LOFAR obsParameters.nrBitsPerSample, preParameters.nrDelayCompensationChannels, obsParameters.blockSize / preParameters.nrDelayCompensationChannels, + obsParameters.clockMHz, //not needed in beamformer pipeline obsParameters.subbandWidth, obsParameters.nrSAPs, false, // correlator diff --git a/RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.cc index f8e34cca7cb84a8fed10492dec3f884115f9c5c4..f4ffbffcca420ad705cf625fc5982484e7801820 100644 --- a/RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.cc +++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.cc @@ -98,6 +98,7 @@ namespace LOFAR obsParameters.nrBitsPerSample, corParameters.nrChannels, obsParameters.blockSize / corParameters.nrChannels, + obsParameters.clockMHz, obsParameters.subbandWidth, obsParameters.nrSAPs, true, // correlator @@ -355,8 +356,6 @@ namespace LOFAR input.delaysAtBegin, false); htodStream->writeBuffer(firFilterKernel->delaysAfterEnd, input.delaysAfterEnd, false); - htodStream->writeBuffer(firFilterKernel->phase0s, - input.phase0s, false); } if (preParameters.delayCompensationEnabled) { diff --git a/RTCP/Cobalt/GPUProc/test/Kernels/tDelayAndBandPassKernel.cc b/RTCP/Cobalt/GPUProc/test/Kernels/tDelayAndBandPassKernel.cc index e3486039711d662323c03f957c47504f130fb4ee..2f14c7385f7f3773c83a551234ef85d04093a78e 100644 --- a/RTCP/Cobalt/GPUProc/test/Kernels/tDelayAndBandPassKernel.cc +++ b/RTCP/Cobalt/GPUProc/test/Kernels/tDelayAndBandPassKernel.cc @@ -67,6 +67,7 @@ int main(int argc, char *argv[]) ps.settings.nrBitsPerSample, ps.settings.beamFormer.nrDelayCompensationChannels, ps.settings.blockSize / ps.settings.beamFormer.nrDelayCompensationChannels, + ps.settings.clockMHz, ps.settings.subbandWidth(), ps.settings.SAPs.size(), ps.settings.delayCompensation.enabled, diff --git a/RTCP/Cobalt/GPUProc/test/Kernels/tDelayAndBandPassKernel2.cc b/RTCP/Cobalt/GPUProc/test/Kernels/tDelayAndBandPassKernel2.cc index 65ad6919b628a84c7488f9816ff70d5412e70bdf..dae560faf4aaff0b20f11adcb6e484fcd50699b6 100644 --- a/RTCP/Cobalt/GPUProc/test/Kernels/tDelayAndBandPassKernel2.cc +++ b/RTCP/Cobalt/GPUProc/test/Kernels/tDelayAndBandPassKernel2.cc @@ -37,6 +37,7 @@ struct TestFixture ps.settings.nrBitsPerSample, ps.settings.correlator.nrChannels, ps.settings.blockSize / ps.settings.correlator.nrChannels, + ps.settings.clockMHz, ps.settings.subbandWidth(), ps.settings.SAPs.size(), ps.settings.delayCompensation.enabled, diff --git a/RTCP/Cobalt/GPUProc/test/cuda/tFIR_Filter.cc b/RTCP/Cobalt/GPUProc/test/cuda/tFIR_Filter.cc index 743f2ba01a8bfa464172dc433bf7e401cec1b553..550da33ada1334ac0da9c26c6647b70c260cad59 100644 --- a/RTCP/Cobalt/GPUProc/test/cuda/tFIR_Filter.cc +++ b/RTCP/Cobalt/GPUProc/test/cuda/tFIR_Filter.cc @@ -130,7 +130,6 @@ int test() // Empty data for Doppler correction DeviceMemory devDelaysAtBegin(ctx, 0); DeviceMemory devDelaysAfterEnd(ctx, 0); - DeviceMemory devPhase0s(ctx, 0); unsigned station, sample, ch, pol; @@ -192,19 +191,20 @@ int test() stream.writeBuffer(devFirWeights, rawFirWeights, true); stream.writeBuffer(devHistoryData, rawHistoryData, true); + unsigned subbandIdx = 0; + double subbandFrequency=0.0; // Not used unless Doppler corr. enabled + // Run the kernel on the created data hKernel.setArg(0, devFilteredData); hKernel.setArg(1, devSampledData); hKernel.setArg(2, devFirWeights); hKernel.setArg(3, devHistoryData); - // Just pass empty buffers + // Just pass empty buffers for the following two hKernel.setArg(4, devDelaysAtBegin); hKernel.setArg(5, devDelaysAfterEnd); - hKernel.setArg(6, devPhase0s); - unsigned subbandIdx = 0; - hKernel.setArg(7, subbandIdx); - double subbandFrequency=0.0; // Not used unless Doppler corr. enabled - hKernel.setArg(8, subbandFrequency); + // standard values + hKernel.setArg(6, subbandIdx); + hKernel.setArg(7, subbandFrequency); // Run the kernel stream.synchronize();