On Fri, Oct 31, 2014 at 4:21 PM, Michael Rahaim <[email protected]> wrote:

> Hi Nathan,
>
> Thanks for the info. In case you didn't see my previous reply, the
> processors are all "Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz"
>
> -Mike
>


Ok, I think I understand what's going wrong here. We're calling an aligned
VOLK call directly inside the fft function of that block that works off a
buffer that we created (properly aligned) and a buffer that FFTW created.
FFTW doesn't always ship packaged with AVX support, so the FFT buffers are
only designed for SSE use -- that is, only guaranteed to be 16-byte
aligned. AVX requires 32-byte alignment.

The fix is simply. Just remove the _a call from lines 268 and 276 (in
sink_c_impl.cc). I was thinking that both buffers would be guaranteed to
have the right alignment, so I skipped the volk dispatcher and called
directly into the aligned kernel. We might just have to ban use of anything
but the dispatchers in GNU Radio code from now on.

I'm not in a place to fix this right now, so I just reopened issue #645 to
remind myself to do this when I can.

Tom




> On Fri, Oct 31, 2014 at 3:32 PM, West, Nathan <[email protected]
> > wrote:
>
>> On Thu, Oct 30, 2014 at 4:07 PM, Michael Rahaim <[email protected]> wrote:
>> > Just a follow up on this - I was able to resolve the issue with the
>> > following modifications in the volk_config file:
>> >
>> > before:          volk_32fc_32f_multiply_32fc a_avx generic
>> > changed to:   volk_32fc_32f_multiply_32fc generic generic
>> >
>> > before:          volk_32fc_deinterleave_64f_x2 a_avx u_avx
>> > changed to:   volk_32fc_deinterleave_64f_x2 generic u_avx
>> >
>> >
>> > While I'm happy to have it working again, I don't exactly know what this
>> > modification actually does. If anyone with knowledge of the volk
>> library can
>> > give me a quick bit of info about what these modifications are actually
>> > doing and / or why this would resolve the segfault issue, it would ease
>> my
>> > mind a bit.
>> >
>> > Thanks,
>> >
>> > -Mike
>> >
>>
>>
>> Hi Mike,
>>
>> So each VOLK kernel has several internal implementations that are
>> architecture specific (SSE, AVX, NEON, etc). A call to the VOLK
>> library looks like volk_32fc_32f_multiply_32fc(output_buffer,
>> input_buffer0, input_buffer1, number_of_points). Internally VOLK has a
>> dispatcher that uses the implementation that is "best" for your
>> machine. The "best" implementation is determined by running
>> volk_profile which runs all of the implementations available and write
>> the fastest one to volk_config. At run-time VOLK reads this file to
>> know which version of each kernel to actually run.
>>
>> Can you tell me your processor model name and flags? A copy of
>> /proc/cpuinfo (just one of the processors) would be useful.
>>
>> Nathan
>>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to