#simd #file-format #maths #galois #matrix #ida

bin+lib guff-sharefiles

使用便携式文件格式打包 IDA 编码的数据

4 个版本

0.1.11 2021 年 7 月 29 日
0.1.10 2021 年 7 月 23 日
0.1.9 2021 年 7 月 21 日
0.1.8 2021 年 7 月 21 日
0.1.2 2021 年 7 月 21 日

#5#ida

GPL-2.0-or-later OR LGPL-2.0-or-later

20KB
262

guff-sharefiles

使用便携式文件格式打包 IDA 编码的数据

第一个版本没有实现 sharefile 格式,但它足以生成一些基准。

创建一个 16 MBytes + 8 字节的文件。

$ dd if=/dev/urandom bs=1024 count=16384 of=16m
$ echo "\0\0\0\0\0\0\0\0" >> 16m

然后启用所有优化构建项目

$ RUSTFLAGS="-O -C target-cpu=native -C target-feature=+ssse3,+sse4.1,+sse4.2,+avx" cargo build

然后可以将此程序与我的原始 Perl 实现中的 rabin-split.pl 脚本进行比较

$ time rabin-split.pl  -k 8 -n 16 -w 1 16m     # Perl/C
$ time ./target/debug/ida-split 16m            # rust simd mul
$ time ./target/debug/ida-split -r 16m         # rust reference mul

结果

| rabin-split.pl | rust simd | rust reference | |real 0m0.935s | real 0m1.456s | real 0m1.687s | |user 0m0.874s | user 0m1.220s | user 0m1.596s | |sys 0m0.060s | sys 0m0.069s | sys 0m0.056s |

总体而言,速度仅为原始版本的约 65%,尽管它的开销更小(不写入文件头,不乘以文件块)并且应该有一个更快的乘法内核。

但作为一个起点还不错...

依赖项

~1.5MB
~20K SLoC