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

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

Ответы [ 26 ]

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

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

1 голос
/ 13 декабря 2011

Я думаю, что результатом всего этого является то, что вычислительная мощность становится дешевле, так что программист может тратить меньше времени на выполнение определенной задачи. Например, языки более высокого уровня, такие как Java или Python, почти всегда работают медленнее, чем языки более низкого уровня, такие как Assembly. Но программисту намного проще, что возможно новое. Я думаю, что конечной целью будет то, что компьютеры смогут напрямую общаться с людьми и компилировать человеческую речь в байт-код. Тогда программисты перестанут существовать. (И компьютеры могут захватить весь мир)

1 голос
/ 19 июня 2009

Компьютер похож на комнату подростка.

Он никогда не будет достаточно большим, чтобы вместить весь мусор.

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

Скорость компьютера не всегда может преодолеть человеческую ошибку. Вопросы могут быть сформулированы так: « Станут ли процессоры достаточно быстрыми , чтобы компиляторы могли потратить время на обнаружение (и исправление) проблем с реализацией ». Очевидно, что оптимизация кода потребуется (в обозримом будущем), чтобы исправить проблемы Шламиеля-маляра -типа.

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

Наслаждайтесь

Роберт К. Картейно

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

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

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

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

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

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

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

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

Оптимизация будет по-прежнему необходима во многих ситуациях, в частности:

  • Системы реального времени, в которых процессорное время является премиальным

  • Встраиваемые системы, где память является памятью премиум

  • Серверы, на которых многие процессы требуют внимания одновременно

  • Игры, в которых трехмерная трассировка лучей, аудио, искусственный интеллект и сетевое взаимодействие могут стать очень сложной программой

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

Даже если процессоры становятся все быстрее и быстрее, вы всегда можете оптимизировать

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

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

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

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

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

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

Или, если вы хотите быть действительно профессионалом, добавьте еще один уровень абстракции.

Это не сложно: -)

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

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

Как уже упоминалось, узкие места всегда будут

...