29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
|
||||||
1 | ||||||
Оптимизация кода20.06.2013, 00:14. Показов 1109. Ответов 16
Метки нет (Все метки)
Здравствуйте! у меня есть такая функция, которая очень часто вызывается:
0
|
20.06.2013, 00:14 | |
Ответы с готовыми решениями:
16
оптимизация кода Оптимизация кода Оптимизация кода Оптимизация кода |
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
|
|
20.06.2013, 00:32 | 2 |
Helldrg, что делает эта функция?
1
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,916
|
|
20.06.2013, 00:36 | 3 |
Конечно, можно. Всю подряд, начиная с 6-7 строк (вынести их за рамки внешнего цикла - а то вдруг компилятор такой дурной, что сам не выносит константы и инварианты)
1
|
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
|
|
20.06.2013, 00:39 [ТС] | 4 |
в функцию передаются 3 переменные, по двум переменным(обработанным) ищется стурктура которая нам нужна, когда мы ее находим мы ищем в ней запись по двум переменным(не обработанным) с помощи двух циклов, когда совпадение находится возвращаем интовое число из структуры которой мы искали, у которой первые две переменные равняются переданными переменными.
Тут для оптимизации впринципе не нужна int y_, а больше я ничего не вижу( Добавлено через 1 минуту VTsaregorodtsev Воо, спасибо, это я пропустил
0
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,916
|
|
20.06.2013, 00:57 | 5 |
Helldrg, да не, это вряд ли даст существенный эффект.
Я писал чисто ради хохмы. Реально надо глядеть всю программу - нельзя ли поменять представление данных, чтобы в этой функции получились более просто вычисляемые индексы массивов. Хотя... Умножение на 64 современные процессоры выполняют быстро (да и древним процессорам мог помогать компилятор, заменяя умножение на степень двойки командой сдвига на нужное число бит)
1
|
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
|
|
20.06.2013, 01:04 [ТС] | 6 |
Данные по другому не как не представить(
0
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
||||||
20.06.2013, 01:39 | 7 | |||||
Helldrg, попробуйте каждую переменную в циклах определить при помощи ключевого слова register - это просьба к компилятору занести объекты в регистр процессора. При "успешной" просьбе, значительно увеличивает скорость выполнения блока/программы (при условии, конечно, что обращение к объектам действительно происходит очень часто).
Добавлено через 9 минут например в 4 строчке:
а также в 10-й и 12-й
2
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
20.06.2013, 01:44 | 8 |
Ключевые слова: векторизация, уменьшение количества ветвлений, разворачивание циклов, повышение локальности ссылок.
Рассовывание переменных по регистрам и умножение на 64 — это фигня. Компилятор с этим и так неплохо справляется.
1
|
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
|
||||||
20.06.2013, 01:49 | 9 | |||||
0
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
20.06.2013, 01:55 | 10 |
Наблюдался случай, когда в одном единственном цикле (оптимизировать просто больше было нечего) при внесении в регистр двух переменных скорость выполнения модуля увеличилась чуть больше чем на 30%.
0
|
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
|
|
20.06.2013, 01:56 | 11 |
Ещё inline функцию можно использовать.
0
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
20.06.2013, 02:02 | 12 |
Ну у него циклы, inline будет просто компилятором проигнорировано.
Добавлено через 5 минут В этом вы на мой молодой и неопытный взгляд вы абсолютны правы. Да и вообще прибегание к inline, register и прочим хакам, должно быть в последнюю очередь.
0
|
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
|
||||||
20.06.2013, 02:22 [ТС] | 14 | |||||
Там стоит так:
0
|
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
|
||||||
20.06.2013, 02:30 | 15 | |||||
Получается 5 > 10 && 5 < 10 - такое условие никогда не выполнится.
0
|
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
|
||||||
20.06.2013, 02:33 [ТС] | 16 | |||||
Ну значит там:
Суть не в этом, суть в том, как бы поменьше проходов сделать
0
|
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
|
|
20.06.2013, 04:25 | 17 |
0
|
20.06.2013, 04:25 | |
20.06.2013, 04:25 | |
Помогаю со студенческими работами здесь
17
Оптимизация кода Оптимизация кода (C++) оптимизация кода Оптимизация кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |