Я выполняю оптимизацию на C-петлях, и я просто читаю разматывание и аккумуляторы. Если данные не зависят друг от друга в цикле, использование разворачивания и аккумуляторов действительно использует параллелизм, и код заканчивается быстрее.Ограничения разворота цикла C?
Так что моя наивная мысль была, Почему бы не добавить больше аккумуляторов и развернуть еще раз?
Я сделал это и заметил, что уменьшение сокращения средних циклов на элемент уменьшалось.
Мой вопрос: Почему?
A: Это потому, что у нас заканчиваются регистры для работы одновременно, а информация должна храниться в памяти?
B: Или это потому, что «цикл очистки» должен обрабатывать больше элементов после развернутого цикла?
Это сочетание A и B?
Не забывайте, что разгрузка кладет большую нагрузку на кеш инструкций. –
Не кеш команд L1 достаточно велик, чтобы обрабатывать 16 неподписанных ints? Поскольку я иду от 8 до 16 аккумуляторов/разворачиваний, это преимущество незначительно. – SSOPLIF
@filposs: Кэш трассировки, конечно же, нет. Я думаю, что он подходит только для 50-100 мкп. – Dolda2000