Не существует метода, который бы дал вам какой-либо эквивалент sys или пользовательского времени, как сообщается командой time
, которая будет более точной.Большая часть очевидной точности команды time
является ложной точностью в том виде, в каком она есть.
Техника для обработки этого состоит в том, чтобы поместить эти фрагменты кода в узкие циклы, которые вызывают их тысячи раз, и выяснить, как долгоданный цикл берет из этого.И даже тогда вы должны повторить эксперимент несколько раз и выбрать самое низкое время.
Вот аналогия, описывающая, почему точность ложна, и что я имею в виду под этим.Предположим, у вас есть кто-то, использующий секундомер для определения времени гонки, вручную нажимая кнопку, когда гонка началась, и когда человек, который рассчитывает время, пересекает финишную черту.Предположительно, ваш секундомер с точностью до сотых секунды.Но эта точность ложна, потому что она затмевается ошибками, вызванными временем реакции человека, нажимающего кнопку.
Это очень похоже на то, почему time
дает вам точность, которая предположительно в микросекундах, но на самом делезначительно менее точный.В любой данной системе в любой момент времени происходит много всего, и все это вносит ошибку в вычисления.Прерывания от сетевого ввода-вывода или дискового ввода-вывода, прерывания таймера для запуска планировщика, что другие процессы делают с кэшем ЦП L1 или L2.Все это складывается.
Использование что-то вроде valgrind
, которое запускает вашу программу на имитируемом процессоре, может дать вам числа, которые, по-видимому, точно соответствуют количеству циклов процессора.Но эта точность не то, что вы будете испытывать в реальном мире.Лучше использовать технику, которую я первоначально описал, и просто принять, что эти моменты могут быть нечеткими.