我的第一个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
感谢您的建议。
感谢您的支持。
答案 0 :(得分:1)
没有激活编译器优化的任何性能测试都没有用。您应该添加dmd -release -inline -O -boundscheck=off
。通常,性能测试也使用循环来重复计算。否则您可能会得到不正确的结果。