- 博客(10)
- 收藏
- 关注
原创 L1 Cache其实挺快的
都减去300之后,1300/2000,这就尴尬了,还是老老实实push/pop吧。然后看一下pinsrd/pextrd 4个寄存器的的时间: 2300K左右。然后看一下push/pop 4个寄存器的的时间: 1600K左右。先空跑一趟,记录一下循环的开销。
2023-04-23 15:31:19
112
原创 设备通讯中,有时会遇到大小端的问题,需要“交换字节序“
原代码:int k = 0;for(k = 0;k+=2)优化1://要留下\0的位置k++)pdst[k] =ntohs(psrc[k]);//\0结尾,防止访问时越界优化2:优化2:.align 64# 要求: AVX2# dst,src: 不要求地址32字节对齐, 但是要求大小是32字节的整数倍# srcc:src有效数据的长度, 可以不是32字节的整数倍.align 64ret# 要求: AVX512VL + AVX512BW。
2023-04-23 15:26:49
283
原创 SIMD CRC16 AVX512
之前写了个pshufb + pdep版本的, 速度就快了2,3倍, 最近学习了AVX512, 就拿AVX512写了下, 果然是AVX512啊, 快了近百倍:.codeadd rcx, 8add rcx, 8add rcx, 8add rcx, 8add rcx, 8add rcx, 8add rcx, 8retendint i;for (i = 0;i < 16;i++)int main()count++)i < 32;i++)
2023-04-23 15:05:19
228
原创 极其低效的sprintf
/循环sprintf, 首先不说这个方法是错误的方法, 就是它的效率, 就是所有方法中最慢的, 超级慢的那种(好像GCC12之后对它有所优化)//循环sprintf, 首先不说这个方法是错误的方法, 就是它的效率, 就是所有方法中最慢的, 超级慢的那种(好像GCC12之后对它有所优化)项目中遇到个需求, 要把TCP接收到的数据写到日志中, 直接二进制写的话, 不好查看, 就需要把二进制数据以16进制字符串的方式写到日志中.andq rdx, 0x0f #最后的零头数量在rdx中,最后用换码法进行转换。
2023-04-23 14:53:01
1594
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人