Можно ли скомпилировать полную систему Linux с компилятором Intel вместо GCC?

26

Может быть, есть проблемы с совместимостью?

У меня сложилось впечатление, что для систем на базе Intel компилятор Intel мог бы работать лучше, чем GCC. Возможно, уже есть дистрибутив, который пытался это сделать?

Я думаю, что это может быть довольно просто, используя Gentoo.

barrymac
источник
4
Здесь есть хорошая информация, которую я должен был найти раньше! gentoo-wiki.info/HOWTO_ICC_and_Portage
barrymac
5
Я должен задаться вопросом о вашей предпосылке: как вы оцениваете, какой компилятор делает "лучшую работу"? Более быстрое выполнение кода? Меньшие двоичные файлы? Более быстрое время компиляции?
Эли Хеди
1
Сначала я оценил бы его по более быстрому коду, а потом по меньшим двоичным файлам, но на самом деле не сильно заботился бы о размере бинарных файлов, если бы он не был довольно драматичным. Возможно, еще одна проблема может быть энергоэффективности
Barrymac

Ответы:

29

Вы не сможете скомпилировать все с помощью ICC. Многие программы используют расширения GCC для языка Си. Однако Intel приложила немало усилий для поддержки большинства из этих расширений; например, последние версии icc могут компилировать ядро ​​Linux.

Gentoo действительно лучший выбор, если вы любите перекомпилировать свое программное обеспечение необычным способом. На странице icc в вики Gentoo описаны основные препятствия.

Сначала сделайте базовую установку Gentoo, и emerge icc. Не удаляйте icc позже, если в вашей системе есть двоичный файл, скомпилированный с icc. Обратите внимание, что ICC установлен в /opt; если этого нет в корневом разделе, вам необходимо скопировать библиотеки icc в корневой раздел, если какая-либо из программ, используемых во время загрузки, скомпилирована с помощью icc.

Установить /etc/portage/bashrcи объявить ваши любимые параметры компиляции; см. вики Gentoo для более подробного скрипта, который поддерживает сборку разных пакетов с разными компиляторами (это необходимо, потому что icc ломает некоторые пакеты).

export OCC="icc" CFLAGS="-O2 -gcc"
export OCXX="icpc" CXXFLAGS="$CFLAGS"
export CC_FOR_BUILD="${OCC}"
Жиль "ТАК - перестань быть злым"
источник
13

Это был бы интересный опыт. Однако перекомпиляция всего дистрибутива Linux с использованием альтернативного компилятора не будет простой. Многие необходимые пакеты зависят от GCC и других утилит GNU toolchain.

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

Но реальный вопрос: стоит ли это того? Если вы пытаетесь построить встраиваемую систему, альтернативный компилятор может создать меньшие двоичные файлы. Если вы строите вычислительный кластер, вы можете ускорить выполнение кода. Если вы создаете рабочий стол, вы получите отличный опыт обучения.

Я думаю, что в конце концов (если вы создаете настольный компьютер) вы поймете, что в действительности решают многие пользователи исходного дистрибутива: количество времени, потраченное на оптимизацию, сборку и перестройку, значительно превышает время, сэкономленное благодаря более быстрому выполнению кода. Это не значит, что этого не следует делать - это может быть довольно весело. Если вы сделаете это, этот сайт будет отличным местом для поиска ответов и документирования ваших усилий.

Эли Хедри
источник