模式匹配基准测试:编译时查找与D中的运行时查找

时间:2015-08-17 14:51:22

标签: metaprogramming benchmarking d compile-time ctfe

我的第一个D项目需要建议。我已将其上传到: -

https://bitbucket.org/mrjohns/matcher/downloads

IDEA:对3个运行时算法进行基准测试,并将它们与编译时变量进行比较。它们之间的唯一区别是,对于编译时间1,查找表(即数组bmBc,bmGs和后缀)必须在编译时计算(我目前依赖于CTFE)。而对于运行时 - 查找表是在运行时计算的。

注意:模式匹配算法本身不需要在编译时执行,只需要在查找表中执行。有人说,在已知(编译时计算)表上运行的算法必须比必须计算的算法快。他们在运行时。

我的结果似乎显示出不同的东西,只有第一对( BM_Runtime和BM_Compile-time)产生可接受的结果,另外两对为编译时变体提供更高的执行时间。我想在这里遗漏了一些东西。请帮忙。

模式的当前结果=“GCAGAGAG”如下: -

**BM_Runtime**          = 366 hnsecs     position=   513

**BM_Compile-time**     = 294 hnsecs     position   =513

**BMH_Runtime**         = 174 hnsecs     position=   513

**BMH_Compile-time**    = 261 hnsecs     position=   513

**AG_Run-time**         = 258 hnsecs    position=   513

**AG_Compile-time**     = 268 hnsecs    position=   513

运行代码:dmd -J。 matcher.d inputs.d rtime_pre.d ctime_pre.d&& numactl --physcpubind = 0 ./matcher

感谢您的建议。

感谢您的支持。

1 个答案:

答案 0 :(得分:1)

没有激活编译器优化的任何性能测试都没有用。您应该添加dmd -release -inline -O -boundscheck=off。通常,性能测试也使用循环来重复计算。否则您可能会得到不正确的结果。