TechGuru & Bad_Gateway
Заметил, как эти новые AI-ускорители хвастаются "восемь раз быстрее", а потом задыхаются от одной неправильно выровненной матричной операции? Давай разберемся, что за подвох.
Да, это же стандартная ловушка с "хвастовством скоростью". Эти ускорители обычно тестируют на идеально выровненных тензорах, но как только ты добавляешь шаг в один элемент или пакет с нечетным размером, шина памяти встаёт, конвейер DSP работает не полностью, и вся цепочка рушится. Отличное напоминание о том, что просто высокие GFLOPs не всегда означают низкую реальную задержку. Разберём пример ядра и посмотрим, где подвох.
Конечно, давай разберем это по косточкам, посмотрим на каждую деталь, и пусть DSPs поплачут от бессилия.
Начнём с цикла: раскрутим его в четыре раза и посмотрим, как будет страдать предсказатель ветвлений. DSP любят чёткие, последовательные обращения с шагом в один, но как только сместишь один столбец — разрывается строка кэша, встаёт конвейер, и перестаёт работать умножитель. Разложим каждый ветвление, посмотрим, где условные переходы снижают производительность, и подкрутим префетчер, чтобы DSP работали как часы. Готов погружаться?