How to pass a large number of items between blocks?

Hi,

I recently encountered a problem with the large number of items. I wanna
pass about 75000 items from one block to the another. I thought that I
could do this with setting the min of output items in the constructor of
the block but I got the following error by runtime:

thread[thread-per-block[1]: <block crc (1)>]: Buffer too small for
min_noutput_items

I searched around but I couldn’t find a cogent response. please help me!

Any idea please?

best,
Mostafa

On 13.05.2014 19:27, Mostafa A. wrote:

I searched around but I couldn’t find a cogent response. please help me!
You could use your own version of tagged streams to indicate
boundaries… regular tagged stream blocks also suffer from buffer
limitations.

That said, 75000 items doesn’t seem all that large. What’s your item
size, is it sizeof(gr_complex)? Did you set your kernel.shmmax =
2147483648?

M

Hi Martin,
I finally found the solution. I the method *set_align(int ), * to tell
the
scheduler output is multiple of a number but this is different than
set_output_multiple(int ). The set_align will decrease the amount of
buffer
if the output number of items is less than the actual number of written
output until the output buffer aligned with the number of items will
written on it!

This is interesting.

best,

Hi Martin,
Yes you’re right, 75000 items isn’t so large! But after passing these
items
through an encoder, the number of items becomes about 227000!! That’s a
big
number!

However, I skewed over the problem and till now I’ve reached to this
point
that I may use 3 or 4 inputs-ouputs ports per block (instead of actually
one input-ouput port) and divide the 227000 items into 4 parallel
streams
and read all of them through 3/4 different input ports and put them out
to
the 3/4 output ports ! That seems work but I’m not sure that’s the best
one.

If you have any idea I’ll be appreciate you so much.

best,