Сколько строк машинного кода генерируется одним оператором на языке программирования X? - PullRequest
0 голосов
/ 16 августа 2011

Читая статью о Потерянные навыки программирования , автор вызывает этот чат:

Я: Сколько лошадиных сил вам нужно?
SE: я не знаю.
Я: Давайте посмотрим, сколько строк кода в вашем основном цикле?
SE: 10000.
Я: на каком языке?
SE: Фортран
Я: хорошо, это примерно 10 строк машинного кода на строку Фортрана, так 100 000 инструкций за цикл; сколько раз цикл выполняется за второй?
SE: каждые 1/20 секунды.
Я: ОК, так что это 20 х 100 000 = 2 мопса (что было быстрее, чем у нас было в то время), может быть, нам лучше переосмыслить это.

Что заставляет меня задуматься, каково число современных языков, скажем, Ruby? Как это узнать?

Ответы [ 4 ]

0 голосов
/ 12 сентября 2012

Для X = " C # " вы, возможно, захотите взглянуть на Более быстрый управляемый код: узнайте, что стоит от Microsoft.Это говорит о том, что (некоторые) современные языки сильно оптимизируются перед тем, как они коснутся аппаратного обеспечения.

0 голосов
/ 16 августа 2011

С точки зрения определения, сколько времени займет выполнение кода, это даже не работает на Фортране! Если вы напишите это на Фортране 90:

SUBROUTINE foo(x, y)
  IMPLICIT NONE
  REAL, DIMENSION(:), INTENT(IN) :: x
  REAL, DIMENSION(:), INTENT(OUT) :: y
  y = EXP(x)
END SUBROUTINE foo

строка, которая говорит y = EXP(x), может выполняться произвольно долго, в зависимости от размера массивов x и y. То же самое касается любого языка с векторным присваиванием.

0 голосов
/ 12 сентября 2012

В чате они пытались оценить производительность процессора.Если вы знаете производительность процессора и время выполнения цикла, вы можете получить количество команд CPU на цикл, а затем на строку.Расчет в вашем чате не точен.Вы можете сделать подобные неточные расчеты даже для рубина.Имейте в виду, что неправильно говорить, что одна строка на Фортране - это 10 команд ЦП, НО средняя для определенного цикла, это было верно.

Оцените время, затрачиваемое вашим циклом в ruby.Умножьте производительность вашего процессора (в операциях в секунду) на время цикла.Вы будете получать операции в секунду.Разделите операции в секунду на количество строк в цикле.Это ваша ценность для вашего цикла.

0 голосов
/ 16 августа 2011

Я не думаю, что будет точно нет.говоря "для языка х скомпилированный двоичный файл имеет y строк на строку исходного кода".Но если вы все еще хотите узнать, может быть, вы можете принять большое нет.скомпилированного кода и соответствующего исходного кода и узнать среднее значение для каждой строки исходного кода.Вы можете открыть двоичный файл с помощью любого двоичного редактора, чтобы увидеть, сколько строк он генерирует.напримерOllydbg

...