Как написать код на C ++, который компилятор может эффективно компилировать в SSE или AVX?

Допустим, у меня есть функция, написанная на с ++, которая выполняет умножение матрицы на множество векторов. Требуется указатель на массив векторов для преобразования. Правильно ли я предположил, что компилятор не может эффективно оптимизировать это для SIMD-инструкций, потому что он не знает выравнивания переданного указателя (требующего выравнивания 16 байтов для SSE или выравнивания 32 байтов для AVX) во время компиляции? Или выравнивание памяти данных не имеет значения для оптимального кода SIMD, и выравнивание данных будет влиять только на производительность кэша?

Если выравнивание важно для сгенерированного кода, как я могу сообщить компилятору (Visual C ++), что я намерен передавать только значения с определенным выравниванием в функцию?

Ответы на вопрос(2)

Ваш ответ на вопрос