Agora  1.2.0
Agora project
datatype_conversion.h File Reference
#include <emmintrin.h>
#include <immintrin.h>
#include <bitset>
#include "utils.h"
Include dependency graph for datatype_conversion.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

static void ConvertShortToFloat (const short *in_buf, float *out_buf, size_t n_elems)
 Produces outputs -1->+0.999. More...
 
static void SimdConvertShortToFloatAVX512 (const short *in_buf, float *out_buf, size_t n_elems)
 
static void SimdConvertShortToFloatAVX2 (const short *in_buf, float *out_buf, size_t n_elems)
 
static void SimdConvertShortToFloat (const short *in_buf, float *out_buf, size_t n_elems)
 
static void SimdConvertFloatToShortAVX512 (const float *in_buf, short *out_buf, size_t n_elems, size_t n_prefix, float scale_down_factor)
 
static void SimdConvertFloatToShortAVX2 (const float *in_buf, short *out_buf, size_t n_elems, size_t n_prefix, float scale_down_factor)
 
static void ConvertFloatToShort (const float *in_buf, short *out_buf, size_t n_elems, size_t n_prefix=0, float scale_down_factor=1.0f)
 
static void SimdConvertFloatToShort (const float *in_buf, short *out_buf, size_t n_elems, size_t n_prefix=0, float scale_down_factor=1.0f)
 
static void SimdConvertCxFloatToCxShort (const std::complex< float > *in_buf, std::complex< short > *out_buf, size_t n_elems, size_t n_prefix, float scale_down_factor)
 
static void ConvertFloatTo12bitIq (const float *in_buf, uint8_t *out_buf, size_t n_elems)
 
static void Convert12bitIqTo16bitIq (uint8_t *in_buf, uint16_t *out_buf, size_t n_elems)
 
static void SimdConvert12bitIqToFloat (const uint8_t *in_buf, float *out_buf, const uint16_t *in_16bits_buf, size_t n_elems)
 
static void SimdConvertFloat16ToFloat32 (float *out_buf, const float *in_buf, size_t n_elems)
 
static void SimdConvertFloat32ToFloat16 (float *out_buf, const float *in_buf, size_t n_elems)
 

Variables

static constexpr float kShrtFltConvFactor = 32768.0f
 
constexpr size_t kAvx2Bits = 256
 
constexpr size_t kAvx2Bytes = kAvx2Bits / 8
 
constexpr size_t kAvx2FloatsPerInstr = kAvx2Bytes / sizeof(float)
 
constexpr size_t kAvx2FloatsPerLoop = kAvx2FloatsPerInstr * 2
 
constexpr size_t kAvx2ShortsPerInstr = kAvx2Bytes / sizeof(short)
 
constexpr size_t kAvx2ShortsPerLoop = kAvx2ShortsPerInstr / 2
 

Function Documentation

◆ Convert12bitIqTo16bitIq()

static void Convert12bitIqTo16bitIq ( uint8_t *  in_buf,
uint16_t *  out_buf,
size_t  n_elems 
)
inlinestatic
Here is the call graph for this function:

◆ ConvertFloatTo12bitIq()

static void ConvertFloatTo12bitIq ( const float *  in_buf,
uint8_t *  out_buf,
size_t  n_elems 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ConvertFloatToShort()

static void ConvertFloatToShort ( const float *  in_buf,
short *  out_buf,
size_t  n_elems,
size_t  n_prefix = 0,
float  scale_down_factor = 1.0f 
)
inlinestatic
Here is the caller graph for this function:

◆ ConvertShortToFloat()

static void ConvertShortToFloat ( const short *  in_buf,
float *  out_buf,
size_t  n_elems 
)
inlinestatic

Produces outputs -1->+0.999.

Here is the caller graph for this function:

◆ SimdConvert12bitIqToFloat()

static void SimdConvert12bitIqToFloat ( const uint8_t *  in_buf,
float *  out_buf,
const uint16_t *  in_16bits_buf,
size_t  n_elems 
)
inlinestatic
Here is the caller graph for this function:

◆ SimdConvertCxFloatToCxShort()

static void SimdConvertCxFloatToCxShort ( const std::complex< float > *  in_buf,
std::complex< short > *  out_buf,
size_t  n_elems,
size_t  n_prefix,
float  scale_down_factor 
)
inlinestatic
Here is the call graph for this function:

◆ SimdConvertFloat16ToFloat32()

static void SimdConvertFloat16ToFloat32 ( float *  out_buf,
const float *  in_buf,
size_t  n_elems 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SimdConvertFloat32ToFloat16()

static void SimdConvertFloat32ToFloat16 ( float *  out_buf,
const float *  in_buf,
size_t  n_elems 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SimdConvertFloatToShort()

static void SimdConvertFloatToShort ( const float *  in_buf,
short *  out_buf,
size_t  n_elems,
size_t  n_prefix = 0,
float  scale_down_factor = 1.0f 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SimdConvertFloatToShortAVX2()

static void SimdConvertFloatToShortAVX2 ( const float *  in_buf,
short *  out_buf,
size_t  n_elems,
size_t  n_prefix,
float  scale_down_factor 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SimdConvertFloatToShortAVX512()

static void SimdConvertFloatToShortAVX512 ( const float *  in_buf,
short *  out_buf,
size_t  n_elems,
size_t  n_prefix,
float  scale_down_factor 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SimdConvertShortToFloat()

static void SimdConvertShortToFloat ( const short *  in_buf,
float *  out_buf,
size_t  n_elems 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SimdConvertShortToFloatAVX2()

static void SimdConvertShortToFloatAVX2 ( const short *  in_buf,
float *  out_buf,
size_t  n_elems 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SimdConvertShortToFloatAVX512()

static void SimdConvertShortToFloatAVX512 ( const short *  in_buf,
float *  out_buf,
size_t  n_elems 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ kAvx2Bits

constexpr size_t kAvx2Bits = 256
constexpr

◆ kAvx2Bytes

constexpr size_t kAvx2Bytes = kAvx2Bits / 8
constexpr

◆ kAvx2FloatsPerInstr

constexpr size_t kAvx2FloatsPerInstr = kAvx2Bytes / sizeof(float)
constexpr

◆ kAvx2FloatsPerLoop

constexpr size_t kAvx2FloatsPerLoop = kAvx2FloatsPerInstr * 2
constexpr

◆ kAvx2ShortsPerInstr

constexpr size_t kAvx2ShortsPerInstr = kAvx2Bytes / sizeof(short)
constexpr

◆ kAvx2ShortsPerLoop

constexpr size_t kAvx2ShortsPerLoop = kAvx2ShortsPerInstr / 2
constexpr

◆ kShrtFltConvFactor

constexpr float kShrtFltConvFactor = 32768.0f
staticconstexpr