# Verständnisfrage CLFAG CHOST

## sessa

Hallo,

ich bin gentoo newbie und lese bereits einiger Zeit nur hab ich noch immer nicht zu 100 % verstanden wie die beiden genau zusammenhängen.

Wenn ich das richtig verstanden habe ist wird mit der CLFAG der Compiler angewiesen welche Optimierungen genutzt werden. 

z.B. CFLAGS="-Os -march=athlon64 -pipe -fomit-frame-pointer" 

Was ja bedeutet das alle Athlon64 Optimierungen genutzt werden und wenn dann die CHOST

z.B. CHOST="i586-pc-linux-gnu"

so aussieht, die 32 Bit Architektur verwendet wird und auf dem I586 läuft aber auch 3DNOW 3DNOWEXT SSE SSE2 unterstützt wird.

Somit kann ich doch nach erfolgreichem neukompilieren der Quellen ohne weiteres den CHOST auf pentium-m (ist der mit den meisten funktionen und halt SSE2) ändern und muss nur emerge -avt gcc und emerge -avt python ausführen. 

Hab ich das so richtig verstanden und wenn ja bringt das überhaupt einen Geschwindigkeitsvorteil?

Danke im voraus für die Hilfe.

Gruß sessa

----------

## sirro

CHOST sollte man eigentlich gar nicht ändern.

 *http://www.gentoo.org/doc/en/change-chost.xml wrote:*   

> Changing the CHOST is a big issue that can seriously screw up your system

 

Wenn du auf Pentium M wechseln willst, könntest du zuerst auf -march=i686 gehen und dann wenn der Pentium M eingebaut ist die entsprechende march setzen.

----------

## Max Steel

Moment, die CHost sollte man nie ändern, sie beschreibt die Architektur des Systems.

Was du mit auf pentium-m ändern womöglich meinst ist die CFlag Variable. und da -march, allerdings macht es auch PRobleme wenn die CPU ein AMD Athlon 64.

Also CHost nicht anfassen, außer du weißt was du tust und [1] beachtest.

Allerdings wäre es viel einfacher eine neuinstallation zum ändern der CHost zu machen.

die CFlags kannst du immer ändern, auch hier gibt es sicheres und unsicheres wobei ich dashier empfehle [2]

CHost beschreibt die Architektur des Systems

CFlags dagegen wie du schon richtig beschriebst die Optimierungen für den Compiler die er anwendet, es gibt Optimierungen die bringen etwas, schon allein hier im deutschen Teil gibt es massig Diskussionsthreads darüber.

Wobei ich für einen Athlon 64 dashier empfehle:

```
-O2 -march=athlon64 -pipe -fomit-frame-pointer
```

Wenn du auf einen Pentium-m wechselst (warum auch immer) dann würde ich erst auf i686 runter gehen mit den Optimierungen und nach dem einbau, bzw, umzug aufs Laptop oder sonstwas auf die aktuelle CPU upgraden.

Laut [2]

```
-march=pentium-m -O2 -pipe -fomit-frame-pointer
```

Aber da würde ich immer selber nachschauen und auch cat /proc/cpuinfo zu rate ziehen.

[1] http://gentoo-wiki.com/HOWTO_change_CHOST_relatively_safely

[2] http://gentoo-wiki.com/Safe_Cflags

PS: Da war einer schneller.

//Endgültige Fassung!

----------

## sessa

wow schnelle antwort

@ sirro

Ok, das hatte ich auch gelesen, nur ging es mir darum, wenn ich eh alle Packete mit march-Athlon64 erstellt hab und bei der Architektur bei 32 bit bleiben möchte kann ich doch auch den CHOST ändern. i586 Dient dann nur noch zur abwärtskompatibilität und der pentium-m ist der 32 Bit Prozessor ist der am meisten funktionen meines Athlon64 hat.

@ max steel

