Wednesday, 25 June 2014

Hey all,

GSoC14 Midterm evaluation is happening right now.
And I have some news regarding the viterbi decoder.
Benchmarks for the Calculation of the branch metrics have yield good results.
I made some quick flowgraph benchmarks for QPSK and BPSK Branch Metrics

I have written a "logarithmic" normalization kernel which normalizes a buffer by subtracting a constant value. This is used to normalize State Metrics. It is quite fast, which is not surprising, performing almost 3x as fast as the generic kernel.
To complete the Viterbi Decoder, i wrote a State Metric Kernel. I used Phil Karns SSE2 implementation of the Voyager (1,2,7)-Code [1] as a starting point. But results are surprisingly disappointing. I wrote a puppet kernel to use the volk profiling tool. That puppet uses some Boilerplate initialization code to get all Matrices right. So I am not sure right now, how much overhead this produces. The SSE4 Kernel is only 17-20% faster than the generic kernel for a 4-state decoder, which is kind of a bummer. I also used gr-benchmark to get results for a whole flowgraph, and the SSE Version of the Viterbi Algorithm is even slower than the Generic one. And that is even more of a bummer.

I will have a closer look on this with my mentor. Also the kernel needs 128bit aligned memory right now, as it is performing a matrix operation and a row length that is not a multiple of 4 (floats) will segfault when trying to perform an aligned store. 

Next on my To-Do List are also the State Metrics and LLR Calculations for the SISO Decoder.

Code is all on


[1] Phil Karns FEC Library

No comments:

Post a Comment