aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrent Stapleton <brent.stapleton@ettus.com>2018-12-21 10:54:05 -0800
committerBrent Stapleton <brent.stapleton@ettus.com>2019-01-03 09:20:18 -0800
commitaa1ec635379192bc9694ceddfb7c417992b94db4 (patch)
tree733f7a5b60da5bb273c4fe3330592ba6e905843f
parent7d34f4d2c8e3ae63f7f217be7700d20e5c8823a7 (diff)
downloaduhd-aa1ec635379192bc9694ceddfb7c417992b94db4.tar.gz
uhd-aa1ec635379192bc9694ceddfb7c417992b94db4.tar.bz2
uhd-aa1ec635379192bc9694ceddfb7c417992b94db4.zip
examples: optimize tx_waveforms memory allocations
Move filling the TX buffer outside the critical path. Now, we pre-fill the TX buffer before entering the send loop (and before setting the TX stream time), and fill the TX buffer after calling send() (for the next iteration).
-rw-r--r--host/examples/tx_waveforms.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/host/examples/tx_waveforms.cpp b/host/examples/tx_waveforms.cpp
index d5e4cb6f5..b432741fa 100644
--- a/host/examples/tx_waveforms.cpp
+++ b/host/examples/tx_waveforms.cpp
@@ -173,6 +173,11 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
std::vector<std::complex<float> > buff(spb);
std::vector<std::complex<float> *> buffs(channel_nums.size(), &buff.front());
+ //pre-fill the buffer with the waveform
+ for (size_t n = 0; n < buff.size(); n++){
+ buff[n] = wave_table(index += step);
+ }
+
std::cout << boost::format("Setting device timestamp to 0...") << std::endl;
if (channel_nums.size() > 1)
{
@@ -250,16 +255,16 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
break;
}
- //fill the buffer with the waveform
- for (size_t n = 0; n < buff.size(); n++){
- buff[n] = wave_table(index += step);
- }
-
//send the entire contents of the buffer
num_acc_samps += tx_stream->send(
buffs, buff.size(), md
);
+ //fill the buffer with the waveform
+ for (size_t n = 0; n < buff.size(); n++){
+ buff[n] = wave_table(index += step);
+ }
+
md.start_of_burst = false;
md.has_time_spec = false;
}