From 3e7284014cb04bc66ae50004267aed4e4ada2d14 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 10 Feb 2011 19:01:32 -0800 Subject: uhd: misc speedups w/ look up tables use a look up table for io type size (in the case its used in the fast-path) move the static const pred table in vrt unpacker to the global level, for some reason this was incurring a malloc (perhaps because there were 2 tables). --- host/lib/transport/gen_vrt_if_packet.py | 3 ++- host/lib/types/types.cpp | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/host/lib/transport/gen_vrt_if_packet.py b/host/lib/transport/gen_vrt_if_packet.py index 3ba562d68..427217eb6 100755 --- a/host/lib/transport/gen_vrt_if_packet.py +++ b/host/lib/transport/gen_vrt_if_packet.py @@ -66,6 +66,8 @@ static pred_table_type get_pred_unpack_table(void){ return table; } +static const pred_table_type pred_unpack_table(get_pred_unpack_table()); + ######################################################################## #def gen_code($XE_MACRO, $suffix) ######################################################################## @@ -168,7 +170,6 @@ void vrt::if_hdr_unpack_$(suffix)( //if_packet_info.sob = bool(vrt_hdr_word & $hex(0x1 << 25)); //not implemented //if_packet_info.eob = bool(vrt_hdr_word & $hex(0x1 << 24)); //not implemented - static const pred_table_type pred_unpack_table(get_pred_unpack_table()); const pred_type pred = pred_unpack_table[pred_table_index(vrt_hdr_word)]; switch(pred){ diff --git a/host/lib/types/types.cpp b/host/lib/types/types.cpp index c1be2ff6d..bf308a0b3 100644 --- a/host/lib/types/types.cpp +++ b/host/lib/types/types.cpp @@ -22,6 +22,7 @@ #include #include #include +#include using namespace uhd; @@ -66,14 +67,18 @@ otw_type_t::otw_type_t(void): /*********************************************************************** * io type **********************************************************************/ +static std::vector get_tid_size_table(void){ + std::vector table(128, 0); + table[size_t(io_type_t::COMPLEX_FLOAT64)] = sizeof(std::complex); + table[size_t(io_type_t::COMPLEX_FLOAT32)] = sizeof(std::complex); + table[size_t(io_type_t::COMPLEX_INT16)] = sizeof(std::complex); + table[size_t(io_type_t::COMPLEX_INT8)] = sizeof(std::complex); + return table; +} + static size_t tid_to_size(io_type_t::tid_t tid){ - switch(tid){ - case io_type_t::COMPLEX_FLOAT64: return sizeof(std::complex); - case io_type_t::COMPLEX_FLOAT32: return sizeof(std::complex); - case io_type_t::COMPLEX_INT16: return sizeof(std::complex); - case io_type_t::COMPLEX_INT8: return sizeof(std::complex); - default: throw std::runtime_error("unknown io type tid"); - } + static const std::vector size_table(get_tid_size_table()); + return size_table[size_t(tid) & 0x7f]; } io_type_t::io_type_t(tid_t tid) -- cgit v1.2.3