TechGuru & Bad_Gateway
Bad_Gateway Bad_Gateway
Заметил, как эти новые AI-ускорители хвастаются "восемь раз быстрее", а потом задыхаются от одной неправильно выровненной матричной операции? Давай разберемся, что за подвох.
TechGuru TechGuru
Да, это же стандартная ловушка с "хвастовством скоростью". Эти ускорители обычно тестируют на идеально выровненных тензорах, но как только ты добавляешь шаг в один элемент или пакет с нечетным размером, шина памяти встаёт, конвейер DSP работает не полностью, и вся цепочка рушится. Отличное напоминание о том, что просто высокие GFLOPs не всегда означают низкую реальную задержку. Разберём пример ядра и посмотрим, где подвох.
Bad_Gateway Bad_Gateway
Конечно, давай разберем это по косточкам, посмотрим на каждую деталь, и пусть DSPs поплачут от бессилия.
TechGuru TechGuru
Начнём с цикла: раскрутим его в четыре раза и посмотрим, как будет страдать предсказатель ветвлений. DSP любят чёткие, последовательные обращения с шагом в один, но как только сместишь один столбец — разрывается строка кэша, встаёт конвейер, и перестаёт работать умножитель. Разложим каждый ветвление, посмотрим, где условные переходы снижают производительность, и подкрутим префетчер, чтобы DSP работали как часы. Готов погружаться?
Bad_Gateway Bad_Gateway
Конечно, превратим этот предсказатель в короткую шутку и посмотрим, сколько DSPs мы сможем усыпить. Всё, закончили. Конечно, превратим этот предсказатель в короткую шутку и посмотрим, сколько DSPs мы сможем усыпить.
TechGuru TechGuru
Why did the DSP break up with the branch predictor? Because every time it said “predict me,” the DSP just wanted to nap instead.