benchmark
benchmark copied to clipboard
这样测试,真够外行的
这样测试,真够外行的
(非恶意, 主要是看不下去了,所以才回一下,可能语气上有点,,,,见谅啊,写的也有点乱....)
涉及到算法, 用脚本类语言是绝对不准确的
你必须用C或其它原生编译的语言,尽可能以算法本身性质去写程序,比如数据用指针方式,不要让编译器有计数器引用之类,像脚本那样,内部是指针还是整个内存块拷贝,你根本不能确定的,不同版本,不同解析器,不保证的. 内部计数器或其它额外脚本管理内的浪费了多少你也不知道
一般语言,比如delphi/c++的string, c++的大多数类型,都是有内部引用计数器和长度判断值,编译器的"保护"还会检查你每个操作的内存越界之类, 你用这些类型来做算法,是不正确的, 全部要用指针处理, 一些int,char之定长内置类,虽然自释放,但是他都是在函数内部或是传递环节,所以,不需要计数器,编译器在函数结束时,插入释放指令,这种不影响性能 一些数组的访问,是a[i++]法,只加下标,每次大面积寻址,还是xx=a[0];a=a[i+1], 每次移动指针位置,后期读的是0下标的数据, 这样的,在不同架构中,不同cpu,不同内存,不同应用场合,等都不小的差异的 (一般都是内存里操作,所以一般情况下后面移动指针的方法慢,因为指令上多了好几条, 但如果你加了编译参数,比如要求数据放在cpu缓冲里之类,就不一样了,或是有些高并发高异步的场合,可能后面的更好,指令时间上错开一些)
这样写一个标准指令下的性能(一般arm,x86或其它,都支持的指令,比如xor,加减法等) 除非是统计部分,不然算法本身,避免用乘除法, 因为不同的cpu浮点性能或是乘除器数量是有限的 性能也是有限制的,参差不齐,不能确定一个算法,通用CPU情况下的性能 一些嵌入式arm下,,或是有些vps下你只能用普通指令,没办法用加速指令的,或用了,反而慢 按理Blowfish,不用指令优化的情况下,应该比AES要快的
不同算法benchmark的目的就是要估计算法大概性能,选择一个稳妥的, 所以你这方法不适合现实环境的,不能用于增加自己正确经验值的
然后,再用一个CPU特殊指令下,优化的结果, 比如现在intel有avx512之类的, 一些超大整数计算指令会对算法有大帮助 有时能快好几倍的,这样,在项目,选择硬件平台时,有帮助,