Несколько способов оптимизировать обработку последовательностей чисел для более эффективной работы программ:
- Избавиться от лишних обращений к памяти. 1 Желательно работать с регистрами процессора, а не с памятью, так как обращение к ней занимает много времени. 1 Можно ввести временную локальную переменную, в которую производить запись, и только через какое-то время произвести запись из этой переменной в память. 1
- Использовать векторизацию. 1 Современные процессоры поддерживают специальные расширения, которые позволяют работать над векторами данных. 1 Можно считать из памяти в один регистр сразу несколько байт данных и выполнить арифметическую операцию сразу над несколькими числами параллельно. 1
- Уменьшить количество ветвлений в программе. 1 Для этого некоторые передачи управления выгодно заменить на передачу данных. 1
- Объединить циклы, которые работают с одним набором элементов. 2 Важно, чтобы совпадали диапазоны изменения данных. 2
- Развернуть цикл. 2 При этом за одну итерацию выполняется несколько инструкций или более сложная инструкция, которая может быть разбита компилятором на несколько. 2
- Расщепить цикл. 2 Цикл разбивают на несколько циклов, при этом все эти циклы имеют одинаковые диапазоны изменения индекса, но содержат разные части тела исходного цикла. 2
Перед оптимизацией следует убедиться, что программа работает корректно. 3 После каждого этапа оптимизации рекомендуется сохранять промежуточную копию программы, чтобы в случае обнаружения ошибок можно было сделать откат к работающей версии. 3