我想知道是否有机会提高这种压缩的性能.想法是使高于4095的值饱和,并将每12位的每个值放在新的连续缓冲区中.就像那样:
概念:
兑换:
输入缓冲区:[0.0] [0.1] [0.2] ... [0.15] | [1.0] [1.1] [1.2] ...... [1.15] | [2.0] [2.1] [2.2] ...... [2.15]等......
至:
输出缓冲区:[0.0] [0.1] [0.2] ... [0.11] | [1.0] [1.1] [1.2] ...... [1.11] | [2.0] [2.1] [2.2] ...... [2.11]等......
输入和输出缓冲区定义为:
uint16_t input [76800](字节大小等于153600字节)
uint24_t输出[38400](它的字节大小等于115200字节)
所以我将数据大小减少了1/4.这种计算在Cortex-A9上的成本约为1ms,CPU速度为792 MHz,内核为2.我必须执行这样的"压缩",因为我通过以太网传输大约18MB/s,这给了我巨大的开销.我已经测试过各种压缩算法,例如Snappy,LZ4,并且在饱和度和位漂移的情况下,这些算法甚至都达不到1毫秒.
我写了以下代码:
#pragma pack(push, 1)
typedef struct {
union {
struct {
uint32_t value0_24x1:24;
};
struct {
uint32_t value0_12x1:12;
uint32_t value1_12x1:12;
};
struct {
uint32_t value0_8x1:8;
uint32_t value1_8x1:8;
uint32_t value3_8x1:8;
};
};
} uint24_t;
#pragma pack(pop) …Run Code Online (Sandbox Code Playgroud)