[hamradio-commits] [gnss-sdr] 58/149: Integrating a new volk kernel

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 ece7bc2c6550bee46aa2baeefaa2dda28155743e
Author: Carles Fernandez <carles.fernandez at gmail.com>
Date:   Wed Jan 13 11:42:01 2016 +0100

    Integrating a new volk kernel
---
 .../volk_gnsssdr_16ic_x2_multiply_16ic.h           | 35 +++++++++++-----------
 .../volk_gnsssdr/lib/kernel_tests.h                |  1 +
 .../tracking/libs/cpu_multicorrelator_16sc.cc      | 28 +++++++----------
 3 files changed, 29 insertions(+), 35 deletions(-)

diff --git a/src/algorithms/tracking/libs/volk_gnsssdr_16ic_x2_multiply_16ic.h b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x2_multiply_16ic.h
similarity index 80%
rename from src/algorithms/tracking/libs/volk_gnsssdr_16ic_x2_multiply_16ic.h
rename to src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x2_multiply_16ic.h
index 8710207..070d507 100644
--- a/src/algorithms/tracking/libs/volk_gnsssdr_16ic_x2_multiply_16ic.h
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x2_multiply_16ic.h
@@ -51,11 +51,11 @@
  */
 static inline void volk_gnsssdr_16ic_x2_multiply_16ic_generic(lv_16sc_t* result, const lv_16sc_t* in_a, const lv_16sc_t* in_b, unsigned int num_points)
 {
-	for (unsigned int n=0;n<num_points;n++)
-	{
-		//r*a.r - i*a.i, i*a.r + r*a.i
-		result[n]=in_a[n]*in_b[n];
-	}
+    for (unsigned int n = 0; n < num_points; n++)
+        {
+            //r*a.r - i*a.i, i*a.r + r*a.i
+            result[n] = in_a[n] * in_b[n];
+        }
 }
 
 #endif /*LV_HAVE_GENERIC*/
