Измерение времени выполнения на языке 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 находится в очереди просмотра.