Гарантии производительности для вызова now() стандартных хронометров?

Существуют ли какие-либо гарантии производительности в стандарте, необходимые для реализации статических функций now() каждых часов в std::chrono?

В n3337 я прочитал это ( 20.11.3 Требования к часам [time.clock.req] ):

3 [Примечание: Относительная разница в длительности между теми, которые сообщают данные часы, и определением SI является мерой качества реализации. — примечание в конце]

Означает ли это, что он полностью зависит от реализации? Или я что-то пропустил?


person Klaim    schedule 13.09.2012    source источник
comment
Это не ответ на ваш вопрос, но вас могут заинтересовать часы, показанные в обновлении этого ответа: stackoverflow.com/ a/5524138/576911, который использует инструкцию сборки rdtsc для x86.   -  person Howard Hinnant    schedule 13.09.2012
comment
@HowardHinnant Не портативная, но интересная и ценная информация! Спасибо! :)   -  person Klaim    schedule 13.09.2012
comment
@HowardHinnant: Вы, вероятно, не хотите использовать RdTsc для чего-либо, что зависит от времени. MSDN перечисляет множество причин, включая эту: Многопроцессорные и двухъядерные системы не гарантируют синхронизацию своих счетчиков циклов между ядрами. [...] Это обычно приводит к сбоям или потенциальным сбоям, поскольку поток переключается между процессорами и получает значения времени, которые приводят к большим дельтам, отрицательным дельтам или остановке времени.   -  person user541686    schedule 14.09.2012
comment
Да, стандарт C++ не гарантирует, насколько быстро драйвер устройства передаст показания часов вашему приложению.   -  person Hans Passant    schedule 14.09.2012
comment
@HansPassant Стандарт мог бы гарантировать, что в худшем случае код библиотеки выполнит некоторую работу, чтобы предоставить значение с определенной минимальной сложностью. Верно? Или в данном случае это невозможно?   -  person Klaim    schedule 14.09.2012
comment
@Klaim: Что ты имеешь в виду? Такой вызов функции считается одной операцией, O(1).   -  person GManNickG    schedule 29.09.2012
comment
@GManNickG Это указано где-то в стандарте?   -  person Klaim    schedule 29.09.2012
comment
@Klaim: Не то, чтобы я знал об этом, это довольно неявно везде, и причина практична: мы даем операции над такими вещами, как требования сложности std::set, потому что, как ученые-компьютерщики, мы знаем, что операции могут быть реализованы как любой из множества алгоритмов, и мы хотят дать гарантии относительно общего курса действий. Получение временной метки, скорее всего, представляет собой простую серию шагов: никаких фундаментальных циклов, никаких фундаментальных ветвей. Может ли он иметь петли и ответвления? Конечно, но в отличие от сортировки диапазона, для такой операции нет стандартной сложности, поэтому мы говорим, делайте все, что вам нужно.   -  person GManNickG    schedule 29.09.2012
comment
@GManNickG Я думаю, это начало ответа, который вы могли бы дать? Это не точные требования (например, если это разрешено быть очень медленным), но это начало. То, что я спросил, было просто, есть ли официальные требования.   -  person Klaim    schedule 29.09.2012
comment
@Klaim: Эх, я не нахожу это достаточно фактическим, чтобы стать ответом, я просто рассуждаю, почему для таких операций не дается никаких требований о времени. Я думаю, что существующий ответ такой же, просто проголосуйте за мой комментарий, и это должно сделать это относительно объясненным.   -  person GManNickG    schedule 29.09.2012


Ответы (1)


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

Я полагаю, что почти любая реализация будет предлагать практически лучшую скорость и точность, доступные на оборудовании. С другой стороны, разрешение, по-видимому, различается в зависимости от реализации: некоторые обеспечивают наносекунды, а другие обеспечивают значительно более низкое разрешение.

person bames53    schedule 13.09.2012