Не станет ли оптимизация кода ненужной? - PullRequest
7 голосов
/ 13 июня 2009

Если закон Мура остается в силе, и процессоры / графические процессоры становятся все более быстрыми, программное обеспечение (и, по ассоциации, вы, разработчики программного обеспечения) все еще раздвигают границы до такой степени, что вам все еще нужно оптимизировать свой код ? Или наивное факториальное решение будет достаточно хорошим для вашего кода (и т. Д.)?

Ответы [ 26 ]

31 голосов
/ 13 июня 2009

2x вычислительная мощность не так уж и велика, чтобы улучшить ужас вашего паршивого поиска n ^ 2.

18 голосов
/ 13 июня 2009

Плохой код всегда может превысить скорость процессора.

В качестве превосходного примера, перейдите к этому столбцу Coding Horror и прокрутите вниз до раздела, описывающего книгу Programming Pearls . Воспроизведен график, показывающий, как для определенного алгоритма TRS-80 с 8,7-битным процессором 4,77 МГц может побить 32-битный чип Alpha. TRS-80 vs. Alpha

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

Поговорка «нет проблемы, которую грубая сила и невежество не могут преодолеть» не всегда верна.

13 голосов
/ 13 июня 2009

Чем быстрее работают компьютеры, тем больше мы ожидаем от них.

12 голосов
/ 13 июня 2009

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

11 голосов
/ 13 июня 2009

Пока все программисты не напишут оптимальный код с первого раза, всегда найдется место для оптимизации. Между тем, реальный вопрос заключается в следующем: что мы должны оптимизировать в первую очередь?

10 голосов
/ 13 июня 2009

Закон Мура говорит о том, сколько транзисторов мы можем упаковать в чип - в нем ничего не сказано о том, что эти транзисторы способны переключаться с все более высокой скоростью. Действительно, в последние несколько лет тактовые частоты более или менее застоялись - мы просто продолжаем получать все больше и больше «ядер» (по сути, целых процессоров) на чип. Чтобы воспользоваться этим, требуется распараллеливание кода, поэтому, если вы пишете «наивно», магический оптимизатор будущего будет занят поиском скрытого параллелизма в вашем коде, чтобы он мог использовать его для нескольких ядер (более реалистично для в обозримом будущем вам придется много помогать компилятору; -).

10 голосов
/ 13 июня 2009

закон Вирта :

Программное обеспечение работает медленнее, быстрее, чем аппаратное обеспечение.

P.S. На более серьезном замечании: поскольку вычислительная модель переходит к параллельной обработке, оптимизация кода становится все более важной. Если вы оптимизируете свой код 2 раза, и он будет работать 5 минут вместо 10 минут на 1 одном блоке, это может быть не так впечатляюще. Следующий компьютер с двухкратной скоростью компенсирует это. Но представьте, что вы запускаете свою программу на 1000 процессоров. Тогда любая оптимизация экономит МНОГО машинного времени. И электричество. Оптимизируй и спаси Землю! :)

5 голосов
/ 13 июня 2009

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

  1. Проблемы с ограниченными вычислительными потребностями.
  2. Проблемы с неограниченными вычислительными потребностями.

Большинство проблем вписывается в эту первую категорию. Например, 3D растеризация в реальном времени. В течение долгого времени эта проблема была недоступна для типичной бытовой электроники. Не было убедительных трехмерных игр или других программ, которые могли бы создавать миры в реальном времени на Apple] [. В конце концов, однако, технологии догнали, и теперь эта проблема достижима. Аналогичная проблема - симуляция сворачивания белка. До недавнего времени было невозможно преобразовать известную пептидную последовательность в полученную молекулу белка, но современное оборудование делает это возможным за несколько часов или минут обработки.

Однако существует несколько проблем, которые по своей природе могут поглотить все доступные вычислительные ресурсы. Большинство из них - это динамические физические симуляции. Очевидно, что можно выполнить вычислительную модель, скажем, погоды. Мы занимаемся этим почти столько же, сколько у нас было компьютеров. Однако такая сложная система выигрывает от повышенной точности. симуляция при более точном пространственном и временном разрешении улучшает предсказания побитно. Но независимо от того, насколько точна любая симуляция, есть место для большей точности с последующей выгодой.

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

Первый из них немного более тонкий, хотя. В течение определенного периода никакая оптимизация не стоит, так как не существует компьютера, который был бы достаточно быстр для этого. Через некоторое время оптимизация становится несколько бессмысленной, поскольку аппаратное обеспечение, которое работает, работает во много раз быстрее, чем необходимо. Но есть узкое окно, во время которого оптимальное решение будет работать приемлемо на текущем оборудовании, но неоптимальное решение не будет. В течение этого периода тщательно продуманная оптимизация может быть разницей между первым на рынке продуктом-победителем и также запущенным.

3 голосов
/ 13 июня 2009

Оптимизация всегда будет необходима, потому что смягчающим фактором для закона Мура является взломщик .

3 голосов
/ 13 июня 2009

Оптимизация - это больше, чем скорость. Закон Мура не распространяется на память компьютера. Кроме того, оптимизация часто представляет собой процесс компиляции вашего кода для использования инструкций, специфичных для процессора. Это лишь некоторые из оптимизаций, которые я могу придумать, которые не будут решены более быстрыми процессорами.

...