Hi Marcus, Thanks for the reply!
My GNURadio version: *3.8.0.0 (Python 2.7.10)* It is the Windows 3.8.0.0 version downloaded from: http://www.gcndevelopment.com/gnuradio/downloads.htm Complete reproducible code is below. I use the tqdm package to monitor iterations per second. On my PC, the it/sec declines very precipitously (starts at 85it/sec, then down to 22it/s after 40s and keeps dropping. Eventually as low as 1 it/sec). ``` import numpy as np from gnuradio import gr, gr_unittest from gnuradio import blocks from gnuradio import digital from gnuradio.filter import firdes from gnuradio import channels from tqdm import tqdm def decode(channel_sigs): tb = gr.top_block() ################################################## # Variables ################################################## nfilts = 32 sps = 4 timing_loop_bw = 3 * 6.28 / 100.0 # NOTE: this controls convergence speed! constellation_scheme = digital.constellation_8psk().base() rrc_taps = firdes.root_raised_cosine(nfilts, nfilts, 1.0 / float(sps), 0.35, 11 * sps * nfilts) #### Actual blocks channel_src = blocks.vector_source_c(channel_sigs, False) digital_pfb_clock_sync = digital.pfb_clock_sync_ccf(sps, timing_loop_bw, rrc_taps, nfilts, nfilts / 2, 1.5, 1) constellation_soft_decoder = digital.constellation_soft_decoder_cf(constellation_scheme) binary_slicer = digital.binary_slicer_fb() blocks_char_to_float = blocks.char_to_float(1, 1) recovered_bits_dst = blocks.vector_sink_f() ################################################## # Connections ################################################## tb.connect((channel_src, 0), (digital_pfb_clock_sync, 0)) tb.connect((digital_pfb_clock_sync, 0), (constellation_soft_decoder, 0)) tb.connect((constellation_soft_decoder, 0), (binary_slicer, 0)) tb.connect((binary_slicer, 0), (blocks_char_to_float, 0)) tb.connect((blocks_char_to_float, 0), (recovered_bits_dst, 0)) tb.run() recovered_bits = np.array(recovered_bits_dst.data()) return recovered_bits if __name__ == '__main__': n_trls = 10000 n_samples = 9999 sig = np.random.normal(size=(n_samples,)) + 1j * np.random.normal(size=(n_samples,)) for n in tqdm(range(n_trls)): decode(sig) ``` On Thu, Feb 13, 2020 at 2:11 AM Müller, Marcus (CEL) <muel...@kit.edu> wrote: > Hi, > > huh. That looks hard to debug; also, the slow down is suspicious (as > long as there's memory available, it shouldn't take significantly > longer to get some – usually, memory fragmentation isn't *that* bad, > and this shouldn't be doing *that* much memory allocation). > > Could you put all your code in one .py file (or a set of these) that > one can simply execute right away? That would allow us to reproduce. > Also, could you tell us your specific GNU Radio version (all four > digits of it?). > > Best regards, > Marcus > > On Tue, 2020-02-11 at 16:34 -0800, Roman A Sandler wrote: > > Hi, > > > > I am using GNURadio to decode a large amount of 1024-sample complex > > vectors of different modulation schemes. Thus, I have a for loop > > which runs gr.top_block.run() at each iteration and uses a vector > > sink to collect the results. The issue is that as the simulation > > keeps going, each itertion takes longer (e.g. starts of at 120it/sec, > > and then after 5000 iterations slows down to 10it/sec). I can see in > > task manager (I am on windows) that memory is increasing so clearly > > there is a memory leak where somehow the results of the iterations > > arent being deleted. > > > > Is there an explicit way to delete runs or is this a bug? > > > > CODE: > > > > calling code: > > ``` > > for _ in range(10000): > > decode(sig) > > ``` > > > > decode func: > > ``` > > def decode(channel_sigs): > > tb = gr.top_block() > > > > ################################################## > > # Variables > > ################################################## > > nfilts = 32 > > sps = 4 > > timing_loop_bw = 3 * 6.28 / 100.0 # NOTE: this controls > > convergence speed! > > constellation_scheme, bps = get_constellation_scheme(scheme) > > rrc_taps = firdes.root_raised_cosine(nfilts, nfilts, 1.0 / > > float(sps), 0.35, 11 * sps * nfilts) > > phase_bw = 6.28 / 100.0 > > eq_gain = 0.01 > > arity = 4 > > > > #### Actual blocks > > channel_src = blocks.vector_source_c(channel_sigs, False) > > digital_pfb_clock_sync = digital.pfb_clock_sync_ccf(sps, > > timing_loop_bw, rrc_taps, nfilts, > > nfilts / 2, > > 1.5, 1) > > constellation_soft_decoder = > > digital.constellation_soft_decoder_cf(constellation_scheme) > > binary_slicer = digital.binary_slicer_fb() > > blocks_char_to_float = blocks.char_to_float(1, 1) > > recovered_bits_dst = blocks.vector_sink_f() > > > > ################################################## > > # Connections > > ################################################## > > tb.connect((channel_src, 0), (digital_pfb_clock_sync, 0)) > > tb.connect((digital_pfb_clock_sync, 0), > > (constellation_soft_decoder, 0)) > > tb.connect((constellation_soft_decoder, 0), (binary_slicer, 0)) > > tb.connect((binary_slicer, 0), (blocks_char_to_float, 0)) > > tb.connect((blocks_char_to_float, 0), (recovered_bits_dst, 0)) > > > > tb.run() > > > > recovered_bits = np.array(recovered_bits_dst.data()) > > return recovered_bits > > ``` >