Вычисление, какой компилятор быстрее с точки зрения цикличности

#performance #compiler-construction #clock #instructions #cpu-cycles

#Производительность #компилятор-конструкция #часы #Инструкции #cpu-циклы

Вопрос:

У меня просто простой вопрос, немного глупый, но мне просто нужны некоторые разъяснения для предстоящего экзамена, чтобы я не допустил глупой ошибки. В настоящее время я посещаю занятия по организации и проектированию компьютеров и изучаю время выполнения, CPI, тактовые циклы и т. Д.

Для решения проблемы я должен рассчитать количество циклов для 2 компиляторов и выяснить, какой из них быстрее и на сколько, учитывая количество инструкций и циклов для каждой инструкции. Моя главная проблема заключается в том, чтобы определить, насколько быстрее работает более быстрый компилятор.

Например, допустим, что это два компилятора:

 Compiler 1 has 3 load instructions, 4 store instructions, and 5 add 
instructions.

Compiler 2 has 5 load instructions, 4 store instructions, and 3 add 
instructions 
  

Инструкция загрузки занимает 2 цикла, инструкция сохранения занимает 3 цикла, а инструкция добавления занимает 1 цикл

Итак, что бы я сделал, это дополняет инструкции (3 4 5 ) и (5 4 3 ), которые оба равны 12 инструкциям.

Затем я бы вычислил циклы, умножив количество инструкций на циклы и добавив их все вместе следующим образом

 Compiler 1: (3*2) (4*3) (5*1) = 23 cycles 
Compiler 2: (5*2) (4*3) (3*1) = 25 cycles 
  

Итак, очевидно, что компилятор 1 быстрее, потому что он требует меньше циклов. Чтобы узнать, насколько быстрее компилятор 1 по сравнению с компилятором 2, я бы просто разделил соотношение циклов?

Мой расчет составил 23/25 = 0,92, поэтому компилятор 1 в 0,92 раза быстрее, чем компилятор 2 (на 92% быстрее).

Мой одноклассник обсуждал это со мной и утверждает, что это будет 25/23, что будет означать, что это в 1,08 раза быстрее.

Я знаю, что я также могу вычислить это, разделив циклы на инструкции, такие как:

 23 cycles/12 instructions = 1.91 
25 cycles/12 instructions = 2.08 
and then 1.91/2.08 = 0.92 which is the same as the above answer. 
  

Я не уверен, какой путь будет правильным.

Мне также было интересно, отличается ли количество инструкций для второго компилятора, скажем, 15 инструкций. Будет ли достаточно вычислить соотношение циклов?

Или мне пришлось бы разделить циклы на инструкции (циклы / инструкции), но поместить 15 инструкций для обоих?

 (ex. 23/15 and 25/15?) and then divide the quotients of both to get 
the times faster? I also get the same number(0.92) in that case. 
  

Спасибо за любые разъяснения.

Комментарии:

1. И «в 1,08 раза быстрее», и «в 0,92 раза быстрее» означали бы, что это примерно в два раза быстрее, что явно не так. Вы и ваш друг хотели сказать, что «это в X раз быстрее «. Обратите внимание, что если что-то «в 0,92 раза быстрее» (или любое другое число меньше 1), это означает, что оно медленнее , чем другое.

Ответ №1:

Первый компилятор будет в 1,08 раза быстрее второго компилятора, что на 8% быстрее (потому что 1,0 0,08 = 1,08).

Ответ №2:

Вероятно, оба вычисления являются неточными, с современными / многоядерными процессорами компилятор, который генерирует больше инструкций, может фактически создавать более быстрый код.

Комментарии:

1. Вот почему OP считает циклы, а не инструкции. Теперь на современных процессорах вы не всегда можете сказать, что данная инструкция занимает определенное количество циклов, но поскольку инструкции делают именно это, я бы сказал, справедливо предположить, что мы рассуждаем об архитектуре, в которой вы можете это сделать.