Hardsimd
Что такое SIMD и vectorization?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
SIMD (Single Instruction Multiple Data) — одна инструкция обрабатывает несколько данных параллельно. SSE (128 бит = 4 float), AVX (256 бит = 8 float), AVX-512 (512 бит).
// Скалярный цикл
for (int i = 0; i < N; ++i)
c[i] = a[i] + b[i];
// Компилятор с -O3 -march=native может его авто-векторизовать.
// Ручная SIMD-версия через intrinsic:
void add4(const float* a, const float* b, float* c) {
__m128 va = _mm_load_ps(a);
__m128 vb = _mm_load_ps(b);
__m128 vc = _mm_add_ps(va, vb);
_mm_store_ps(c, vc); // 4 float за раз
}Ограничения для авто-векторизации: данные aligned, нет зависимостей между итерациями, минимум ветвлений. Ручная SIMD даёт 2–16x ускорение в обработке изображений, аудио, ML.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.