Будьте вежливы с кэшем (перевод вводной статьи) (комментарии)
Это сообщение сгенерировано автоматически.
Случайно наткнулся на статью, и понял что у меня код ужасный, так как я везде использую указатели.
Теперь буду проводить реструктуризацию данных.
Anders333
вот еще посмотри, там немного наглядной информации для сравнения
вот еще немного от
Главное чтоб эти все оптимезации не убили читабельность кода
Mira
> Главное чтоб эти все оптимезации не убили читабельность кода
Ещё больший вопрос в гибкости. Сколько будет стоит что-то поменять в супер-пупер оптимизированном под кэш коде ?
innuendo
Mira
читаемость субъективна
lemuxube
вот взять тот же пример из статьи:
держать массив крупных объектов не кеш-френдли, так как пробегание по нему захламляет кеш.
предлагается хранить объекты в другом месте и держать только массив с указателями и статусом. в одном месте подобный маневр еще терпим, но когда кода много и весь код состоит из
оптимизаций подобного рода - это ахунг.
мало-ли по какому еще параметру ты будешь выполнять в этом массиве поиск и тебе все равно пидется лезть во все структуры только еще через ссылку. сколько там раз пролетит кеш остается только гадать)
кеш вообще штука коварная на разных ЦПУ и разных компиляторах с их оптимизациями результаты могут быть разные, вон я как-то давно запускал из директикса демку
демонстирурующую сортировку вершин под кеш видяхи, да сортировка норм вывозила.
не так давно запустил ее же уже на нынешнем железе, демка рисовала все одинаково что сортированые что нет, только при multistrip адски просела
также взять с SSE , на старом разница была, хоть не большая при операциях с выровненной памятью и не выровненной. не давно писал чето на SSE разницы не заметил что крутишь команды U.. что A...
Вот что значит быть больше про финансы, чем про программирование. Ожидал в статье что-то про CASH ))))))))
Mira
> но когда кода много и весь код состоит из
> оптимизаций подобного рода - это ахунг.
все зависит от того как код написан. любой сложный код будет сложно читать, в данном случае есть причина в усложнении.
Mira
> мало-ли по какому еще параметру ты будешь выполнять в этом массиве поиск
прежде чем делать эту оптимизацию уже нужно знать по какому параметру будет поиск. если поиск нужен по всем параметрам, то есть смысл разложить все параметры по SoA.
Mira
> кеш вообще штука коварная на разных ЦПУ и разных компиляторах с их
> оптимизациями результаты могут быть разные
да, но код оптимизированый под кеш чаще всего быстрее кода неоптимизированого под кеш, ибо доступ в память нынче дорог и эта цена растет.
в видео есть сравнение - один кеш мис эквивалентен 500 инструкциям без него.
Mira
> демонстирурующую сортировку вершин под кеш видяхи, да сортировка норм вывозила.
таки не нужно это сравнивать. это оптимизация совсем другого рода. у них общего только название.
Mira
> также взять с SSE , на старом разница была, хоть не большая при операциях с
> выровненной памятью и не выровненной. не давно писал чето на SSE разницы не
> заметил что крутишь команды U.. что A...
ты сравнивал инструкцию на выровненных и не выровненных данных или обе на выровнянных,
lemuxube
Спасибо, просмотрю.
Я после статьи нашел и прочитал вот эту книгу:
http://live13.livejournal.com/462582.html
Там нашёл для себя много полезного.
lemuxube
> ты сравнивал инструкцию на выровненных и не выровненных данных или обе на
> выровнянных,
на разных
lemuxube
> прежде чем делать эту оптимизацию уже нужно знать по какому параметру будет
> поиск. если поиск нужен по всем параметрам, то есть смысл разложить все
> параметры по SoA.
я считаю что подобные оптимизации нужно делать когда лень делать все остальное, или уже просто нечего делать. изначально этим париться не надо так как архитектуру особо не изменит подобная доработка.
будет лучше - збс.
не будет - пох, зато на обложке диска можно смело написать с "с продвинутой оптимизацией кеша"
lemuxube
> да, но код оптимизированый под кеш чаще всего быстрее кода неоптимизированого
> под кеш, ибо доступ в память нынче дорог и эта цена растет.
> в видео есть сравнение - один кеш мис эквивалентен 500 инструкциям без него.
Это всё синтетические примеры на кубиках. Пусть покажут пример с реального приложения.
innuendo
> Это всё синтетические примеры на кубиках. Пусть покажут пример с реального
> приложения.
а в чем разница?
lemuxube
> а в чем разница?
Посмотри код CE\UE
Я у себя попробую на частицах без кэш мисов, но после 10-го думаю. Отпишусь о результатах.
Тема в архиве.