#pragma once
#include <stdint.h>
+#include <immintrin.h>
// This configuration file sets global constants and macros which are
// of general use throughout the project.
// can be assumed to be aligned to a cache line. This allows the
// compiler to generate improved code by using aligned reads and
// writes.
-#define ASSUME_CACHE_ALIGNED(data) __assume_aligned(data, k_cacheByteAlignment);
+#define ASSUME_CACHE_ALIGNED(data)
+// __assume_aligned(data, k_cacheByteAlignment);
/// Intel compiler frequently complains about templates not being declared in an external
/// header. Templates are used throughout this project's source files to define local type-specific
{
/// Compute 32 RB at a time
static constexpr int k_numBitsIQ = 16;
- static constexpr int k_numRB = 16;
- static constexpr int k_numRE = 12;
- static constexpr int k_numREReal = k_numRE * 2;
- static constexpr int k_numSampsExpanded = k_numRB * k_numREReal;
- static constexpr int k_numSampsCompressed = k_numSampsExpanded + k_numRB;
- static constexpr int k_iqWidth = 8;
-
+ static constexpr int k_numBitsIQPair = 2 * k_numBitsIQ;
+ static constexpr int k_maxNumBlocks = 16;
+ static constexpr int k_maxNumElements = 128;
+ static constexpr int k_numSampsExpanded = k_maxNumBlocks * k_maxNumElements;
+ static constexpr int k_numSampsCompressed = (k_numSampsExpanded * 2) + k_maxNumBlocks;
struct CompressedData
{
/// Compressed data
- CACHE_ALIGNED int8_t dataCompressed[k_numSampsCompressed];
+ CACHE_ALIGNED uint8_t dataCompressedDataOut[k_numSampsCompressed];
+ CACHE_ALIGNED uint8_t *dataCompressed;
+ /// Size of mantissa including sign bit
+ int iqWidth;
+
+ /// Number of BFP blocks in message
+ int numBlocks;
+
+ /// Number of data elements per compression block (only required for reference function)
+ int numDataElements;
};
struct ExpandedData
{
/// Expanded data or input data to compressor
- CACHE_ALIGNED int16_t dataExpanded[k_numSampsExpanded];
+ CACHE_ALIGNED int16_t dataExpandedIn[k_numSampsExpanded];
+ CACHE_ALIGNED int16_t *dataExpanded;
+
+ /// Size of mantissa including sign bit
+ int iqWidth;
+
+ /// Number of BFP blocks in message
+ int numBlocks;
+
+ /// Number of data elements per compression block (only required for reference function)
+ int numDataElements;
};
- void BlockFloatCompress_AVX512(const ExpandedData& dataIn, CompressedData* dataOut);
+ /// Reference compression and expansion functions
+ void BFPCompressRef(const ExpandedData& dataIn, CompressedData* dataOut);
+ void BFPExpandRef(const CompressedData& dataIn, ExpandedData* dataOut);
- void BlockFloatExpand_AVX512(const CompressedData& dataIn, ExpandedData* dataOut);
+ /// User-Plane specific compression and expansion functions
+ void BFPCompressUserPlaneAvx512(const ExpandedData& dataIn, CompressedData* dataOut);
+ void BFPExpandUserPlaneAvx512(const CompressedData& dataIn, ExpandedData* dataOut);
- void BlockFloatCompress_Basic(const ExpandedData& dataIn, CompressedData* dataOut);
+ /// Control-Plane specific compression and expansion functions for 8 antennas
+ void BFPCompressCtrlPlane8Avx512(const ExpandedData& dataIn, CompressedData* dataOut);
+ void BFPExpandCtrlPlane8Avx512(const CompressedData& dataIn, ExpandedData* dataOut);
- void BlockFloatExpand_Basic(const CompressedData& dataIn, ExpandedData* dataOut);
+ /// Control-Plane specific compression and expansion functions for 16 antennas
+ void BFPCompressCtrlPlane16Avx512(const ExpandedData& dataIn, CompressedData* dataOut);
+ void BFPExpandCtrlPlane16Avx512(const CompressedData& dataIn, ExpandedData* dataOut);
+ /// Control-Plane specific compression and expansion functions for 32 antennas
+ void BFPCompressCtrlPlane32Avx512(const ExpandedData& dataIn, CompressedData* dataOut);
+ void BFPExpandCtrlPlane32Avx512(const CompressedData& dataIn, ExpandedData* dataOut);
+
+ /// Control-Plane specific compression and expansion functions for 64 antennas
+ void BFPCompressCtrlPlane64Avx512(const ExpandedData& dataIn, CompressedData* dataOut);
+ void BFPExpandCtrlPlane64Avx512(const CompressedData& dataIn, ExpandedData* dataOut);
}
+