Ist es möglich, ein vollständiges Linux-System mit Intels Compiler anstelle von GCC zu kompilieren?

26

Möglicherweise gibt es einige Kompatibilitätsprobleme?

Ich habe den Eindruck, dass der Intel-Compiler bei Intel-basierten Systemen möglicherweise eine bessere Leistung erbringen würde als GCC. Vielleicht gibt es schon eine Distribution, die das versucht hat?

Ich würde denken, dass dies mit Gentoo ziemlich einfach sein könnte.

Barrymac
quelle
4
Einige gute Infos hier, die ich vorher hätte finden sollen! gentoo-wiki.info/HOWTO_ICC_and_Portage
barrymac
5
Ich muss mich über Ihre Prämisse wundern: Wie beurteilen Sie, welcher Compiler "einen besseren Job" macht? Schnellere Codeausführung? Kleinere Binärdateien? Schnellere Kompilierungszeit?
Eli Heady
1
Ich würde es zuerst an schnellerem Code messen, zweitens an kleineren Binärdateien, aber ich würde mich nicht wirklich für die Binärgröße interessieren, es sei denn, es wäre ziemlich dramatisch. Vielleicht könnte ein weiteres
Problem die

Antworten:

29

Mit icc können Sie nicht alles kompilieren. Viele Programme verwenden GCC-Erweiterungen für die C-Sprache. Intel hat jedoch große Anstrengungen unternommen, um die meisten dieser Erweiterungen zu unterstützen. Beispielsweise können neuere Versionen von icc den Linux-Kernel kompilieren.

Gentoo ist in der Tat die beste Wahl, wenn Sie Ihre Software auf ungewöhnliche Weise neu kompilieren möchten. Die icc Seite im Gentoo Wiki beschreibt die wichtigsten Hürden.

Führen Sie zuerst eine grundlegende Gentoo-Installation durch, und emerge icc. Entfernen Sie icc nicht später, solange Sie eine mit icc kompilierte Binärdatei auf Ihrem System haben. Beachten Sie, dass icc in installiert ist /opt. Befindet sich das nicht auf Ihrer Root-Partition, müssen Sie die icc-Bibliotheken auf Ihre Root-Partition kopieren, wenn eines der beim Booten verwendeten Programme mit icc kompiliert wird.

Richten Sie /etc/portage/bashrcund erklären , um Ihre Lieblings - Kompilierungsoptionen; Im Gentoo-Wiki finden Sie ein ausführlicheres Skript, das das Erstellen verschiedener Pakete mit verschiedenen Compilern unterstützt (dies ist erforderlich, da icc einige Pakete beschädigt).

export OCC="icc" CFLAGS="-O2 -gcc"
export OCXX="icpc" CXXFLAGS="$CFLAGS"
export CC_FOR_BUILD="${OCC}"
Gilles 'SO - hör auf böse zu sein'
quelle
13

Es wäre sicherlich eine interessante Erfahrung. Das erneute Kompilieren einer gesamten Linux-Distribution mit einem alternativen Compiler wäre jedoch nicht ganz einfach. Viele wichtige Pakete hängen von GCC und anderen GNU-Toolchain-Dienstprogrammen ab.

Es wäre möglich, einen alternativen Compiler für Pakete zu verwenden, für die kein GCC zum Erstellen eines Hybrids erforderlich ist. Es ist möglicherweise möglich, GCC-abhängige Pakete durch andere zu ersetzen, die mit Ihrem Compiler erstellt wurden. In den meisten Fällen gibt es jedoch nicht zu viele Alternativen. Wo es solche gibt, müssen Sie feststellen, ob diese Alternativen für Ihre beabsichtigte Verwendung geeignet sind.

Die eigentliche Frage ist jedoch: Wäre es das wert? Wenn Sie versuchen, ein eingebettetes System zu erstellen, kann ein alternativer Compiler kleinere Binärdateien erzeugen. Wenn Sie einen Compute-Cluster erstellen, erhalten Sie möglicherweise eine schnellere Codeausführung. Wenn Sie einen Desktop erstellen, erhalten Sie eine großartige Lernerfahrung.

Ich denke, am Ende (vorausgesetzt, Sie erstellen einen Desktop) werden Sie feststellen, wie viele Benutzer von Quelldistributionen letztendlich entscheiden: Die Zeit, die für die Optimierung und das Erstellen und Neuerstellen aufgewendet wird, überwiegt bei weitem die Zeit, die durch eine schnellere Codeausführung eingespart wird. Das soll nicht heißen, dass es nicht gemacht werden sollte - es könnte ziemlich lustig sein. Wenn Sie dies tun, ist diese Site ein großartiger Ort, um Antworten zu finden und Ihre Bemühungen zu dokumentieren.

Eli Heady
quelle