На самом деле, кажется, что ядра не разделяют TSC, проверьте этот поток: http://software.intel.com/en-us/forums/topic/388964
Подводя итог, разные ядра не разделяют TSC, иногда TSC может выйти из синхронизации, если ядро изменится наконкретное состояние энергии, но оно зависит от типа процессора, поэтому вам нужно проверить документацию Intel.Кажется, что большинство операционных систем синхронизируют TSC при загрузке.
Я проверил различия между TSC на разных ядрах, используя захватывающий алгоритм реагирования, на машине Linux Debian с процессором Core i5.Процесс возбуждения (в одном ядре) записал TSC в общую переменную, когда реагирующий процесс обнаружил изменение в этой переменной, он сравнивает ее значение и сравнивает его со своим собственным TSC.Вот пример выходных данных моей тестовой программы:
TSC ping-pong test result:
TSC cores (exciter-reactor): 0-1
100 records, avrg: 159, range: 105-269
Dispersion: 13
TSC ping-pong test result:
TSC cores (exciter-reactor): 1-0
100 records, avrg: 167, range: 125-410
Dispersion: 13
Время реакции, когда ЦП возбудителя равен 0 (в среднем 159 тиков), почти такое же, как когда ЦП возбудителя равен 1 (167 тиков).Это указывает на то, что они довольно хорошо синхронизированы (возможно, с некоторыми отличиями).На других парах ядер результаты были очень похожими.
С другой стороны, инструкция сборки rdtscp возвращает значение, указывающее ЦП, в котором был прочитан TSC.Это не ваш случай, но он может быть полезен, когда вы хотите измерить время в простом сегменте кода и хотите убедиться, что процесс не был перемещен из ЦП в середине кода.