Agora  1.2.0
Agora project
agora_buffer.h
Go to the documentation of this file.
1 
6 #ifndef AGORA_BUFFER_H_
7 #define AGORA_BUFFER_H_
8 
9 #include <array>
10 #include <cstddef>
11 
12 #include "common_typedef_sdk.h"
13 #include "concurrentqueue.h"
14 #include "config.h"
15 #include "memory_manage.h"
16 #include "message.h"
17 #include "symbols.h"
18 #include "utils.h"
19 
20 class AgoraBuffer {
21  public:
22  explicit AgoraBuffer(Config* const cfg);
23  // Delete copy constructor and copy assignment
24  AgoraBuffer(AgoraBuffer const&) = delete;
25  AgoraBuffer& operator=(AgoraBuffer const&) = delete;
26  ~AgoraBuffer();
27 
29  return csi_buffer_;
30  }
32  return ul_beam_matrix_;
33  }
35  return dl_beam_matrix_;
36  }
38  return demod_buffer_;
39  }
41  return decoded_buffer_;
42  }
43  inline Table<complex_float>& GetFft() { return fft_buffer_; }
46  return ue_spec_pilot_buffer_;
47  }
50  return calib_ul_msum_buffer_;
51  }
53  return calib_dl_msum_buffer_;
54  }
56  inline Table<int8_t>& GetDlBits() { return dl_bits_buffer_; }
58 
59  inline size_t GetUlSocketSize() const { return ul_socket_buf_size_; }
61  inline char* GetDlSocket() { return dl_socket_buffer_; }
64 
65  private:
66  void AllocateTables();
67  void FreeTables();
68 
69  Config* const config_;
70  const size_t ul_socket_buf_size_;
71 
86 
91 };
92 
93 struct SchedInfo {
96 };
97 
98 // Used to communicate between the manager and the worker class
99 //Needs to manage its own memory
100 class MessageInfo {
101  public:
102  explicit MessageInfo(size_t queue_size) { Alloc(queue_size); }
104 
105  inline moodycamel::ProducerToken* GetPtok(EventType event_type, size_t qid) {
106  return sched_info_arr_.at(qid).at(static_cast<size_t>(event_type)).ptok_;
107  }
108 
110  size_t qid) {
111  return &sched_info_arr_.at(qid)
112  .at(static_cast<size_t>(event_type))
113  .concurrent_q_;
114  }
115 
117  return complete_task_queue_.at(qid);
118  }
119 
121  size_t worker_id) {
122  return worker_ptoks_ptr_.at(qid).at(worker_id);
123  }
124 
125  private:
126  inline void Alloc(size_t queue_size) {
127  for (auto& queue : complete_task_queue_) {
128  queue = moodycamel::ConcurrentQueue<EventData>(queue_size);
129  }
130  for (auto& queue : sched_info_arr_) {
131  for (auto& event : queue) {
132  event.concurrent_q_ =
134  event.ptok_ = new moodycamel::ProducerToken(event.concurrent_q_);
135  }
136  }
137 
138  size_t queue_count = 0;
139  for (auto& queue : worker_ptoks_ptr_) {
140  for (auto& worker : queue) {
141  worker =
142  new moodycamel::ProducerToken(complete_task_queue_.at(queue_count));
143  }
144  queue_count++;
145  }
146  }
147 
148  inline void Free() {
149  for (auto& queue : sched_info_arr_) {
150  for (auto& event : queue) {
151  delete event.ptok_;
152  event.ptok_ = nullptr;
153  }
154  }
155  for (auto& queue : worker_ptoks_ptr_) {
156  for (auto& worker : queue) {
157  delete worker;
158  worker = nullptr;
159  }
160  }
161  }
162 
163  std::array<moodycamel::ConcurrentQueue<EventData>, kScheduleQueues>
165  std::array<std::array<moodycamel::ProducerToken*, kMaxThreads>,
168  std::array<std::array<SchedInfo, kNumEventTypes>, kScheduleQueues>
170 };
171 
172 struct FrameInfo {
175 };
176 
177 #endif // AGORA_BUFFER_H_
AgoraBuffer::config_
Config *const config_
Definition: agora_buffer.h:69
Config::SocketThreadNum
size_t SocketThreadNum() const
Definition: config.h:182
moodycamel::ProducerToken
Definition: concurrentqueue.h:630
AgoraBuffer::calib_ul_msum_buffer_
Table< complex_float > calib_ul_msum_buffer_
Definition: agora_buffer.h:81
Config::UeAntNum
size_t UeAntNum() const
Definition: config.h:41
Table::Calloc
void Calloc(size_t dim1, size_t dim2, Agora_memory::Alignment_t alignment)
Definition: memory_manage.h:45
MessageInfo::Free
void Free()
Definition: agora_buffer.h:148
MessageInfo::MessageInfo
MessageInfo(size_t queue_size)
Definition: agora_buffer.h:102
complex_float
Definition: test_transpose.cc:22
AgoraBuffer::GetEqual
Table< complex_float > & GetEqual()
Definition: agora_buffer.h:44
agora_buffer.h
Defination file for the AgoraBuffer class.
AgoraBuffer::GetCalibDlMsum
Table< complex_float > & GetCalibDlMsum()
Definition: agora_buffer.h:52
SchedInfo::ptok_
moodycamel::ProducerToken * ptok_
Definition: agora_buffer.h:95
kScheduleQueues
static constexpr size_t kScheduleQueues
Definition: symbols.h:129
FreeBuffer1d
static void FreeBuffer1d(T **buffer)
Definition: memory_manage.h:116
Direction
Direction
Definition: symbols.h:39
AgoraBuffer::~AgoraBuffer
~AgoraBuffer()
Definition: agora_buffer.cc:25
kFrameWnd
static constexpr size_t kFrameWnd
Definition: symbols.h:18
AgoraBuffer::operator=
AgoraBuffer & operator=(AgoraBuffer const &)=delete
EventType
EventType
Definition: symbols.h:42
Config::GetOFDMDataNum
size_t GetOFDMDataNum() const
Definition: config.h:554
MessageInfo::GetWorkerPtok
moodycamel::ProducerToken * GetWorkerPtok(size_t qid, size_t worker_id)
Definition: agora_buffer.h:120
Roundup
static constexpr T Roundup(T x)
Definition: utils.h:95
memory_manage.h
AgoraBuffer::GetDecod
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > & GetDecod()
Definition: agora_buffer.h:40
Config::BsAntNum
size_t BsAntNum() const
Definition: config.h:35
AgoraBuffer::decoded_buffer_
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > decoded_buffer_
Definition: agora_buffer.h:76
AgoraBuffer::dl_mod_bits_buffer_
Table< int8_t > dl_mod_bits_buffer_
Definition: agora_buffer.h:83
MessageInfo::GetConq
moodycamel::ConcurrentQueue< EventData > * GetConq(EventType event_type, size_t qid)
Definition: agora_buffer.h:109
AgoraBuffer::calib_ul_buffer_
Table< complex_float > calib_ul_buffer_
Definition: agora_buffer.h:89
AgoraBuffer::GetUlBeamMatrix
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > & GetUlBeamMatrix()
Definition: agora_buffer.h:31
AgoraBuffer::GetIfft
Table< complex_float > & GetIfft()
Definition: agora_buffer.h:48
Direction::kUplink
@ kUplink
Config::Frame
const FrameStats & Frame() const
Definition: config.h:340
AgoraBuffer::ul_socket_buf_size_
const size_t ul_socket_buf_size_
Definition: agora_buffer.h:70
AgoraBuffer::demod_buffer_
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > demod_buffer_
Definition: agora_buffer.h:75
AgoraBuffer::GetUlSocket
Table< char > & GetUlSocket()
Definition: agora_buffer.h:60
AgoraBuffer::GetDemod
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > & GetDemod()
Definition: agora_buffer.h:37
AgoraBuffer::GetDlModBits
Table< int8_t > & GetDlModBits()
Definition: agora_buffer.h:55
AllocBuffer1d
static void AllocBuffer1d(T **buffer, U dim, Agora_memory::Alignment_t alignment, int init_zero)
Definition: memory_manage.h:105
Table< complex_float >
MessageInfo::~MessageInfo
~MessageInfo()
Definition: agora_buffer.h:103
SchedInfo::concurrent_q_
moodycamel::ConcurrentQueue< EventData > concurrent_q_
Definition: agora_buffer.h:94
AgoraBuffer::dl_bits_buffer_status_
Table< int8_t > dl_bits_buffer_status_
Definition: agora_buffer.h:85
Config::OfdmDataNum
size_t OfdmDataNum() const
Definition: config.h:47
AgoraBuffer::equal_buffer_
Table< complex_float > equal_buffer_
Definition: agora_buffer.h:78
AgoraBuffer::GetDlBits
Table< int8_t > & GetDlBits()
Definition: agora_buffer.h:56
PtrGrid< kFrameWnd, kMaxUEs, complex_float >
AgoraBuffer::GetUlSocketSize
size_t GetUlSocketSize() const
Definition: agora_buffer.h:59
AgoraBuffer::calib_dl_buffer_
Table< complex_float > calib_dl_buffer_
Definition: agora_buffer.h:90
AgoraBuffer::csi_buffer_
PtrGrid< kFrameWnd, kMaxUEs, complex_float > csi_buffer_
Definition: agora_buffer.h:72
Config::DlPacketLength
size_t DlPacketLength() const
Definition: config.h:242
message.h
Self defined functions for message storage and passing.
Table::Free
void Free()
Definition: memory_manage.h:84
AgoraBuffer::AgoraBuffer
AgoraBuffer(Config *const cfg)
Definition: agora_buffer.cc:7
FrameStats::ClientUlPilotSymbols
size_t ClientUlPilotSymbols() const
Definition: framestats.h:73
AgoraBuffer::GetFft
Table< complex_float > & GetFft()
Definition: agora_buffer.h:43
i
for i
Definition: generate_data.m:107
Config::OfdmCaNum
size_t OfdmCaNum() const
Definition: config.h:45
MessageInfo::GetCompQueue
moodycamel::ConcurrentQueue< EventData > & GetCompQueue(size_t qid)
Definition: agora_buffer.h:116
u
Plot Rx waveform for u
Definition: inspect_single_frame.m:108
FrameInfo
Definition: agora_buffer.h:172
AgoraBuffer::dl_bits_buffer_
Table< int8_t > dl_bits_buffer_
Definition: agora_buffer.h:84
AgoraBuffer::GetUeSpecPilot
Table< complex_float > & GetUeSpecPilot()
Definition: agora_buffer.h:45
Agora_memory::Alignment_t::kAlign64
@ kAlign64
Direction::kDownlink
@ kDownlink
AgoraBuffer::dl_beam_matrix_
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > dl_beam_matrix_
Definition: agora_buffer.h:74
symbols.h
AgoraBuffer::dl_socket_buffer_
char * dl_socket_buffer_
Definition: agora_buffer.h:88
FrameStats::NumDLSyms
size_t NumDLSyms() const
Definition: framestats.cc:83
AgoraBuffer::GetCalibUlMsum
Table< complex_float > & GetCalibUlMsum()
Definition: agora_buffer.h:49
MessageInfo::worker_ptoks_ptr_
std::array< std::array< moodycamel::ProducerToken *, kMaxThreads >, kScheduleQueues > worker_ptoks_ptr_
Definition: agora_buffer.h:167
moodycamel::ConcurrentQueue< EventData >
kMaxModType
static constexpr size_t kMaxModType
Definition: symbols.h:297
FrameStats::NumULSyms
size_t NumULSyms() const
Definition: framestats.cc:85
Config::MacBytesNumPerframe
size_t MacBytesNumPerframe(Direction dir) const
Definition: config.h:263
AgoraBuffer::GetCalibDl
Table< complex_float > & GetCalibDl()
Definition: agora_buffer.h:63
AgoraBuffer::FreeTables
void FreeTables()
Definition: agora_buffer.cc:100
Config
Definition: config.h:26
AgoraBuffer::AllocateTables
void AllocateTables()
Definition: agora_buffer.cc:27
SchedInfo
Definition: agora_buffer.h:93
AgoraBuffer::GetDlBeamMatrix
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > & GetDlBeamMatrix()
Definition: agora_buffer.h:34
Table::Malloc
void Malloc(size_t dim1, size_t dim2, Agora_memory::Alignment_t alignment)
Definition: memory_manage.h:37
AgoraBuffer::dl_ifft_buffer_
Table< complex_float > dl_ifft_buffer_
Definition: agora_buffer.h:80
AgoraBuffer::GetCsi
PtrGrid< kFrameWnd, kMaxUEs, complex_float > & GetCsi()
Definition: agora_buffer.h:28
AgoraBuffer::calib_dl_msum_buffer_
Table< complex_float > calib_dl_msum_buffer_
Definition: agora_buffer.h:82
MessageInfo::complete_task_queue_
std::array< moodycamel::ConcurrentQueue< EventData >, kScheduleQueues > complete_task_queue_
Definition: agora_buffer.h:164
AgoraBuffer
Definition: agora_buffer.h:20
AgoraBuffer::ul_beam_matrix_
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > ul_beam_matrix_
Definition: agora_buffer.h:73
config.h
Declaration file for the configuration class which importants json configuration values into class va...
AgoraBuffer::fft_buffer_
Table< complex_float > fft_buffer_
Definition: agora_buffer.h:77
FrameInfo::cur_sche_frame_id_
size_t cur_sche_frame_id_
Definition: agora_buffer.h:173
AgoraBuffer::ul_socket_buffer_
Table< char > ul_socket_buffer_
Definition: agora_buffer.h:87
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t >
MessageInfo
Definition: agora_buffer.h:100
MessageInfo::sched_info_arr_
std::array< std::array< SchedInfo, kNumEventTypes >, kScheduleQueues > sched_info_arr_
Definition: agora_buffer.h:169
AgoraBuffer::ue_spec_pilot_buffer_
Table< complex_float > ue_spec_pilot_buffer_
Definition: agora_buffer.h:79
AgoraBuffer::GetDlSocket
char * GetDlSocket()
Definition: agora_buffer.h:61
AgoraBuffer::GetDlBitsStatus
Table< int8_t > & GetDlBitsStatus()
Definition: agora_buffer.h:57
AgoraBuffer::GetCalibUl
Table< complex_float > & GetCalibUl()
Definition: agora_buffer.h:62
MessageInfo::GetPtok
moodycamel::ProducerToken * GetPtok(EventType event_type, size_t qid)
Definition: agora_buffer.h:105
MessageInfo::Alloc
void Alloc(size_t queue_size)
Definition: agora_buffer.h:126
FrameInfo::cur_proc_frame_id_
size_t cur_proc_frame_id_
Definition: agora_buffer.h:174
concurrentqueue.h
Config::BfAntNum
size_t BfAntNum() const
Definition: config.h:39