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

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

sepp2k 08.04.2019 13:34
За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
TL;DR: Angular Signals может облегчить отслеживание всех выражений в представлении (Component или EmbeddedView) и планирование пользовательских...
Sniper-CSS, избегайте неиспользуемых стилей
Sniper-CSS, избегайте неиспользуемых стилей
Это краткое руководство, в котором я хочу поделиться тем, как я перешел от 212 кБ CSS к 32,1 кБ (сокращение кода на 84,91%), по-прежнему используя...
1
1
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

sepp2k 08.04.2019 13:37
Ответ принят как подходящий

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

Другие вопросы по теме