Точно, как “быстро” современные центральные процессоры?

Когда я раньше программировал встроенные системы и рано 8/16-bit ПК (6502, 68K, 8086) у меня был довольно хороший дескриптор на exacly, сколько времени (в наносекундах или микросекундах) каждая инструкция взяла для выполнения. В зависимости от семейства одно (или четыре) циклы, приравненные к одной "памяти, выбирают", и без кэшей для волнения о, Вы могли предположить синхронизации на основе количества включенных доступов памяти.

Но с современным ЦП, я смущен. Я знаю, что они намного быстрее, но я также знаю, что скорость гигагерца заголовка не полезна, не зная, сколько циклов тех часов необходимо для каждой инструкции.

Так, может любой обеспечивать некоторые синхронизации для двух демонстрационных инструкций на (скажем), Core 2 Duo на 2 ГГц. Лучшие и худшие случаи (принимающий ничто в кэше/всем в кэше) были бы полезны.

Инструкция № 1: Добавьте один 32-разрядный регистр к секунде.

Инструкция № 2: Переместите 32-разрядное значение от регистра до памяти.

Править: Причина я спрашиваю это, состоит в том, чтобы попытаться разработать "эмпирическое правило", которое позволило бы мне смотреть на простой код и примерно измерять время, потраченное к ближайшему порядку величины.

Редактирование № 2: много ответов с интересными моментами, но никто (все же) не подавил число, измеряемое вовремя. Я ценю существуют "сложности" к вопросу, но продвигаются: Если мы можем оценить количество тюнеров фортепьяно в Нью-Йорк Сити, мы должны смочь оценить время выполнения кода...

Возьмите следующий (немой) код:

int32 sum = frigged_value();

// start timing
 for (int i = 0 ; i < 10000; i++)
 {
   for (int j = 0 ; j < 10000; j++)
   {
     sum += (i * j)
   }
   sum = sum / 1000;
 }

// end timing

Как мы можем оценить, сколько времени это возьмет для выполнения... 1 фемтосекунда? 1 gigayear?

18
задан Peter Cordes 14 November 2019 в 02:54
поделиться