Hi all,
This patch set adds to libosmocore an optimized Viterbi decodeer for
architecture specific (Intel SSE) and non-specific cases. The
implementation covers codes with constraint lengths of K=5 and K=7 and
rates 1/4 to 3/4, which make up the majority of GSM use cases. Speedup
from the current implementation is in the range of 5 to 20 depending on
the processor and code type. API is unchanged.
Tested on Haswell (i7-4770K) and Atom (D2550). Additional test codes
from osmo-bts are included. Further tests for AWGN bit-error-rate
and benchmarks can be found in the following repository.
https://github.com/ttsou/osmo-conv-test
Here are some examples.
Bit error test for GPRS CS2 with SNR of 5 dB and 100000 bursts.
$ ./conv_test -c 2 -e -r 5 -i 100000
=================================================
[+] Testing: GPRS CS2
[.] Specs: (N=2, K=5, non-recursive, flushed, not punctured)
[.] Input length : ret = 290 exp = 290 -> OK
[.] Output length : ret = 588 exp = 588 -> OK
[.] BER tests:
[..] Testing base:
[..] Input BER.......................... 0.042443
[..] Output BER......................... 0.000006
[..] Output FER......................... 0.001350 (135)
[..] Testing SIMD:
[..] Input BER.......................... 0.042460
[..] Output BER......................... 0.000005
[..] Output FER......................... 0.001240 (124)
Timed AFS benchmark with 8 threads and 100000 bursts per thread.
$ ./conv_test -b -c 10 -j 8 -i 100000
=================================================
[+] Testing: GSM TCH/AFS 6.7
[.] Specs: (N=4, K=5, recursive, flushed, punctured)
[.] Input length : ret = 140 exp = 140 -> OK
[.] Output length : ret = 448 exp = 448 -> OK
[.] Performance benchmark:
[..] Encoding / Decoding 800000 bursts on 8 thread(s):
[..] Testing base:
[..] Elapsed time....................... 4.320001 secs
[..] Rate............................... 25.925920 Mbps
[..] Testing SIMD:
[..] Elapsed time....................... 0.458272 secs
[..] Rate............................... 244.396341 Mbps
[..] Speedup............................ 9.426718
-TT
Gentoo Linux now supports Network from Scratch in 5 easy steps. We're
using jolly's branches for the live ebuilds. (ETA on when we can ship
master?)
Network from Scratch on Gentoo
==============================
1. Add these to packages.keywords (in /etc/portage):
=net-wireless/openbsc-9999 **
=net-wireless/osmobts-9999 **
=net-wireless/osmotrx-9999 **
=net-libs/libosmo-abis-9999 **
2. Make sure your portage tree is up to date, and emerge the right packages:
$ sudo emerge --sync
$ sudo emerge openbsc osmobts osmotrx
3. Download configuration templates:
$ mkdir ~/.osmocom
$ wget -O ~/.osmocom/open-bsc.cfg http://bpaste.net/raw/236987/
$ wget -O ~/.osmocom/osmo-bts.cfg http://bpaste.net/raw/237000/
4. Edit configuration templates to work on spectrum you have a license for:
$ vim ~/.osmocom/*.cfg
5. Start these babies up, in separate shells:
shell1 $ osmo-nitb -c ~/.osmocom/open-bsc.cfg -l
~/.osmocom/hlr.sqlite3 -P -C --debug=DRLL:DCC:DMM:DRR:DRSL:DNM
shell2 $ osmobts-trx -c ~/.osmocom/osmo-bts.cfg
shell3 $ osmo-trx
Funny bug. osmo-nitb, jolly's branches for everything.
Send a blank SMS. Receiver doesn't get blank message. Instead receiver
gets garbage, different everytime. Presumably this is uninitialized
memory until the first null.
Detect x86 SSE availability for architecture specific convolutional
decoding. Use the GNU autoconf macro AX_EXT to provide built time
detection and set the following definitions.
http://www.gnu.org/software/autoconf-archive/ax_ext.html
HAVE_SSE3
HAVE_SSE4_1
AX_EXT is generally packaged with autoconf-archive and requires the
following macro files.
ax_check_compile_flag.m4
ax_ext.m4
ax_gcc_x86_avx_xgetbv.m4
ax_gcc_x86_cpuid.m4
Set -march=native for automatic compile flag setting. Combined, this
allows automatic detection on x86 and pass-through support for non-x86
platforms (e.g. ARM).
Signed-off-by: Thomas Tsou <tom(a)tsou.cc>
---
configure.ac | 1 +
src/Makefile.am | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index eaaab50..4b0c572 100644
--- a/configure.ac
+++ b/configure.ac
@@ -179,6 +179,7 @@ then
AC_DEFINE([PANIC_INFLOOP],[1],[Use infinite loop on panic rather than fprintf/abort])
fi
+AX_EXT
AC_OUTPUT(
libosmocore.pc
diff --git a/src/Makefile.am b/src/Makefile.am
index 0ecf4b0..c0b78a8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,7 +2,7 @@
# Please read Chapter 6 "Library interface versions" of the libtool documentation before making any modification
LIBVERSION=4:0:0
-AM_CFLAGS = -Wall $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)/include
+AM_CFLAGS = -Wall $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)/include -march=native
lib_LTLIBRARIES = libosmocore.la
--
1.9.0
An according change in the OpoenBSC is following.
Since we're changing the external API we should probably increase a
lib version as well.
--
Regards,
Alexander Chemeris.
CEO, Fairwaves, Inc. / ООО УмРадио
https://fairwaves.co
Hi all;
I have deployed one ipaccess nanoBTS 1800, with OpenBSC (osmo-nitb) and all the osmocom suite apps.
I have already make succesfully GSM calls, SMS, and GPRS/EDGE packet data connections.
I now want support for sending binary SMS, i have read that with SMPP i would can.
I have compiled OpenBSC with SMPP but now I don´t know how to use it, i think it is in the OpenBSC vty, but i don´t know the commands or how to use the interface.
If you can give me some light in this thread i will grant you.
Sorry for my English
Best Regards
Jesús Vega Diaz