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 |
|
#5 在 #ida
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