Comments 11
Спасибо, очень дельное замечание. Стоит только отметить, что поддержка C++11 тоже весьма ограничена в компиляторах, поэтому проблема при переходе на другой компилятор тоже возникнет, но в будущем более правильное решение для С++. Скажем, alignas начали поддерживать в Intel C++ только с версии 15.0 (aka Intel Parallel Studio XE 2015 Composer Edition for C++).
0
Вы удивили. В каких компиляторах поддержка C++11 весьма ограничена на сегодня? Если верить инфографике и другим данным, то (по крайней мере) не в 95% самых используемых.
0
Ну, в таком случае, если верить приведенной вами инфографике и этой статье MSDN, как минимум 41% (36% VS и 5 % Intel) поддерживают alignas только в последних релизах (VS2015, Intel Compiler 15.0). Вряд ли все уже поставили себе VS2015, не правда ли? На gcc даже не смотрел к какой версии стали поддерживать, её попроще достать.
А вообще, учитывая «небесплатность» некоторых компиляторов (в частности от Intel), разработчики далеко не всегда спешат ставить самую последнюю версию, предпочитая оставаться на какой-то одной по 2-3 года. Я к тому, что ещё не у всех стоят версии компиляторов, поддерживающие alignment фичи из С++11. Не вижу в этом ничего удивительного.
А вообще, учитывая «небесплатность» некоторых компиляторов (в частности от Intel), разработчики далеко не всегда спешат ставить самую последнюю версию, предпочитая оставаться на какой-то одной по 2-3 года. Я к тому, что ещё не у всех стоят версии компиляторов, поддерживающие alignment фичи из С++11. Не вижу в этом ничего удивительного.
+1
Не совсем уловил, так компилятор оптимизирует такие циклы в векторные операции или нет? Я сейчас как раз пытаюсь вручную в своём проекте похожий цикл оптимизировать, используя встроенные векторные функции (compiler intrisincs). Может я зря заморачиваюсь и достаточно включить поддержку SSE/AVX и выровнять данные?
0
Хотелось бы узнать о тех случаях, когда компилятор «не справляется» с автоматической генерацией выровненных инструкций. Помимо случаев, когда размер определяется динамически в рантайме, конечно.
0
Компилятор часто делает несколько веток или пытается выравнять через peel loop в случаях, когда ничего не знает о выравнивании.
Ну и как я говорил, он не стесняется использовать невыравненные инструкции, потому что по скорости они на современных процессорах не проигрывают выравненным (при условии выравненных данных).
Ну и как я говорил, он не стесняется использовать невыравненные инструкции, потому что по скорости они на современных процессорах не проигрывают выравненным (при условии выравненных данных).
0
Маловато у вас данных…
0
Sign up to leave a comment.
«Ра-а-авняйсь, смирно!». Выравниваем данные