Вы можете использовать "rdtsc"
инструкцию процессора на x86 / x86_64.Для многоядерных систем проверьте возможность «constant_tsc» в CPUID (/ proc / cpuinfo в linux) - это будет означать, что все ядра используют один и тот же счетчик тиков, даже при динамическом изменении частоты и спящем режиме.
Если ваш процессор делаетне поддерживает constant_tsc, не забудьте связать вашу программу с ядром (taskset
утилита в Linux).
При использовании rdtsc на ЦП с ошибками (все, кроме Intel Atom, могут иметь некоторые другиеend cpus), добавьте инструкцию «ordering» перед, например, «cpuid» - это временно отключит переупорядочение команд.
Кроме того, в MacOsX есть «Shark», который может измерять некоторые аппаратные события в вашем коде.
RDTSC
и неисправные процессоры.Подробнее в разделе 18 руководства 2-го великого тумана по оптимизации: Оптимизация подпрограмм на языке ассемблера: руководство по оптимизации для платформ x86 (основной сайт со всеми пятью руководствами - http://www.agner.org/optimize/)
http://www.scribd.com/doc/1548519/optimizing-assembly
На всех процессорах с не по порядку выполнением необходимо вставить XOR EAX, EAX / CPUID до и после каждого чтенияСчетчик для предотвращения его параллельного выполнения с чем-либо еще. CPUID является командой сериализации, что означает, что он очищает конвейер и ожидает завершения всех ожидающих операций, прежде чем продолжить. Это очень полезно для целей тестирования.