X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=fhi_lib%2Flib%2Fapi%2Fxran_compression.hpp;h=01f49c02ced903651c105e1efd5b307f1c89b6c7;hb=70d9d920dd4e575f085f1f1a9050fefd1c10e127;hp=a2ee478b4d7708ed3db54fffb5c059a65e090d58;hpb=cef07f74965b1749dd909fc1322e211489fea2ea;p=o-du%2Fphy.git diff --git a/fhi_lib/lib/api/xran_compression.hpp b/fhi_lib/lib/api/xran_compression.hpp index a2ee478..01f49c0 100644 --- a/fhi_lib/lib/api/xran_compression.hpp +++ b/fhi_lib/lib/api/xran_compression.hpp @@ -18,6 +18,7 @@ #pragma once #include +#include // This configuration file sets global constants and macros which are // of general use throughout the project. @@ -37,7 +38,8 @@ constexpr unsigned k_cacheByteAlignment = 64; // 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 @@ -51,32 +53,65 @@ namespace BlockFloatCompander { /// 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); } +