Одна старая история про компиляторы. Дело было в 2007-2010-х годах, в бытность моей работы в Intel. Пролетал тогда знатный вой, что, дескать, берём тесты для компиляторов, которыми все меряются (у них тоже, как у мальчиков свои линейки и свои сантиметры). Берём интеловский компилятор и видим, как он невероятно хорош. Чуть-чуть модифицируем тесты, и интеловский компилятор уже показывает такую же производительность, как и открытый конкурент - GCC. А всё потому что Intel свой компилятор заточил под тесты и маркетинг, а не для боевых задач. Тогда над этой историей все залихватски посмеялись. "И так понятно", что при капитализме красивый отчёт в рекламном буклете важнее чем работающий продукт. Прошло больше десяти лет. Начал постигать компиляторы, и теперь имею что сказать. "Чуть-чуть модифицируем тесты" - как много в этом звуке. Не буду повторять про заезженные всеми неопрятно вставленные call и branch посреди вычислений, провожающие ваш компилятор с пляжа под улюлюканье конкурентов (которые сами тайком молятся, чтобы им этот call/branch не прописали). А расскажу про менее очевидную вещь. Например, есть многомерные массивы, а есть их моделирование через одномерные, которое эквивалентно по вычислениям и доступам к памяти: aij и ai * n + j С точки зрения программиста-обывателя, это одно и то же. Но с точки зрения компилятора... Рассмотрим задачу анализа зависимостей по данным в операциях. Анализ зависимостей нужен, чтобы принять решение о применении таких сильных оптимизаций как анроллинг и векторизация. Если анализ возможен и даёт ответ "независимы", оптимизации применяются, код ускоряется в разы. Иначе оптимизации отклоняются. Например, компилятор должен провести анализ зависимостей для такой задачи (частый случай): многомерный массив: for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) aC * i + DE * j + F = aG * i + HK * j + L; "эквивалентная" одномерная имитация: for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) a(C * i + D) * n + E * j + F = a(G * i + H) * n + K * j + L; где C, D, E, E, F, G, H, K, L - константы. Задача анализа с многомерным массивом сводится к вопросу: имеет ли система линейных диофантовых уравнений с _постоянными_ коэффициентами решение при заданных ограничениях: C * i_1 + D = G * i_2 + H E * j_1 + F = K * j_2 + L Эта задача хорошо изучена, во многих случаях она даёт точный ответ, и не только наличие решения, но и минимальные по модулю i_2 - i_1 и j_2 - j_1, что тоже важно, т.к. при некоторых их значениях оптимизации всё равно допустимы, но детали опущу. А вот для "эквивалентной" одномерной имитации нужно ответить на аналогичный вопрос для линейного диофантова уравнения с _неизвестными_ коэффициентами (число n компилятору неизвестно): (C * i_1 + D) * n + E * j _1+ F = (G * i_2 + H) * n + K * j_2 + L Такого рода уравнения анализируются значительно хуже. Можно сказать, что в большинстве случаев компилятор откажется от его анализа. Это был не самый очевидный пример про то как "чуть-чуть" поправили код на "эквивалентный", всем же очевидно, и получили просад по производительности в разы. Надо будет, наверное, этот пример на конференцию вытащить, очень уж красив.