Почему некоторые коды Ruby работают в два раза быстрее на 2,53 ГГц, чем на 2,2 ГГц процессоре Core 2 Duo? - PullRequest
9 голосов
/ 01 ноября 2010

(Этот вопрос пытается выяснить, почему запуск программы может отличаться на разных процессорах, поэтому он связан с аспектом программирования).

Следующей программе потребуется 3,6 секунды для запускана Macbook с 2,2 ГГц Core 2 Duo и 1,8 секунды для работы на Macbook Pro с 2,53 ГГц Core 2 Duo.Это почему?

Это немного странно ... зачем удваивать скорость, когда процессор только на 15% быстрее по тактовой частоте?Я дважды проверил измеритель ЦП, чтобы убедиться, что ни одно из 2 ядер не используется на 100% (чтобы ЦП не был занят чем-то другим).Может быть потому, что один из них - Mac OS X Leopard, а второй - Mac OS X Snow Leopard (64-разрядная версия)?Оба работают на Ruby 1.9.2.

p RUBY_VERSION
p RUBY_DESCRIPTION if defined? RUBY_DESCRIPTION
n = 9_999_999
p n

t = 0; 1.upto(n) {|i| t += i if i%3==0 || i%5==0}; p t

Ниже приведены только выходные данные программы:

На 2,2 ГГц Core 2 Duo: ( Update: Идентификатор Macbook: MacBook3,1, поэтому, вероятно, Intel Core 2 Duo (T7300 / T7500))

$ time ruby 1.rb
"1.9.2"
"ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-darwin9.8.0]"
9999999
23333331666668

real  0m3.784s
user  0m3.751s
sys  0m0.021s

2,53 ГГц Intel Core 2 Duo: ( Обновление: Macbookидентификатор: MacBookPro5,4, поэтому, вероятно, это Intel Core 2 Duo Penryn с 3 МБ кэш-памяти второго уровня)

$ time ruby 1.rb
"1.9.2"
"ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]"
9999999
23333331666668

real  0m1.893s
user  0m1.809s
sys  0m0.012s

Тестовый запуск в Windows 7:

time_start = Time.now

p RUBY_VERSION
p RUBY_DESCRIPTION if defined? RUBY_DESCRIPTION

n = 9_999_999
p n

t = 0; 1.upto(n) {|i| t += i if i%3==0 || i%5==0}; p t

print "Took #{Time.now - time_start} seconds to run\n"

Intel Q6600 QuadCore 2,4 ГГц под управлением Windows 7, 64-разрядная:

C:\> ruby try.rb
"1.9.2"
"ruby 1.9.2p0 (2010-08-18) [i386-mingw32]"
9999999
23333331666668
Took 3.248186 seconds to run

Intel 920 i7 2.67 ГГц под управлением Windows 7, 64-разрядная:

C:\> ruby try.rb
"1.9.2"
"ruby 1.9.2p0 (2010-08-18) [i386-mingw32]"
9999999
23333331666668
Took 2.044117 seconds to run

Также странно, почему i7 с2.67 ГГц медленнее, чем 2.53 ГГц Core 2 Duo.

Ответы [ 5 ]

12 голосов
/ 01 ноября 2010

Я подозреваю, что ruby ​​переключается на целочисленную реализацию произвольной точности позже 64-битная ОС.

Цитирование документа Fixnum ruby:

Fixnum содержит целочисленные значения, которые могут быть представленным в родной машине слово (минус 1 бит). Если любая операция на Fixnum превышает этот диапазон, значение автоматически преобразуется в Bignum.

Здесь собственное машинное слово технически 64-битное, но интерпретатор скомпилирован для работы на 32-битных процессорах.

2 голосов
/ 01 ноября 2010

Я не знаю много Ruby, но ваш код не выглядит многопоточным, в этом случае он не будет использовать преимущества нескольких ядер.Также могут быть большие различия между двумя моделями процессоров.У вас меньшие размеры процессов, большие кеши, лучший набор инструкций SIMD, более быстрый доступ к памяти и т. Д. Различия между компилятором и ОС могут привести к значительным колебаниям производительности между Windows и Linux, это также можно сказать для x86 против x64.Кроме того, Core i7s поддерживает HyperThreading, что в некоторых случаях замедляет работу однопоточного приложения.

Например, если этот процессор с частотой 2,2 ГГц является процессором Intel Core2 E4500, он имеет следующие характеристики:

  • Часы: 2,2 ГГц
  • Кэш-память L2: 2 МБ
  • FSB: 800 МТ / с
  • Размер процесса: 65 нм

против T9400, которыйвероятно в вашем MacBook Pro

  • Часы: 2,53 ГГц
  • Кэш-память L2: 6 МБ
  • FSB: 1066 МТ / с
  • Размер процесса: 45 нм

Кроме того, вы работаете на x64-сборке Darwin.Все эти вещи, безусловно, могут привести к тому, что навязчивый маленький скрипт выполнится намного быстрее.

2 голосов
/ 01 ноября 2010

В нашей среде CI у нас есть много компьютеров с «коробкой для пиццы», которые должны быть идентичными.Они имеют одинаковое оборудование, были установлены в одно и то же время и в целом должны быть идентичными.Они даже размещены в «термически эквивалентных» местах.Они не идентичны, и вариация может быть довольно потрясающей.

Единственный вывод, который я сделал, состоит в том, что разные привязки процессора будут иметь разные пороги для теплового шага;некоторые из «лучших» фишек лучше держатся.Я также подозреваю, что другие "незначительные" аппаратные неисправности / изменения играют здесь роль.Может быть, медленные блоки имеют немного разные компоненты, которые играют хуже вместе?

Существуют инструменты, которые покажут вам, если ваш процессор замедляется по тепловым причинам.

2 голосов
/ 01 ноября 2010

зачем удваивать скорость, когда тактовая частота процессора только на 15% выше?

Просто потому, что производительность компьютеров определяется не только процессоромтактовая частота.

Другие факторы, которые следует учитывать:

  • Архитектура ЦП, включая, например, количество ядер в ЦП, или общая возможность параллельного выполнения нескольких инструкций
  • другие тактовые частоты в системе (память, FSB)
  • размеры кэша ЦП
  • установленные микросхемы памяти (некоторые быстрее, чем другие)
  • дополнительно установленное оборудование (возможнозамедлять работу системы из-за аппаратных прерываний)
  • разные операционные системы
  • 32-битные и 64-битные системы

Я уверен, что есть еще много вещейдобавить в приведенный выше список.Я не буду подробно останавливаться на этом вопросе, но если кому-то захочется, пожалуйста, не стесняйтесь добавлять его в приведенный выше список.

1 голос
/ 01 ноября 2010

не читал код, но .. Это действительно трудно проверить на 2 разных компьютерах. Вам нужен точно такой же ОС, те же процессы, тот же объем памяти.

Если вы меняете семейство процессоров (i7, core2due, P4, P4-D) - частота процессора ничего не говорит о способностях каждого процессора по отношению к другому семейству. Вы можете сравнивать только в одном семействе (например, новый процессор может тратить циклы на управление ядром, а не на вычисления)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...