Недавно прочитал, что основная причина, по которой fortran быстрее, чем c/c++ в числовых вычислениях, заключается в том, что нет сглаживания указателя.
По-видимому, использование ключевых слов restrict
или __restrict__
позволяет в каждом конкретном случае указывать на отсутствие алиасинга указателя для данного элемента памяти.
Компилятор icc, по-видимому, имеет опцию -fno-alias
, которая позволяет глобально предположить, что псевдонимы отсутствуют. В gcc есть -fno-strict-aliasing
, который применяется только к подмножеству всех ситуаций с псевдонимами.
Есть ли опция в gcc или есть случаи, когда псевдонимы не предполагаются при использовании определенных флагов оптимизации?
-fno-strict-aliasing
GCC, у вас все наоборот. Параметр заставляет компилятор беспокоиться о том, что могут существовать некоторые псевдонимы. По умолчанию предполагается, что эти псевдонимы не существуют. - person Pascal Cuoq   schedule 04.09.2011restrict
имеет значение, на самом деле довольно редки, и обычно довольно очевидно, где оно имеет значение. Этот документ весьма информативен и подчеркивает тот факт, что порядок загрузки и хранения также имеет значение. Но, как я уже говорил, случаи, когда вы будете использовать такую оптимизацию, довольно очевидны. - person Alexandre C.   schedule 04.09.2011GCC
имеет что-то похожее на - person Royi   schedule 01.05.2020