Еще одна вещь, о которой вам может понадобиться беспокоиться, это то, что если вы работаете на многоядерном компьютере, программа может быть перенесена на другое ядро с другим счетчиком rdtsc. Однако вы можете закрепить процесс на одном ядре с помощью системного вызова.
Если бы я пытался измерить что-то вроде этого, я, вероятно, записал бы метки времени в массив, а затем вернулся бы и исследовал этот массив после того, как был выполнен тестовый код. При изучении данных, записанных в массив временных отметок, вы должны иметь в виду, что этот массив будет полагаться на кэш-память ЦП (и, возможно, на пейджинг, если ваш массив большой), но вы могли бы предварительно извлечь или просто помнить об этом, анализируя данные. Вы должны видеть очень регулярную дельту времени между отметками времени, но с несколькими всплесками и, возможно, несколькими провалами (вероятно, из-за перемещения в другое ядро). Регулярная дельта времени, вероятно, является вашим лучшим измерением, поскольку предполагает, что никакие внешние события не повлияли на эти измерения.
При этом, если код, который вы тестируете, имеет нерегулярные шаблоны доступа к памяти или время выполнения или использует системные вызовы (особенно связанные с IO), то вам будет трудно отделить шум от интересующих вас данных.