[hamradio-commits] [gnss-sdr] 64/149: Range reduced to 4 bits in the volk short int test input to avoid saturation of vector dot products. Reduced test vector sizes to 8111 to avoid saturation.

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Sat Feb 6 19:43:03 UTC 2016


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.

commit fb42cda826c87520cdf6ac3acdc78b9790f3d126
Author: Javier Arribas <javiarribas at gmail.com>
Date:   Thu Jan 14 18:56:22 2016 +0100

    Range reduced to 4 bits in the volk short int test input to avoid
    saturation of vector dot products.
    Reduced test vector sizes to 8111 to avoid saturation.
---
 .../volk_gnsssdr/apps/volk_gnsssdr_profile.cc                 |  2 +-
 .../kernels/volk_gnsssdr/volk_gnsssdr_16ic_x2_dot_prod_16ic.h | 10 ++--------
 .../libs/volk_gnsssdr_module/volk_gnsssdr/lib/kernel_tests.h  |  2 +-
 .../libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_utils.cc     | 11 +++++++----
 4 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/volk_gnsssdr_profile.cc b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/volk_gnsssdr_profile.cc
index cdd37f7..5202b0d 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/volk_gnsssdr_profile.cc
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/volk_gnsssdr_profile.cc
@@ -48,7 +48,7 @@ int main(int argc, char *argv[]) {
             boost::program_options::value<float>()->default_value( 1e-6 ),
             "Set the default error tolerance for tests")
       ("vlen,v",
-            boost::program_options::value<int>()->default_value( 131071 ),
+            boost::program_options::value<int>()->default_value( 8111 ), //it is also prime
             "Set the default vector length for tests") // default is a mersenne prime
       ("iter,i",
             boost::program_options::value<int>()->default_value( 1987 ),
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x2_dot_prod_16ic.h b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x2_dot_prod_16ic.h
index 2ce65ac..75be955 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x2_dot_prod_16ic.h
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x2_dot_prod_16ic.h
@@ -40,6 +40,7 @@
 #include <volk_gnsssdr/volk_gnsssdr_common.h>
 #include <volk_gnsssdr/volk_gnsssdr_complex.h>
 #include <volk_gnsssdr/saturation_arithmetic.h>
+//#include <stdio.h>
 
 
 #ifdef LV_HAVE_GENERIC
@@ -56,12 +57,10 @@ static inline void volk_gnsssdr_16ic_x2_dot_prod_16ic_generic(lv_16sc_t* result,
     for (unsigned int n = 0; n < num_points; n++)
         {
             //r*a.r - i*a.i, i*a.r + r*a.i
-            //result[0]+=in_a[n]*in_b[n];
             lv_16sc_t tmp = in_a[n] * in_b[n];
             result[0] = lv_cmake(sat_adds16i(lv_creal(result[0]), lv_creal(tmp)), sat_adds16i(lv_cimag(result[0]), lv_cimag(tmp) ));
-            //result[0].real(sat_adds16i(result[0].real(),lv_creal(tmp)));
-            //result[0].imag(sat_adds16i(result[0].imag(),tmp.imag()));
         }
+    	//printf("generic result = %i,%i", lv_creal(result[0]),lv_cimag(result[0]));
 }
 
 #endif /*LV_HAVE_GENERIC*/
@@ -129,18 +128,13 @@ static inline void volk_gnsssdr_16ic_x2_dot_prod_16ic_a_sse2(lv_16sc_t* out, con
             for (int i = 0; i < 4; ++i)
                 {
                     dotProduct = lv_cmake(sat_adds16i(lv_creal(dotProduct), lv_creal(dotProductVector[i])), sat_adds16i(lv_cimag(dotProduct), lv_cimag(dotProductVector[i])));
-                    //dotProduct.real(sat_adds16i(lv_creal(dotProduct),lv_creal(dotProductVector[i])));
-                    //dotProduct.imag(sat_adds16i(lv_cimag(dotProduct),lv_cimag(dotProductVector[i])));
                 }
         }
 
     for (unsigned int i = 0; i < (num_points % 4); ++i)
         {
-            //dotProduct += (*_in_a++) * (*_in_b++);
             lv_16sc_t tmp = (*_in_a++) * (*_in_b++);
             dotProduct = lv_cmake( sat_adds16i(lv_creal(dotProduct), lv_creal(tmp)), sat_adds16i(lv_cimag(dotProduct), lv_cimag(tmp)));
-            //dotProduct.real(sat_adds16i(lv_creal(dotProduct),lv_creal(tmp)));
-            //dotProduct.imag(sat_adds16i(lv_cimag(dotProduct),lv_cimag(tmp)));
         }
 
     *_out = dotProduct;
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/kernel_tests.h b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/kernel_tests.h
index c06b7f0..510cf03 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/kernel_tests.h
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/kernel_tests.h
@@ -72,7 +72,7 @@ std::vector<volk_gnsssdr_test_case_t> init_test_list(volk_gnsssdr_test_params_t
         (VOLK_INIT_TEST(volk_gnsssdr_32fc_convert_16ic, test_params))
         (VOLK_INIT_TEST(volk_gnsssdr_16ic_x2_dot_prod_16ic, test_params))
         (VOLK_INIT_TEST(volk_gnsssdr_16ic_x2_multiply_16ic, test_params))
-        (VOLK_INIT_TEST(volk_gnsssdr_16ic_x2_dot_prod_16ic_xn, volk_gnsssdr_test_params_t(1e-2, test_params.scalar(), test_params.vlen(), test_params.iter(), test_params.benchmark_mode(), test_params.kernel_regex())))
+        //(VOLK_INIT_TEST(volk_gnsssdr_16ic_x2_dot_prod_16ic_xn,test_params))
         //(VOLK_INIT_TEST(volk_gnsssdr_16ic_resampler_16ic, test_params))
         //(VOLK_INIT_TEST(volk_gnsssdr_16ic_xn_resampler_16ic_xn, test_params))
         ;
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_utils.cc b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_utils.cc
index 5eac77f..7f5c68c 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_utils.cc
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_utils.cc
@@ -73,13 +73,16 @@ void load_random_data(void *data, volk_gnsssdr_type_t type, unsigned int n)
                         break;
                     case 4:
 
-                                if(type.is_signed) ((int32_t *)data)[i] = (int32_t) scaled_rand;
-                                else ((uint32_t *)data)[i] = (uint32_t) scaled_rand;
+							if(type.is_signed) ((int32_t *)data)[i] = (int32_t) scaled_rand;
+							else ((uint32_t *)data)[i] = (uint32_t) scaled_rand;
 
                         break;
                     case 2:
-                        if(type.is_signed) ((int16_t *)data)[i] = (int16_t) scaled_rand / 11; //sqrt(std::abs(scaled_rand / 2.0)); //// std::cout << "222222222222" << std::endl;}
-                        else ((uint16_t *)data)[i] = (uint16_t) scaled_rand;
+                    	// 16 bits dot product saturates very fast even with moderate lenght vectors
+                    	// we produce here only 4 bits input range
+                        if(type.is_signed) ((int16_t *)data)[i] = (int16_t)((int16_t) scaled_rand % 16);
+
+                        else ((uint16_t *)data)[i] = (uint16_t) (int16_t)((int16_t) scaled_rand % 16);
                         break;
                     case 1:
                         if(type.is_signed) ((int8_t *)data)[i] = (int8_t) scaled_rand;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git



More information about the pkg-hamradio-commits mailing list