У меня есть какой-то «основной цикл», использующий перенасыщение. Я хотел бы иметь возможность измерить, сколько времени требуется для рендеринга кадра. Время, используемое для рендеринга кадра, может быть использовано для других вычислений. Использование функции time
неадекватно.
(time (procedure))
Я узнал, что есть функция под названием current-time
. Мне пришлось импортировать какой-то пакет, чтобы получить его.
(define ct (current-time))
Которые определяют ct как объект time
. К сожалению, я не смог найти в схеме арифметических пакетов для дат. Я видел, что в Racket есть что-то под названием current-inexact-milliseconds
, и это именно то, что я ищу, потому что у него есть наносекунды.
Используя объект времени, есть способ преобразовать его в наносекунды, используя
(time->nanoseconds ct)
Это позволяет мне сделать что-то вроде этого
(let ((newTime (current-time)))
(block)
(print (- (time->nanoseconds newTime) (time->nanoseconds oldTime)))
(set! oldTime newTime))
Мне кажется достаточно хорошим, за исключением того, что по некоторым причинам он печатал такие вещи
0
10000
0
0
10000
0
10000
Я делаю рендеринг с помощью opengl, и мне трудно поверить, что какой-то цикл рендеринга занимает 0 наносекунд. И что каждый цикл достаточно стабильен, чтобы всегда занимать одно и то же количество наносекунд.
current-time
имеет гранулярность 10 микросекунд. Возможно, вы захотите измерить больший объем работы, например, 1000 итераций, а затем разделить полученное время на 1000. - person Chris Jester-Young   schedule 17.09.2013