Wenn ich das jetzt richtig verstanden hab ist der CHOST immer der kleinste gemeinsame nenner und die CFLAGS sind Erweiterungen. Dann brauch ich auch den CHOST nicht ändern wenn eh das vom CFLAGS immer mit dabei ist.

Ich dachte nur es wäre für die Performance besser wenn ich eh mit den CFLAGS kompiliere den CHOST mit den meisten Erweiterungen nehme die der Ahtlon64 eh alle integriert hat.  Die Anleitung hatte ich gelesen, ich hab nur nirgends eine Erklärung gefunden wie beide zusammenhängen. nach ca. 2,5 Std. Suche dachte ich, ich frag einfach.

Danke und gruß sessaLast edited by sessa on Sun Apr 06, 2008 5:29 pm; edited 1 time in total

----------

## s.hase

 *sessa wrote:*   

> 
> 
> Ok, das hatte ich auch gelesen, nur ging es mir darum, wenn ich eh alle Packete mit march-Athlon64 erstellt hab und bei der Architektur bei 32 bit bleiben möchte kann ich doch auch den CHOST ändern. i586 Dient dann nur noch zur abwärtskompatibilität und der pentium-m ist der 32 Bit Prozessor ist der am meisten funktionen meines Athlon64 hat.
> 
> 

 

Wozu möchtest Du den die CFLAGS ändern? Wenn Du einen Athlon64 hast lass das so, was willst Du dann mit CFLAGS für nen Pentium-M? Der CHOST sollte bei Dir außerdem eigentlich so aussehen:

```

CHOST="i686-pc-linux-gnu"

```

Oder hast Du irgendwie vor den Prozessor zu tauschen? Wenn ja ist der Weg über die CFLAGS von nem Pentium-M eigentlich auch unnötig. Alle neueren Prozessoren sollten damit auch zurecht kommen.

----------

## sessa

Hi, ich wollte den Pentium-M als CHOST nutzen, da der fast alle Erweiterungen des Athlon64 hat aber noch 32 bit nutzt.

----------

## schmidicom

Ich finde es irgendwie unsinnig ein 32bit System zu bauen wenn man die gelegenheit hat sich ein 64bit System zu bauen.

Das ist als ob man einen alten Knacker hinter das Steuer eines Rennautos setzt und dieser dann nur die Mindestgeschwindigkeit fährt.

----------

## s.hase

 *sessa wrote:*   

> Hi, ich wollte den Pentium-M als CHOST nutzen, da der fast alle Erweiterungen des Athlon64 hat aber noch 32 bit nutzt.

 

Pentium-M gibt es nicht als CHOST, außerdem ist "i686-pc-linux-gnu" auch 32-bit. Guck doch bitte noch einmal genauer in den schon geposteten Link. Übernimm die Einstellung für 32-bit und fertig.

----------

## sessa

Hi,

danke nochmal für die Hilfe.

Sorry stimmt es gibt  kein pentium-m als CHOST, da hat mein Gehirn wohl irgendwie nach dem ganzen suchen und lesen alles durcheinander geworfen  :Embarassed:  . So ergibt das jetzt auch alles viel mehr sinn.  :Idea: 

Ich habe mich für 32 bit und nicht für 64 bit entschieden, da ich eh keine 4Gb RAM hab und ich so keine Vorteile sehe die 64 Bit Version zu verwenden.

Also sollte es so richtig sein für SSE und 3dnow erweiterungen und 32 Bit

CFLAGS="-Os -march=athlon64 -pipe -fomit-frame-pointer"

CHOST="i686-pc-linux-gnu"  

gruß sessa

----------

## Max Steel

richtig allerdings würde ich dir empfehlen statt -Os, das man normalerweise für kleinere Rechner (Festplattenplatz/LEistung) oder embedded Systeme verwendet, -O2 verwenden.

Außerdem für sse 3dnow 3dnowext sse2 mmx mmxext weiß der Geierr gibt es als allgemeine Useflags die in die USE kommen.

siehe dazu:

/usr/portage/profiles/use.desc

/usr/portage/profiles/use.local.desc

----------

