Comments 8
Цель этого урока — дать непрофессиональным программистам краткий обзор особенностей современного оборудования, которые нужно понимать, чтобы писать быстрый код.
да и многим «профессиональным» тоже не мешало бы прочитать…
Статья хорошая, но сейчас чудесные времена доя нищкоуровнего программирования.
Компиляторы — умные и simd инструкции подставляют сами, чередуют работу с памятью если идет обращение к ОЗУ и flash, как и банальные вещи, вроде замены деления на константу — умножением на обратное число, и т.п.
Декранч (разворот циклов) и inline — старые друзья стесненных по быстродействию программистов. Но тут тоже надо шире описывать, хоть на примере той же импульсной свертки
А, если надо повернуть точку в 3д пространстве, это довольно большое количество умножений и делений, порядка 9, которые чудесно заменяются сложениями и вычитаниями.
Это так, примеры из прошлого, которые иногда приходиться применять и сейчас.
Выравнивание больше не является проблемой..
В данном кейсе да, но, вообще — это очень часто хорошее поле для оптимизации, ведь чтение-запись больших массивов в оперативной памяти (например в играх) с помощью 64/128-битных команд по выровненным структурам — гораздо, гораздо быстрее.
Читал об этом в старой книге по архитектуре процессоров времен pentium III и Athlon — тогда эти наборы команд только недавно появились.
Спасибо, очень интересная статья.
Неприменимость SIMD к коду — лучший аргумент против break в циклах, а не какие-то там принципы структурного программирования.
Побалуюсь на Си с simd. Писал свое сравнение строк и памяти. Вроде бы уже получилось быстрее по скорости, чем версии из glibc, но посмотрю, что ещё можно выжать, убрав ветвления и выход из циклов.
Что ученые должны знать о железе для написания быстрого кода