mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-30 19:04:51 +00:00
Add AVX2
This commit is contained in:
parent
6d216fa5a1
commit
eecfa6c582
@ -60,35 +60,35 @@
|
|||||||
#include <volk_gnsssdr/volk_gnsssdr_complex.h>
|
#include <volk_gnsssdr/volk_gnsssdr_complex.h>
|
||||||
|
|
||||||
|
|
||||||
//#ifdef LV_HAVE_AVX2
|
#ifdef LV_HAVE_AVX2
|
||||||
//#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
//
|
|
||||||
//static inline void volk_gnsssdr_16ic_conjugate_16ic_u_avx2(lv_16sc_t* cVector, const lv_16sc_t* aVector, unsigned int num_points)
|
static inline void volk_gnsssdr_16ic_conjugate_16ic_u_avx2(lv_16sc_t* cVector, const lv_16sc_t* aVector, unsigned int num_points)
|
||||||
//{
|
{
|
||||||
// const unsigned int avx2_iters = num_points / 16;
|
const unsigned int avx2_iters = num_points / 8;
|
||||||
// unsigned int i;
|
unsigned int i;
|
||||||
// lv_16sc_t* c = cVector;
|
lv_16sc_t* c = cVector;
|
||||||
// const lv_16sc_t* a = aVector;
|
const lv_16sc_t* a = aVector;
|
||||||
//
|
|
||||||
// __m256i tmp;
|
__m256i tmp;
|
||||||
// __m256i conjugator = _mm256_setr_epi8(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1);
|
__m256i conjugator = _mm256_setr_epi16(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1);
|
||||||
//
|
|
||||||
// for (i = 0; i < avx2_iters; ++i)
|
for (i = 0; i < avx2_iters; ++i)
|
||||||
// {
|
{
|
||||||
// tmp = _mm256_loadu_si256((__m256i*)a);
|
tmp = _mm256_loadu_si256((__m256i*)a);
|
||||||
// tmp = _mm256_sign_epi8(tmp, conjugator);
|
tmp = _mm256_sign_epi16(tmp, conjugator);
|
||||||
// _mm256_storeu_si256((__m256i*)c, tmp);
|
_mm256_storeu_si256((__m256i*)c, tmp);
|
||||||
//
|
|
||||||
// a += 16;
|
a += 8;
|
||||||
// c += 16;
|
c += 8;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// for (i = avx2_iters * 16; i < num_points; ++i)
|
for (i = avx2_iters * 8; i < num_points; ++i)
|
||||||
// {
|
{
|
||||||
// *c++ = lv_conj(*a++);
|
*c++ = lv_conj(*a++);
|
||||||
// }
|
}
|
||||||
//}
|
}
|
||||||
//#endif /* LV_HAVE_AVX2 */
|
#endif /* LV_HAVE_AVX2 */
|
||||||
|
|
||||||
|
|
||||||
//#ifdef LV_HAVE_AVX
|
//#ifdef LV_HAVE_AVX
|
||||||
@ -249,35 +249,36 @@ static inline void volk_gnsssdr_16ic_conjugate_16ic_generic(lv_16sc_t* cVector,
|
|||||||
//#endif /* LV_HAVE_AVX */
|
//#endif /* LV_HAVE_AVX */
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//#ifdef LV_HAVE_AVX2
|
#ifdef LV_HAVE_AVX2
|
||||||
//#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
//
|
|
||||||
//static inline void volk_gnsssdr_16ic_conjugate_16ic_a_avx2(lv_16sc_t* cVector, const lv_16sc_t* aVector, unsigned int num_points)
|
static inline void volk_gnsssdr_16ic_conjugate_16ic_a_avx2(lv_16sc_t* cVector, const lv_16sc_t* aVector, unsigned int num_points)
|
||||||
//{
|
{
|
||||||
// const unsigned int avx2_iters = num_points / 16;
|
const unsigned int avx2_iters = num_points / 8;
|
||||||
// unsigned int i;
|
unsigned int i;
|
||||||
// lv_16sc_t* c = cVector;
|
lv_16sc_t* c = cVector;
|
||||||
// const lv_16sc_t* a = aVector;
|
const lv_16sc_t* a = aVector;
|
||||||
//
|
|
||||||
// __m256i tmp;
|
__m256i tmp;
|
||||||
// __m256i conjugator = _mm256_setr_epi8(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1);
|
__m256i conjugator = _mm256_setr_epi16(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1);
|
||||||
//
|
|
||||||
// for (i = 0; i < avx2_iters; ++i)
|
for (i = 0; i < avx2_iters; ++i)
|
||||||
// {
|
{
|
||||||
// tmp = _mm256_load_si256((__m256i*)a);
|
tmp = _mm256_load_si256((__m256i*)a);
|
||||||
// tmp = _mm256_sign_epi8(tmp, conjugator);
|
tmp = _mm256_sign_epi16(tmp, conjugator);
|
||||||
// _mm256_store_si256((__m256i*)c, tmp);
|
_mm256_store_si256((__m256i*)c, tmp);
|
||||||
//
|
|
||||||
// a += 16;
|
a += 8;
|
||||||
// c += 16;
|
c += 8;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// for (i = avx2_iters * 16; i < num_points; ++i)
|
for (i = avx2_iters * 8; i < num_points; ++i)
|
||||||
// {
|
{
|
||||||
// *c++ = lv_conj(*a++);
|
*c++ = lv_conj(*a++);
|
||||||
// }
|
}
|
||||||
//}
|
}
|
||||||
//#endif /* LV_HAVE_AVX2 */
|
|
||||||
|
#endif /* LV_HAVE_AVX2 */
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
#ifdef LV_HAVE_SSSE3
|
#ifdef LV_HAVE_SSSE3
|
||||||
|
Loading…
Reference in New Issue
Block a user