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