PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie Programme mit ICC kompilieren?


Aqualon
2004-10-31, 17:56:42
Hi!

Ich habe mit Compilern noch recht wenig Ahnung und spiele gerade mit dem ICC 8.0.055 rum. Ich habe diesen mit emerge installiert und kann auch kleinere Programme damit kompilieren.

Wie funktioniert das jetzt bei etwas größeren Sachen, die ein Makefile dabei haben. Kann man dieses mit dem ICC verwenden und wenn ja, wie?

Desweiteren muss ich immer den kompletten Pfad des ICC angeben (/opt/intel/compiler80/bin/icc), um ihn aufzurufen. Kann man das in Gentoo irgendwie einrichten, dass es genauso wie bei anderen Programmen funktioniert, die man ja auch einfach so starten kann?

Aqua

Edit: Das Problem mit dem Pfad hat sich nach einem Neustart erledigt gehabt.

Ganon
2004-10-31, 18:18:35
Hi.

In den meisten makefiles steht als Compiler "gcc" oder "g++" fest drinne. Also entsprechend in deinen Compiler umändern, wenn möglich. Da steht meist:

CC = "gcc"
oder so.

Sofern man dem icc die selben Optionen wie dem gcc übergeben kann, könntest du natürlich auch den gcc umbenennen und einen Link gcc->icc machen. Empfehle ich aber nicht.

Inwiefern der icc alles Compilieren kann, weiß ich nicht. Denke mal das es hier und da Probleme geben kann.

Damit du icc ensprechend wie gcc starten kannst musst du "/opt/intel/compiler80/bin/" in deine PATH-Variable ausnehmen. Also vorher:

export PATH=$PATH:/opt/intel/compiler80/bin/

im Terminal eingeben, oder in die .bashrc in deinem Home-Verzeichnis, bzw. in die zentrale bashrc in deinem /etc-Verzeichnis.

Aqualon
2004-10-31, 19:04:01
Inwiefern der icc alles Compilieren kann, weiß ich nicht. Denke mal das es hier und da Probleme geben kann.
Dass er das nicht kann, ist mir klar und ich will ja nur schauen, ob ich ein paar Programme damit compilieren kann. Schneller als der GCC ist er auf meinem Celeron jedenfalls.

Transcode hat schon mal nicht hingehauen, aber vielleicht klappt es ja bei anderen Programmen.

Aqua

Ganon
2004-10-31, 23:36:42
Dass er das nicht kann, ist mir klar und ich will ja nur schauen, ob ich ein paar Programme damit compilieren kann. Schneller als der GCC ist er auf meinem Celeron jedenfalls.

Transcode hat schon mal nicht hingehauen, aber vielleicht klappt es ja bei anderen Programmen.

Aqua

Hi.

Klar ist er schneller. Teilweise kann er sogar doppelt so schnellen Code erzeugen wie der gcc. Vielleicht wäre es angebracht System-Routinen, wie z.B. die glibc, X-Server und Desktop noch mal mit ihm zu kompilieren, bzw. mal ausprobieren.

Transcode (bzw. dessen Bibliotheken) ist eigentlich schon vom Code aus auf SSE, etc. optimiert. Daher sollte es wohl nicht allzu viel bringen.

Coda
2004-11-01, 00:12:51
Nunja, GCC 3.5 dürfte ziemlich aufholen. Unter Windows ist VS.NET (und vor allem Widbey) auch nicht mehr sehr weit von ICC entfernt.

Gast
2004-11-01, 13:37:45
Nunja, GCC 3.5 dürfte ziemlich aufholen. Unter Windows ist VS.NET (und vor allem Widbey) auch nicht mehr sehr weit von ICC entfernt.
die zusammenhänge kannst du mir aber bitte mal näherbringen O.o

Coda
2004-11-01, 13:54:28
Nunja, ich wollte damit andeuten das ICC nicht mehr der "ubercompiler" ist, der er einmal war.

GCC 4.0 (sorry, 3.5 heißt er ja nicht mehr) hat ein völlig neues Backend das viele neue Optimierungsmöglichkeiten erlaubt.

