Что означает «сохранение тактов может существенно изменить время выполнения»?

281
The Pointer

Следующий текст обсуждает историческое развитие UNIX:

Следующим важным этапом стало переписывание UNIX на языке программирования C. В то время это была неслыханная стратегия. Обычно считалось, что что-то такое сложное, как ОС, которая должна иметь дело с критическими по времени событиями, должно быть написано исключительно на ассемблере. Причины такого отношения включают следующее:

  • Скорости процессора и шины были относительно медленными, поэтому сохранение тактов может существенно изменить время выполнения.

Я не понимаю, почему сохранение тактов приведет к ускорению выполнения.

Не правда ли, что чем быстрее (и чаще) тактовые циклы, тем лучше время выполнения процессора? В таком случае, не будет ли цель увеличить тактовые циклы, а не «сохранить» (уменьшить) их?

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

0
Вы неправильно понимаете, «спасая» их. Вы хотите уменьшить количество тактов, которое вам нужно для любой конкретной задачи. djsmiley2k 7 лет назад 0
@ djsmiley2k Спасибо за ответ. Это моя точка зрения: почему вы хотите сохранить их, когда больше циклов = быстрее? Или я все еще что-то недопонимаю? The Pointer 7 лет назад 0
Это означает сохранение количества используемых. Если вы представляете каждый тактовый цикл, вы можете запустить 1 команду. Таким образом, вы хотите, чтобы ваша программа выполнялась как можно меньше команд / циклов. Вы всегда получаете фиксированное количество циклов в секунду. djsmiley2k 7 лет назад 2
"I don't understand why saving clock cycles would result in faster execution time." - Every instruction takes time to process, the more instructions you have, the longer whatever was calling those instructions takes to finish. *Basically a compiler can do a better job of optimizing then a human can.v Ramhound 7 лет назад 0

1 ответ на вопрос

0
jcbermu

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

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

Неоптимизированный код означает больше циклов ЦП для выполнения той же задачи.

Point of clarification: *When you compile C code, you are translating that into assembly, which is then processed as machine code.* `Assembly is a human interpretation of the machine code.` You can still estimate the computation time when dealing with C or even languages like Java and C#. Machine code isn't always a 1:1 analog of assembly code. [Assembly code vs Machine code vs Object code?](http://stackoverflow.com/questions/466790/assembly-code-vs-machine-code-vs-object-code) Ramhound 7 лет назад 0
@Ramhound Yes. it's true. I over simplified it to make it more understandable. jcbermu 7 лет назад 0

Похожие вопросы