19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|||||||
1 | |||||||
Методы оптимизации кода01.07.2011, 07:48. Показов 8331. Ответов 52
Метки нет (Все метки)
Написал статью по оптимизации кода на С++. Ее можно почитать тут:
[ссылка удалена] А вы какие еще способы оптимизации кода знаете? (я не говорю про оптимизацию алгоритмов. Речь идет про код вообще)
1
|
01.07.2011, 07:48 | |
Ответы с готовыми решениями:
52
Методы оптимизации Методы оптимизации памяти Курсовая. Методы оптимизации Методы Оптимизации: Метод параллельных касательных - нужен алгоритм |
11 / 11 / 2
Регистрация: 01.10.2010
Сообщений: 139
|
|
01.07.2011, 08:10 | 2 |
Ошибка: 404
К сожалению, такой страницы не существует. Вероятно, она была удалена с сервера, либо ее здесь никогда не было.
0
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|
01.07.2011, 08:20 [ТС] | 3 |
Прошу прощения, вот исправленная ссылка:
http://itw66.ru/blog/c_plus_plus/13.html
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
01.07.2011, 10:00 | 4 |
Статья выглядит как СООБРАЖЕНИЯ программиста. Надо бы привести замеры времени.
0
|
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
|
|
01.07.2011, 10:38 | 5 |
Полностью соглашусь с ValeryLaptev, примеры реальной работы в студию, как на огромных так и на не очень больших массивах и т.д. и т.п.
0
|
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
|
|||||||||||
01.07.2011, 10:49 | 6 | ||||||||||
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
01.07.2011, 11:13 | 7 | |||||
Добавлено через 1 минуту Да и во втором случае то же самое.
0
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|
01.07.2011, 11:24 [ТС] | 8 |
Нет, не быстрее.
1: some1 = some3 * (1.0f / a) - в рантайме будет только умножение. деление будет делать компилятор 2: some1 = some3 / a - будет деление в рантайме. Оно медленнее умножения. 3: some1 = some3 * 1.0f / a - это то же самое что и предыдущее вариант 1 наиболее эффективный. А заменять на a_inv не нужно, чтобы не портить читаемость кода. Добавлено через 1 минуту да, ошибся. Исправил на вещественные числа.
0
|
Каратель
|
|
01.07.2011, 11:25 | 9 |
2
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
01.07.2011, 11:45 | 10 |
Добавлено через 17 минут В общем в этой статье нет главного, что нередко пишут в хороших книгах. Заниматься оптимизацией стоит только тогда, когда это действительно необходимо. Ранняя "оптимизация" нередко приводит к "пессимизации" кода. Кроме того, приведённые в статье трюки могут привести к ускорению (а могут и не привести) только для конкретного процессора и конкретного компилятора. Стоит сменить то или другое, как плюсы могут неожиданно превратиться в минусы. Ну и, как уже было замечено, без реальных цифр это всё-равно ни о чём. Хотя как заметка "что ещё можно попробовать, когда ничего не помогает", может и сгодится.
2
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|
01.07.2011, 11:48 [ТС] | 11 |
Да, это разные операции. Вот только программист может организовать код так, чтобы использовать любую из них.
Оптимизация алгоритма - это наиболее важная оптимизация. Но иногда нужно делать такие системы, в который каждая строчка кода может быть решающей. Тогда и нужно понимать подобные принципы. Допустим идет разработка системы частиц (particle system). Каждая частица будет апдейтиться в каждом кадре. Если частиц 10000 то любая лишняя операция будет сказываться на производительности. А если добавить несколько if то можно вообще ее убить. В данной статье под эффективностью понимается скорость выполнения. Согласись - более эффективный тот вариант, который делает меньше действий для получения результата. Значительно эффективнее код, который может не делать бесполезные действия. А самое главное, что от того как программист расположит операторы в if выражении будет зависеть скорость работы кода. Именно поэтому нужно думать, когда в if помещаешь функции. Может эта функция будет к серверу обращаться впустую только из за того, что программист поленился поставить первым оператором выражение, которое всегда вернет false. Инкремент указателя быстрее, чем его вычисление по произвольному смещению. Именно это будет при a[x].
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
01.07.2011, 14:26 | 12 |
FiloXSee, если бы вы привели ассемблерный код в обоих случаях, то все увидели бы, что НА САМОМ ДЕЛЕ эффективно.
А пока, повторюсь, статья выглядит просто как соображения программиста. Что ОЧЕНЬ ЧАСТО не соответствует действительности.
0
|
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
|
|
01.07.2011, 14:30 | 14 |
0
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|
01.07.2011, 14:53 [ТС] | 15 |
Спасибо за первый нормальный ответ.
Хотя это не ускорит код. Основное время тратится не на вычисление, а на условие. Его проверка остается даже в этом случае. Более того, вариант for ( int i = 0, size = strlen( string ); i < size; ++i ) будет сравнивать две целые стековые переменные, а вариант for (int i = 0; str[i]; ++i) будет вычислять текущий указатель, разыменовывать его получая по нему данные, брать от них только 1 байт и только потом сравнивать его с нулем. Это будет дольше, чем просто сравнение.
0
|
Higher
|
|||||||||||
01.07.2011, 15:01 | 16 | ||||||||||
Вы забываете о том, как работает strlen
Примерная реализация
В моем же коде пробегаем всего 1 раз.
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
01.07.2011, 15:01 | 17 |
Это опять-таки только ВАШИ соображения. Покажите ассемблерный текст для обоих вариантов.
1
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|
01.07.2011, 15:27 [ТС] | 19 |
Да, видимо там не очень удачный комментарий. Видимо комментатор там имел в виду, что нужно выносить все сложные вычисления из части условия в раздел объявления переменных, чтобы вычислять верхний предел один раз.
Добавлено через 3 минуты Сравнивать можно что угодно. Важно то, как это используется. Понятно что эти строчки не взаимозаменяемые. Но всегда можно реорганизовать код для любой из этих форм записи. Вопрос в том, какую форму в каких случаях лучше использовать.
0
|
01.07.2011, 15:34 | 20 | ||||||||||||||||||||
Просто тогда явно не хватает сравнения что лучше
0
|
01.07.2011, 15:34 | |
01.07.2011, 15:34 | |
Помогаю со студенческими работами здесь
20
Просмотр кода после оптимизации компилятора Объяснить нюансы оптимизации заданного фрагмента кода Мешает ли разделение кода на объявление (.h) и определение (.cpp) inline оптимизации? Функция считывания данных из файла: прошу совет по оптимизации кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |