Транспортировка на C против C ++: диапазон инструкций процессора

Я рассматриваю вопрос переноса языка (доморощенного DSL) с C на C ++.

Более 15 лет я не занимался «нативным» программированием, поэтому хочу проверить свои предположения.

Правильно ли я полагаю, что переход на новейшую версию C ++ (17) позволит нативному компилятору использовать гораздо более широкий диапазон «современных» инструкций процессора Intel / AMD, что приведет к более эффективному исполняемому файлу (помимо многопоточности / памяти) -модель C ++, которая уже сама по себе кажется достаточной причиной для перехода на C ++)?

Иными словами, разве большая часть «более свежих» инструкций ЦП никогда не генерировалась компилятором C, просто потому, что в нем слишком мало информации о намерениях программиста из-за более простого синтаксиса C? Я знаю, что могу получить доступ ко всем инструкциям процессора с помощью ассемблера, но это именно то, что я не хочу делать. В идеале, я бы хотел, чтобы сгенерированный код был как можно более независимым от платформы.

0

Решение

Все ваши предположения о связи между языком программирования и «современными инструкциями ЦП» неверны.

Давайте рассмотрим коллекцию компиляторов GNU.

Выбор языка здесь не имеет большого значения, так как все пользовательские интерфейсы в конечном итоге генерируют одну и ту же промежуточную форму, называемую GIMPLE. Оптимизирующие проходы затем работают над этим.

Диапазон команд CPU, которые могут быть выданы, контролируется -mtune вариант. Для x86 GCC способен выдавать современные инструкции AVX 512 при оптимизации какого-то очень наглядного C-кода. Автоматическая петля векторизации — мощная вещь. Попробуйте это: реализовать memcpy и посмотрите на сгенерированную сборку.

Мой совет: генерируйте чистый, неумный C-код и повышайте уровень оптимизации. Точно так же, как если бы вы писали код вручную.

Вы можете также рассмотреть возможность реализации вашего языка непосредственно в качестве внешнего интерфейса для GCC или LLVM, без перехода на C или C ++. LLVM был разработан для этой цели, чтобы упростить внедрение новых языков и при этом использовать преимущества современных подходов к оптимизации.

5

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

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

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