У меня простой вопрос, немного глупый, но мне просто нужно кое-что уточнить перед предстоящим экзаменом, чтобы не сделать глупой ошибки. В настоящее время я посещаю занятия по компьютерной организации и дизайну и изучаю время выполнения, 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.
Спасибо за любые разъяснения.
Вероятно, оба вычисления неточны, с современными/многоядерными процессорами компилятор, который генерирует больше инструкций, может на самом деле производить более быстрый код.
Вот почему OP считает циклы, а не инструкции. Теперь о современных процессорах вы не всегда можете сказать, что данная инструкция занимает определенное количество циклов, но поскольку инструкции делают именно это, я бы сказал, что справедливо предположить, что мы рассуждаем об архитектуре, в которой вы можете это сделать. .
Первый компилятор будет в 1,08 раза быстрее второго компилятора, что равно на 8% быстрее (потому что 1,0 + 0,08 = 1,08).
Оба «в 1,08 раза быстрее» и «в 0,92 раза быстрее» означают, что это примерно в два раза быстрее, что явно не так. То, что вы и ваш друг хотели сказать, это «это X раз настолько быстро». Обратите внимание: если что-то «в 0,92 раза быстрее» (или любое другое число меньше 1), это означает, что это помедленнее, чем другое.