Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
psrdada_cpp
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Tobias Winchen
psrdada_cpp
Commits
0822a657
Commit
0822a657
authored
4 years ago
by
Tobias Winchen
Browse files
Options
Downloads
Patches
Plain Diff
Deleted obsolete header
parent
f210a689
No related branches found
No related tags found
No related merge requests found
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
psrdada_cpp/effelsberg/edd/GatedStokesSpectrometer.cuh
+0
-234
0 additions, 234 deletions
psrdada_cpp/effelsberg/edd/GatedStokesSpectrometer.cuh
psrdada_cpp/effelsberg/edd/detail/GatedStokesSpectrometer.cu
+0
-630
0 additions, 630 deletions
psrdada_cpp/effelsberg/edd/detail/GatedStokesSpectrometer.cu
with
0 additions
and
864 deletions
psrdada_cpp/effelsberg/edd/GatedStokesSpectrometer.cuh
deleted
100644 → 0
+
0
−
234
View file @
f210a689
#ifndef PSRDADA_CPP_EFFELSBERG_EDD_GATEDSPECTROMETER_HPP
#define PSRDADA_CPP_EFFELSBERG_EDD_GATEDSPECTROMETER_HPP
#include
"psrdada_cpp/effelsberg/edd/Unpacker.cuh"
#include
"psrdada_cpp/raw_bytes.hpp"
#include
"psrdada_cpp/cuda_utils.hpp"
#include
"psrdada_cpp/double_device_buffer.cuh"
#include
"psrdada_cpp/double_host_buffer.cuh"
#include
"psrdada_cpp/effelsberg/edd/DetectorAccumulator.cuh"
#include
"psrdada_cpp/effelsberg/edd/DadaBufferLayout.hpp"
#include
"thrust/device_vector.h"
#include
"cufft.h"
#include
"cublas_v2.h"
namespace
psrdada_cpp
{
namespace
effelsberg
{
namespace
edd
{
#define BIT_MASK(bit) (1uL << (bit))
#define SET_BIT(value, bit) ((value) |= BIT_MASK(bit))
#define CLEAR_BIT(value, bit) ((value) &= ~BIT_MASK(bit))
#define TEST_BIT(value, bit) (((value)&BIT_MASK(bit)) ? 1 : 0)
typedef
unsigned
long
long
int
uint64_cu
;
static_assert
(
sizeof
(
uint64_cu
)
==
sizeof
(
uint64_t
),
"Long long int not of 64 bit! This is problematic for CUDA!"
);
/**
@class GatedStokesSpectrometer
@brief Split data into two streams and create integrated spectra depending on
bit set in side channel data.
*/
template
<
class
HandlerType
>
class
GatedStokesSpectrometer
{
public:
public:
/**
* @brief Constructor
*
* @param buffer_bytes A RawBytes object wrapping a DADA header buffer
* @param nSideChannels Number of side channel items in the data stream,
* @param selectedSideChannel Side channel item used for gating
* @param selectedBit bit of side channel item used for gating
* @param speadHeapSize Size of the spead heap block.
* @param fftLength Size of the FFT
* @param naccumulate Number of samples to integrate in the individual
* FFT bins
* @param nbits Bit depth of the sampled signal
* @param handler Output handler
*
*/
GatedStokesSpectrometer
(
const
DadaBufferLayout
&
bufferLayout
,
std
::
size_t
selectedSideChannel
,
std
::
size_t
selectedBit
,
std
::
size_t
fft_length
,
std
::
size_t
naccumulate
,
std
::
size_t
nbits
,
HandlerType
&
handler
);
~
GatedStokesSpectrometer
();
/**
* @brief A callback to be called on connection
* to a ring buffer.
*
* @details The first available header block in the
* in the ring buffer is provided as an argument.
* It is here that header parameters could be read
* if desired.
*
* @param block A RawBytes object wrapping a DADA header buffer
*/
void
init
(
RawBytes
&
block
);
/**
* @brief A callback to be called on acqusition of a new
* data block.
*
* @param block A RawBytes object wrapping a DADA data buffer output
* are the integrated specttra with/without bit set.
*/
bool
operator
()(
RawBytes
&
block
);
private:
// gate the data and fft data per gate
void
gated_fft
(
PolarizationData
&
data
,
thrust
::
device_vector
<
uint64_cu
>
&
_noOfBitSetsIn_G0
,
thrust
::
device_vector
<
uint64_cu
>
&
_noOfBitSetsIn_G1
);
private:
DadaBufferLayout
_dadaBufferLayout
;
std
::
size_t
_fft_length
;
std
::
size_t
_naccumulate
;
std
::
size_t
_nbits
;
std
::
size_t
_selectedSideChannel
;
std
::
size_t
_selectedBit
;
std
::
size_t
_batch
;
std
::
size_t
_nsamps_per_output_spectra
;
std
::
size_t
_nsamps_per_buffer
;
std
::
size_t
_nsamps_per_heap
;
HandlerType
&
_handler
;
cufftHandle
_fft_plan
;
uint64_t
_nchans
;
uint64_t
_call_count
;
double
_processing_efficiency
;
std
::
unique_ptr
<
Unpacker
>
_unpacker
;
// Input data and per pol intermediate data
PolarizationData
polarization0
,
polarization1
;
// Output data
StokesOutput
stokes_G0
,
stokes_G1
;
DoublePinnedHostBuffer
<
char
>
_host_power_db
;
// Temporary processing block
// ToDo: Use inplace FFT to avoid temporary coltage array
thrust
::
device_vector
<
UnpackedVoltageType
>
_unpacked_voltage_G0
;
thrust
::
device_vector
<
UnpackedVoltageType
>
_unpacked_voltage_G1
;
cudaStream_t
_h2d_stream
;
cudaStream_t
_proc_stream
;
cudaStream_t
_d2h_stream
;
};
/**
* @brief Splits the input data depending on a bit set into two arrays.
*
* @details The resulting gaps are filled with a given baseline value in the other stream.
*
* @param GO Input data. Data is set to the baseline value if corresponding
* sideChannelData bit at bitpos os set.
* @param G1 Data in this array is set to the baseline value if corresponding
* sideChannelData bit at bitpos is not set.
* @param sideChannelData noOfSideChannels items per block of heapSize
* bytes in the input data.
* @param N lebgth of the input/output arrays G0.
* @param heapsize Size of the blocks for which there is an entry in the
sideChannelData.
* @param bitpos Position of the bit to evaluate for processing.
* @param noOfSideChannels Number of side channels items per block of
* data.
* @param selectedSideChannel No. of side channel item to be eveluated.
0 <= selectedSideChannel < noOfSideChannels.
* @param stats_G0 No. of sampels contributing to G0, accounting also
* for loat heaps
* @param stats_G1 No. of sampels contributing to G1, accounting also
* for loat heaps
*/
__global__
void
gating
(
float
*
G0
,
float
*
G1
,
const
int64_t
*
sideChannelData
,
size_t
N
,
size_t
heapSize
,
size_t
bitpos
,
size_t
noOfSideChannels
,
size_t
selectedSideChannel
,
const
float
*
__restrict__
_baseLineG0
,
const
float
*
__restrict__
_baseLineG1
,
float
*
__restrict__
baseLineNG0
,
float
*
__restrict__
baseLineNG1
,
uint64_cu
*
stats_G0
,
uint64_cu
*
stats_G1
);
/**
* @brief calculate stokes IQUV from two complex valuies for each polarization
*/
//__host__ __device__ void stokes_IQUV(const float2 &p1, const float2 &p2, float &I, float &Q, float &U, float &V);
__host__
__device__
void
stokes_IQUV
(
const
float2
&
p1
,
const
float2
&
p2
,
float
&
I
,
float
&
Q
,
float
&
U
,
float
&
V
)
{
I
=
fabs
(
p1
.
x
*
p1
.
x
+
p1
.
y
*
p1
.
y
)
+
fabs
(
p2
.
x
*
p2
.
x
+
p2
.
y
*
p2
.
y
);
Q
=
fabs
(
p1
.
x
*
p1
.
x
+
p1
.
y
*
p1
.
y
)
-
fabs
(
p2
.
x
*
p2
.
x
+
p2
.
y
*
p2
.
y
);
U
=
2
*
(
p1
.
x
*
p2
.
x
+
p1
.
y
*
p2
.
y
);
V
=
-
2
*
(
p1
.
y
*
p2
.
x
-
p1
.
x
*
p2
.
y
);
}
/**
* @brief calculate stokes IQUV spectra pol1, pol2 are arrays of naccumulate
* complex spectra for individual polarizations
*/
__global__
void
stokes_accumulate
(
float2
const
__restrict__
*
pol1
,
float2
const
__restrict__
*
pol2
,
float
*
I
,
float
*
Q
,
float
*
U
,
float
*
V
,
int
nchans
,
int
naccumulate
)
{
for
(
size_t
i
=
blockIdx
.
x
*
blockDim
.
x
+
threadIdx
.
x
;
(
i
<
nchans
);
i
+=
blockDim
.
x
*
gridDim
.
x
)
{
float
rI
=
0
;
float
rQ
=
0
;
float
rU
=
0
;
float
rV
=
0
;
for
(
int
k
=
0
;
k
<
naccumulate
;
k
++
)
{
const
float2
p1
=
pol1
[
i
+
k
*
nchans
];
const
float2
p2
=
pol2
[
i
+
k
*
nchans
];
rI
+=
fabs
(
p1
.
x
*
p1
.
x
+
p1
.
y
*
p1
.
y
)
+
fabs
(
p2
.
x
*
p2
.
x
+
p2
.
y
*
p2
.
y
);
rQ
+=
fabs
(
p1
.
x
*
p1
.
x
+
p1
.
y
*
p1
.
y
)
-
fabs
(
p2
.
x
*
p2
.
x
+
p2
.
y
*
p2
.
y
);
rU
+=
2.
f
*
(
p1
.
x
*
p2
.
x
+
p1
.
y
*
p2
.
y
);
rV
+=
-
2.
f
*
(
p1
.
y
*
p2
.
x
-
p1
.
x
*
p2
.
y
);
}
I
[
i
]
+=
rI
;
Q
[
i
]
+=
rQ
;
U
[
i
]
+=
rU
;
V
[
i
]
+=
rV
;
}
}
}
// edd
}
// effelsberg
}
// psrdada_cpp
#include
"psrdada_cpp/effelsberg/edd/detail/GatedStokesSpectrometer.cu"
#endif //PSRDADA_CPP_EFFELSBERG_EDD_GATEDSPECTROMETER_HPP
This diff is collapsed.
Click to expand it.
psrdada_cpp/effelsberg/edd/detail/GatedStokesSpectrometer.cu
deleted
100644 → 0
+
0
−
630
View file @
f210a689
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment