2015-09-18 2 views
5

cpuid используется как инструкция сериализации для предотвращения выполнения ooo при бенчмаркинге, поскольку выполнение контрольных инструкций может быть переупорядочено до rdtsc, если оно используется отдельно. Мой вопрос заключается в том, возможно ли, чтобы инструкции ниже rdtsc были переупорядочены между cpuid и rdtsc? Поскольку rdtsc не является инструкцией по сериализации, инструкции могут быть свободно переупорядочены вокруг него?cpuid + rdtsc и исполнение вне очереди

ответ

1

Поскольку RDTSC не зависит от какого-либо ввода (он не принимает никаких аргументов), в принципе трубопровод OOO будет запускать его, как только это возможно. Причина, по которой вы добавляете инструкцию для сериализации, прежде чем она не позволит RDTSC выполнить ранее.

Ответа на этот вопрос John McCalpin here, вам это может найти полезное сообщение. Он объясняет переупорядочение ООО для инструкции RDTSCP (которая ведет себя иначе, чем RDTSC), которую вы, возможно, предпочтете использовать.