Являются ли вызовы с высоким разрешением ошибочными для системного времени к моменту возврата функции? - PullRequest
4 голосов
/ 16 апреля 2009

Учитывая процесс C, который выполняется с наивысшим приоритетом и запрашивает текущее время, корректируется ли возвращаемое время на количество времени, необходимое для возврата кода в пространство пользовательских процессов? Это устарело, когда вы его получили? В качестве измерения, измеряющего время выполнения известного числа инструкций по сборке в цикле и запрашивающего время до и после него, можно получить приблизительное значение ошибки. Я знаю, что это должно быть проблемой в научных приложениях? Я не планирую писать программное обеспечение с участием супер-коллайдеров в ближайшее время. Я прочитал несколько статей на эту тему, но они не указывают на то, что сделано какое-то исправление, чтобы отведенное вам время немного опережало время, которое читала система. Должен ли я терять сон из-за других вещей?

Ответы [ 4 ]

6 голосов
/ 16 апреля 2009

Да, они почти наверняка "не правы".

Для Windows функции синхронизации не учитывают время, необходимое для перехода обратно в режим пользователя. Даже если это было учтено, невозможно исправить, если функция вернется, и ваш код попадет на страницу с ошибкой / будет выгружен / и т. Д. До захвата возвращаемого значения.

В общем, при определении времени вы должны привязать время начала и окончания к большому количеству итераций, чтобы отсеять подобные неопределенности.

3 голосов
/ 16 апреля 2009

Нет, вы не должны терять сон из-за этого. Никакие настройки или другие хитрости программного обеспечения не дадут отличных результатов в системе с конвейерным процессором с многоуровневым доступом к памяти, работающей под управлением многозадачной операционной системы с управлением памятью, устройствами, обработчиками прерываний ... Даже если ваш процесс имеет самый высокий приоритет.

Плюс, если взять разницу двух таких времен, то все равно будут отменены постоянные издержки.

Редактировать: я имею в виду да , вы должны потерять сон из-за других вещей:).

3 голосов
/ 16 апреля 2009

Да, вы получите ответ на определенную (небольшую) сумму; Я никогда не слышал о функции таймера, компенсирующей среднее время возврата, потому что такую ​​вещь почти невозможно предсказать. Такие вещи обычно реализуются простым считыванием регистра в аппаратном обеспечении и возвращением значения или его версии, масштабированной до соответствующего временного диапазона.

Тем не менее, я не потерял бы сон из-за этого. Принятый способ не допустить влияния этих издержек на ваши измерения каким-либо существенным образом - не использовать эти таймеры для коротких событий Обычно вы рассчитываете несколько сотен, тысяч или миллионов выполнений одной и той же вещи и делитесь на количество выполнений, чтобы оценить среднее время. Такая вещь обычно более полезна, чем синхронизация одного экземпляра, так как она учитывает среднее поведение кэша, эффекты ОС и т. Д.

1 голос
/ 16 апреля 2009

Большинство реальных проблем, связанных с таймерами высокого разрешения, используются для профилирования, при котором время считывается один раз во время START и еще раз во время FINISH. Таким образом, в большинстве случаев почти одинаковая задержка задействована в START и FINISH . И, следовательно, он отлично работает.

Теперь, для ядерных реакторов, WINDOWS или для многих других операционных систем с общими функциями может не подойти. Я предполагаю, что они используют РЕАЛЬНОЕ ВРЕМЯ операционных систем, которые могут дать более точные значения времени, чем настольные операционные системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...