Я новичок в языке D и мне нужно измерить время выполнения алгоритма. Какие у меня варианты? Есть ли уже встроенное решение? Я не мог найти ничего убедительного в Интернете.
Измерение времени выполнения на языке D
Ответ 1
Один из способов - использовать параметр командной строки -profile
. После запуска программы он создаст файл trace.log, где вы можете найти время выполнения для каждой функции. Это, конечно, замедлит вашу программу, поскольку компилятор будет вставлять код подсчета времени в каждую вашу функцию. Этот метод используется для определения относительной скорости функций, для определения того, что вы должны оптимизировать для повышения скорости приложения с минимальными усилиями.
Вторым вариантом является использование std.datetime. StopWatch. См. Пример в ссылке.
Или даже лучше подходит для прямого использования std.datetime. benchmark.
Не забывайте:
- Когда бенчмаркинг использует эти флаги компилятора dmd для достижения максимальной оптимизации
-release -O -inline -noboundscheck
. - Никогда не тестируйте сборки отладки.
- Удостоверьтесь, что вы не вызываете какой-либо код библиотеки внутри контрольных функций. Вы бы сравнивали производительность библиотеки, а не свой собственный код.
Кроме того, вы можете использовать LDC или GDC. Оба они обеспечивают лучшую оптимизацию/скорость запуска приложения, чем DMD.
Ответ 2
Если ваш алгоритм можно вызвать из командной строки, там найдется полезная утилита, написанная в D, которая будет запускать вашу программу на некоторое время и распечатать распределение среднего времени и всех других полезных номеров.
Он называется avgtime, и он здесь: https://github.com/jmcabo/avgtime
Ответ 3
std.benchmark находится в очереди просмотра.