Сравнение шаблонов: поиск по времени компиляции и поиск по времени выполнения в D
Мне нужен совет по моему первому D-проекту. Я загрузил его по адресу: -
https://bitbucket.org/mrjohns/matcher/downloads
IDEA: Сравнительный анализ 3 алгоритмов времени выполнения и сравнение их с вариантами времени компиляции. Единственное различие между ними заключается в том, что для времени компиляции таблицы поиска (т. Е. Массивы bmBc, bmGs и суффиксы) должны быть вычислены во время компиляции (в настоящее время я полагаюсь на CTFE) . В то время как для времени выполнения таблицы поиска вычисляются во время выполнения.
NB: Сами алгоритмы сопоставления с образцом не должны выполняться во время компиляции, только таблицы поиска. Об этом говорится, что алгоритмы, которые работают на известных (вычисляемых во время компиляции) таблицах, должны быть быстрее, чем те, которые должны вычислять их во время выполнения,
Мои результаты, кажется, показывают что-то другое, только первая пара ( BM_Runtime и BM_Compile-time) дает допустимые результаты, две другие пары дают более высокое время выполнения для вариантов компиляции. Я думаю, что-то здесь не хватает. Пожалуйста помоги.
Текущие результаты для pattern="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 input.d rtime_pre.d ctime_pre.d && numactl --physcpubind=0 ./matcher
Буду признателен за ваши предложения.
Благодарю вас в аванс.
1 ответ
Любой тест производительности без активации оптимизации компилятора бесполезен. Вы должны добавить dmd -release -inline -O -boundscheck=off
, Также обычно тесты производительности используют циклы для повторения вычислений. В противном случае вы можете получить неправильные результаты.