Наверное, нет.clock_gettime()
уже реализован через vDSO, так что, вероятно, это будет самый быстрый из возможных системных вызовов.
Но учтите временные рамки.С процессором 2 ГГц 450 наносекунд - это всего лишь 900 тактов.Это не очень много.
На одной машине Core 2 с частотой 1,86 ГГц при работе в цикле, равном clock_gettime()
, возвращаются значения, разнесенные на 86 нс.Простое добавление наполнителя for (int j = 0 ; j < 100 ; j++);
увеличивает его до 540 нс.(около 4,5 нс за итерацию цикла, или около 8-9 тактов)
В это время вы мало что можете сделать.Что вы можете сделать, так это считать тактовые циклы или повторения циклов.Предварительно используйте clock_gettime()
, чтобы определить, сколько времени требуется занятому циклу N итераций на этом компьютере, а затем масштабируйте количество итераций, чтобы получить цикл синхронизации требуемой длины.
YouВам, вероятно, все еще понадобится некоторое время, чтобы выполнить фактическое переключение битов, предполагая, что он проходит через системный вызов.Модуль ядра может быть полезен в этом случае, так как вы можете избежать системных издержек.Внутри ядра также может быть проще предотвратить переопределение кода при работе с битами.