@@ -74,27 +74,27 @@ static inline void volk_gnsssdr_16ic_x2_multiply_16ic_a_sse2(lv_16sc_t* out, con
     const lv_16sc_t* _in_a = in_a;
     const lv_16sc_t* _in_b = in_b;
     lv_16sc_t* _out = out;
-    for(unsigned int number = 0;number < sse_iters; number++)
+    for(unsigned int number = 0; number < sse_iters; number++)
         {
 
-    	//std::complex<T> memory structure: real part -> reinterpret_cast<cv T*>(a)[2*i]
-    	//imaginery part -> reinterpret_cast<cv T*>(a)[2*i + 1]
-    	// a[127:0]=[a3.i,a3.r,a2.i,a2.r,a1.i,a1.r,a0.i,a0.r]
+            //std::complex<T> memory structure: real part -> reinterpret_cast<cv T*>(a)[2*i]
+            //imaginery part -> reinterpret_cast<cv T*>(a)[2*i + 1]
+            // a[127:0]=[a3.i,a3.r,a2.i,a2.r,a1.i,a1.r,a0.i,a0.r]
             a = _mm_loadu_si128((__m128i*)_in_a); //load (2 byte imag, 2 byte real) x 4 into 128 bits reg
             b = _mm_loadu_si128((__m128i*)_in_b);
-            c=_mm_mullo_epi16 (a, b); // a3.i*b3.i, a3.r*b3.r, ....
+            c = _mm_mullo_epi16 (a, b); // a3.i*b3.i, a3.r*b3.r, ....
 
             c_sr = _mm_srli_si128 (c, 2); // Shift a right by imm8 bytes while shifting in zeros, and store the results in dst.
-            real = _mm_subs_epi16 (c,c_sr);
+            real = _mm_subs_epi16 (c, c_sr);
             real = _mm_and_si128 (real, mask_real); // a3.r*b3.r-a3.i*b3.i , 0,  a3.r*b3.r- a3.i*b3.i
 
-            b_sl = _mm_slli_si128(b,2); // b3.r, b2.i ....
-            a_sl = _mm_slli_si128(a,2); // a3.r, a2.i ....
+            b_sl = _mm_slli_si128(b, 2); // b3.r, b2.i ....
+            a_sl = _mm_slli_si128(a, 2); // a3.r, a2.i ....
 
-            imag1 = _mm_mullo_epi16(a,b_sl); // a3.i*b3.r, ....
-            imag2 = _mm_mullo_epi16(b,a_sl); // b3.i*a3.r, ....
+            imag1 = _mm_mullo_epi16(a, b_sl); // a3.i*b3.r, ....
+            imag2 = _mm_mullo_epi16(b, a_sl); // b3.i*a3.r, ....
 
-            imag = _mm_adds_epi16(imag1,imag2);
+            imag = _mm_adds_epi16(imag1, imag2);
             imag = _mm_and_si128 (imag, mask_imag); // a3.i*b3.r+b3.i*a3.r, 0, ...
 
             result = _mm_or_si128 (real, imag);
@@ -104,10 +104,9 @@ static inline void volk_gnsssdr_16ic_x2_multiply_16ic_a_sse2(lv_16sc_t* out, con
             _in_a += 4;
             _in_b += 4;
             _out += 4;
-
         }
 
-    for (unsigned int i = 0; i<(num_points % 4); ++i)
+    for (unsigned int i = 0; i < (num_points % 4); ++i)
         {
             *_out++ = (*_in_a++) * (*_in_b++);
         }
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 1df4c90..298d45c 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
@@ -80,6 +80,7 @@ std::vector<volk_gnsssdr_test_case_t> init_test_list(volk_gnsssdr_test_params_t
         (VOLK_INIT_TEST(volk_gnsssdr_32fc_convert_8ic, test_params))
         (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_resampler_16ic, test_params))
         ;
 
diff --git a/src/algorithms/tracking/libs/cpu_multicorrelator_16sc.cc b/src/algorithms/tracking/libs/cpu_multicorrelator_16sc.cc
index e1cb2c2..b0f8f74 100644
--- a/src/algorithms/tracking/libs/cpu_multicorrelator_16sc.cc
+++ b/src/algorithms/tracking/libs/cpu_multicorrelator_16sc.cc
@@ -41,19 +41,14 @@
 #define LV_HAVE_GENERIC
 #define LV_HAVE_SSE2
 
-//#include "volk_gnsssdr_16ic_x2_dot_prod_16ic.h"
-#include "volk_gnsssdr_16ic_x2_multiply_16ic.h"
-//#include "volk_gnsssdr_16ic_resampler_16ic.h"
 #include "volk_gnsssdr_16ic_xn_resampler_16ic_xn.h"
 #include "volk_gnsssdr_16ic_xn_dot_prod_16ic_xn.h"
 
 bool cpu_multicorrelator_16sc::init(
-		int max_signal_length_samples,
-		int n_correlators
-		)
+        int max_signal_length_samples,
+        int n_correlators)
 {
-
-	// ALLOCATE MEMORY FOR INTERNAL vectors
+    // ALLOCATE MEMORY FOR INTERNAL vectors
     size_t size = max_signal_length_samples * sizeof(lv_16sc_t);
 
     // NCO signal
@@ -76,8 +71,7 @@ bool cpu_multicorrelator_16sc::init(
 bool cpu_multicorrelator_16sc::set_local_code_and_taps(
 		int code_length_chips,
 		const lv_16sc_t* local_code_in,
-		float *shifts_chips
-		)
+		float *shifts_chips)
 {
     d_local_code_in = local_code_in;
     d_shifts_chips = shifts_chips;
@@ -98,12 +92,11 @@ bool cpu_multicorrelator_16sc::set_input_output_vectors(lv_16sc_t* corr_out, con
 
 void cpu_multicorrelator_16sc::update_local_code(int correlator_length_samples,float rem_code_phase_chips, float code_phase_step_chips)
 {
-
 	float *tmp_code_phases_chips;
-	tmp_code_phases_chips=static_cast<float*>(volk_malloc(d_n_correlators*sizeof(float), volk_get_alignment()));
-	for (int n=0;n<d_n_correlators;n++)
+	tmp_code_phases_chips = static_cast<float*>(volk_malloc(d_n_correlators*sizeof(float), volk_get_alignment()));
+	for (int n = 0; n < d_n_correlators; n++)
 	{
-		tmp_code_phases_chips[n]=d_shifts_chips[n]-rem_code_phase_chips;
+		tmp_code_phases_chips[n] = d_shifts_chips[n] - rem_code_phase_chips;
 	}
 
 	volk_gnsssdr_16ic_xn_resampler_16ic_xn_sse2(d_local_codes_resampled,
@@ -155,11 +148,12 @@ bool cpu_multicorrelator_16sc::Carrier_wipeoff_multicorrelator_resampler(
     update_local_carrier(signal_length_samples, rem_carrier_phase_in_rad, phase_step_rad);
 
     //std::cout<<"d_nco_in 16sc="<<d_nco_in[23]<<std::endl;
-    volk_gnsssdr_16ic_x2_multiply_16ic_a_sse2(d_sig_doppler_wiped,d_sig_in,d_nco_in,signal_length_samples);
+    //volk_gnsssdr_16ic_x2_multiply_16ic_a_sse2(d_sig_doppler_wiped,d_sig_in,d_nco_in,signal_length_samples);
+    volk_gnsssdr_16ic_x2_multiply_16ic(d_sig_doppler_wiped, d_sig_in, d_nco_in, signal_length_samples);
     //std::cout<<"d_sig_doppler_wiped 16sc="<<d_sig_doppler_wiped[23]<<std::endl;
-	update_local_code(signal_length_samples,rem_code_phase_chips, code_phase_step_chips);
+    update_local_code(signal_length_samples, rem_code_phase_chips, code_phase_step_chips);
 
-	volk_gnsssdr_16ic_xn_dot_prod_16ic_xn_a_sse2(d_corr_out, d_sig_doppler_wiped, (const lv_16sc_t**)d_local_codes_resampled,signal_length_samples,d_n_correlators);
+    volk_gnsssdr_16ic_xn_dot_prod_16ic_xn_a_sse2(d_corr_out, d_sig_doppler_wiped, (const lv_16sc_t**)d_local_codes_resampled, signal_length_samples, d_n_correlators);
 
     //for (int current_correlator_tap = 0; current_correlator_tap < d_n_correlators; current_correlator_tap++)
     //    {

-- 
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