Мне интересно, как можно сравнить векторизованный код с его не векторизованной версией? Например, у меня есть простой код Fortran, и я скомпилирую его с -O2
включить автоматическую векторизацию. После этого я вижу из отчета по оптимизации, что цикл был векторизован. Теперь, если я хочу сравнить этот векторизованный код с его не векторизованной версией, я должен скомпилировать тот же код с -O2 -no-vec
или же -O1
или даже -O0
? Ну, исходя из моего опыта, оба -O2 -no-vec
а также -O1
не дают никаких существенных различий, хотя первое всегда немного лучше. Однако, если я сравню -O2
а также -O0
результаты значительно различаются, что больше, чем число векторных ширин; поэтому я уверен, что не стоит сравнивать их, чтобы подчеркнуть преимущества векторизации. Итак, я хотел бы только знать, должен ли я сравнить -O2
с -O2 -no-vec
или же -O1
так как я читал много журналов, которые никогда не объясняли этот вопрос в деталях, а только указывали, например, «… по сравнению с его не векторизованной версией, векторизованный код достигает …»
Уровень оптимизации компилятора охватывает множество отдельных оптимизаций, а не только векторизацию. Это может быть математическая модель, раскручивание петли …
Результаты будут отличаться для всех этих, так что да, деактивируйте подпрограммы векторизации вашего компилятора (не указано …), чтобы увидеть различия, сделанные только векторизацией.
Вы не должны идти на более низкую оптимизацию из-за этих других оптимизаций, которые могут добавить числовые различия самостоятельно.
Других решений пока нет …