Почему библиотекам нужна жестко закодированная векторизация вместо автоматической векторизации компилятора

Собственная библиотека C ++ выполняет векторизацию для различных архитектур, таких как SSE, NEON и т. Д. В своей документации они упоминали, что векторизация Eigen не зависит от компилятора. Но большинство современных компиляторов, таких как gcc, выполняют векторизацию автоматически, если флаг векторизации включен с использованием флага -O3.

Поэтому мой вопрос: почему Eigen или любые другие библиотеки выполняют жестко закодированную векторизацию, когда компиляторы делают это автоматически для нас?

0

Решение

Это правда, что компиляторы становятся все лучше и лучше при автоматической векторизации, и для базовых операций с коэффициентами, таких как 2 * A-4 * B, библиотека, подобная Eigen, не может работать намного лучше, чем последние компиляторы. Однако для немного более сложных выражений, таких как матричные произведения, сокращения, транспонирование, степени и т. Д., Компилятор не может многое сделать. С другой стороны, Eigen может воспользоваться знанием более высокого уровня семантического выражения для явной их векторизации. Более того, сложные скалярные типы не векторизованы компиляторами. Вы можете проверить сами, отключив явную векторизацию Эйгена (-DEIGEN_DONT_VECTORIZE).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]