stefan42
2004-11-05, 20:48:44
Ich finde, das mit der Geschwindigkeit wird beim ICC extrem übertrieben. Es gibt einige Benchmarks, in den ICC pathologisch schnell ist (z.B. SciMark, in dem ICC und zufällig auch SUN Java Server Hotspot alle anderen als aussehen lassen). Komisch ist nur, dass ich bei meinem eigenen Benchmark bestenfalls auf die GCC Runtime Performance komme - und damit bin ich nicht alleine. Es tauchen immer wieder Threads im ICC-Forum auf, die genau dieses Problem haben (Forum unter http://softwareforums.intel.com/ids/board?board.id=16, Beispiel http://softwareforums.intel.com/ids/board/message?board.id=16&message.id=1182&view=by_date_ascending&page=1 oder http://softwareforums.intel.com/ids/board/message?board.id=16&message.id=536&highlight=performance#M536 ). So pauschal kann man daher nicht sagen, dass ICC immer schneller wäre. Es gibt wohl einige Aufgabe (evtl. sogar Benchmarks), die besonders gut gemeistert werden und andere, die der ICC gar nicht mag...

Aqualon
2004-11-07, 23:28:39
Natürlich kann man nicht pauschal sagen, dass X schneller als Y ist (geht ja nirgends). Aber wenn man zwei Compiler zur Wahl hat, möchte man zumindest einmal vergleichen, ob man etwas dadurch herausholen kann.

Laut den von dir verlinkten Threads gibt es ja sowohl positive als auch negative Meldungen zur Performance des ICC.

Aqua

klutob
2004-11-29, 14:50:18
Nach einigem Knobeln habe ich es endlich Gentoo beigebracht. :)

1. Die neueste Version vom icc (l_cc_p_8.1.021_ev05.tar) laden (bessere Interaktion mit dem gcc!).
2. Das .tar file komplett entpacken und die .rpm Dateien (alle *.i386.rpm) mittels "rpm2targz" umwandeln. Die erhaltenen Archive nach "/op/intel_80_cc/" extrahieren und das License-File nach "/op/intel_80_cc/bin bzw. ../license/" kopieren.
3. Die Startscripte "/op/intel_80_cc/bin/icc bzw. icpc" modifizieren (evtl. abweichende gcc-Pfade beachten).
"icc"

#!/bin/sh

IA32ROOT=/opt/intel_cc_80; export IA32ROOT;
EFI2_INCLUDE1="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.3/include/"; export EFI2_INCLUDE1;
EFI2_GCC_LIB="/usr/lib"; export EFI2_GCC_LIB;
EFI2_DYNAMIC_LINKER="/lib/ld-linux.so.2"; export EFI2_DYNAMIC_LINKER;
EFI2_INCLUDE="/usr/include"; export EFI2_INCLUDE
EFI2_LINUX_DIR_NAME="/usr/lib/gcc-lib/i686-pc-linux-gnu/"; export EFI2_LINUX_DIR_NAME;

GCCROOT="/usr"; export GCCROOT;

if [ $# != 0 ]
then
exec -a "/opt/intel_cc_80/bin/icc" /opt/intel_cc_80/bin/iccbin "$@";
else
exec -a "/opt/intel_cc_80/bin/icc" /opt/intel_cc_80/bin/iccbin;
fi

"icpc"

#!/bin/sh


IA32ROOT=/opt/intel_cc_80; export IA32ROOT;
EFI2_INCLUDE1="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.3/include/"; export EFI2_INCLUDE1;
EFI2_GCC_LIB="/usr/lib"; export EFI2_GCC_LIB;
EFI2_DYNAMIC_LINKER="/lib/ld-linux.so.2"; export EFI2_DYNAMIC_LINKER;
EFI2_INCLUDE="/usr/include"; export EFI2_INCLUDE
EFI2_LINUX_DIR_NAME="/usr/lib/gcc-lib/i686-pc-linux-gnu"; export EFI2_LINUX_DIR_NAME;

GCCROOT="/usr"; export GCCROOT;

if [ $# != 0 ]
then
exec -a "/opt/intel_cc_80/bin/icpc" /opt/intel_cc_80/bin/iccbin "$@";
else
exec -a "/opt/intel_cc_80/bin/icpc" /opt/intel_cc_80/bin/iccbin;
fi


4. Eine "icc-env" Variable definieren. Dazu eine Datei "/etc/env.d/05icc" anlegen und mit

MANPATH="/opt/intel_cc_80/man"
ROOTPATH="/opt/intel_cc_80/bin"
PATH="/opt/intel_cc_80/bin"
INTEL_LICENSE_FILE="/opt/intel_cc_80/licenses"
LD_LIBRARY_PATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.3/:/opt/intel_cc_80/lib"
GXX_ROOT="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.3/"

zum Leben erwecken.

5. Ein icc-Profil anlegen. Die Datei "/etc/profile" nach z.B. "/etc/profile-icc" kopieren sowie dieser am Ende noch folgende Zeilen hinzufügen:

export CC=icc
export CXX=icpc
export AR=xiar
export LD=xild

6. Passende CFLAGS in der "make.conf" vorhalten.
(z.B. Athlon-xp hier)

CFLAGS=" -gcc-version=340 -cxxlib-gcc -O3 -QxK +FDO -Oi -Oa -pipe"


Zum Kompilerwechsel nun ein "env-update; source /etc/profile-icc"
ausführen (retour nat. dann mit "env-update; source /etc/profile").

Fertsch.