View previous topic :: View next topic |
Author |
Message |
Erdie Advocate
Joined: 20 May 2004 Posts: 2576 Location: Heidelberg - Germany
|
Posted: Wed Nov 26, 2014 5:52 pm Post subject: AMD Phenom II X4 - FX-4300 und 3dnow! |
|
|
Ich bin von Phenom II X4 auf FX-4300 migriert. IMHO unterstürzt der FX 3dnow! nicht mehr, welches ich aber als Flag in der make.conf stehen habe.
1. Muß ich neucompilieren oder wird das einfach ignoriert?
2. Was bedeutet das flag "3dnowprefetch", welches unter /proc/cpuinfo erscheint?
Danke
Erdie _________________ Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W |
|
Back to top |
|
|
Klaus Meier Advocate
Joined: 18 Apr 2005 Posts: 2908 Location: Bozen
|
Posted: Wed Nov 26, 2014 6:26 pm Post subject: |
|
|
Du löscht das Flag aus der make.conf und machst ein emerge -uDN world. |
|
Back to top |
|
|
franzf Advocate
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Wed Nov 26, 2014 6:55 pm Post subject: |
|
|
Klaus Meier wrote: | Du löscht das Flag aus der make.conf und machst ein emerge -uDN world. |
Tjo, wenns nur ein USE-Flag wär wäre das die Lösung. Aber hier geht es wohl um CFLAGS, die evtl. sogar automatisch über den march angeschalten wurden. Da hilft mMn. nur ein emerge -e world. Keine Ahnung ob das so ohne weiteres nach dem CPU-Tausch noch geht... |
|
Back to top |
|
|
Klaus Meier Advocate
Joined: 18 Apr 2005 Posts: 2908 Location: Bozen
|
Posted: Wed Nov 26, 2014 7:01 pm Post subject: |
|
|
Na wenn er die Kiste booten kann, dann wird es wohl gehen... Denke mal, der gcc wird kein 3dnow verwenden. |
|
Back to top |
|
|
Erdie Advocate
Joined: 20 May 2004 Posts: 2576 Location: Heidelberg - Germany
|
Posted: Wed Nov 26, 2014 7:19 pm Post subject: |
|
|
Die Cflags habe ich schon gändert. Der Rechner funktioniert seit Tagen problemlos obwohl ich (noch) nichts kompiliert habe. Aber es ist richtig, dass eine mit USE=3DNow! kompiliertes binary theoretisch auf einer CPU ohne 3DNow! Prolbeme bereiten sollte?
Es steht sowieso eine Switch von GCC 4.7 nach 4.8 an. Da kann man das doch gleich verbinden. _________________ Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W |
|
Back to top |
|
|
Klaus Meier Advocate
Joined: 18 Apr 2005 Posts: 2908 Location: Bozen
|
Posted: Wed Nov 26, 2014 7:37 pm Post subject: |
|
|
Ändern des Flags ohne Kompilieren bringt dir erst mal gar nichts. Was hast du denn bei -march gesetzt?
Des weiteren wird jetzt das Flag ja nur von einigen wenigen Paketen berücksichtigt. Es wird nur im Bereich Multimedia verwendet, es sollte eigentlich alles wichtige laufen. Wenn eine Anwendung diesen Code enthält und dieser Code wird von einer CPU ohne 3dnow Einheit ausgeführt, dann bumm.
Du solltest auf alle Fälle ein emerge -uDN world machen. Ob 3dnow Code per default ohne dieses Flag erzeugt wurde, kann ich so nicht sagen. Solltest du Abstürze bekommen, wäre ein emerge -e world angebracht. |
|
Back to top |
|
|
Erdie Advocate
Joined: 20 May 2004 Posts: 2576 Location: Heidelberg - Germany
|
Posted: Wed Nov 26, 2014 7:55 pm Post subject: |
|
|
Klaus Meier wrote: | Ändern des Flags ohne Kompilieren bringt dir erst mal gar nichts. Was hast du denn bei -march gesetzt?
|
Das ist schon klar ich habe für -march die Angaben für save cflags gesetzt, wie sie im wiki stehen. Dannach war mein Plan, im Laufe der Updatezyklen alles nach und nach zu bauen, da ich bei der CPU Abwärtskompatibilitt vermutet habe. Bei 3DNow scheint das nicht so zu sein. Mich wundert nur, das ffmpeg definitiv funktionierte, obwohl es mit 3DNow Unterstützung gebaut war. Ich möchte nur verstehen, warum das so ist. Nach meinem Verständnis hätte zumindest ffmpeg crashen müssen. Es funktioniert aber offenbar alles und ich habe keine Erklärung dafür. _________________ Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W |
|
Back to top |
|
|
franzf Advocate
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Wed Nov 26, 2014 8:44 pm Post subject: |
|
|
Mach mal cat /proc/cpuinfo und schau nach nem 3dnow in den flags, vielleicht wird es ja doch noch unterstützt.
USE=3dnow (oder sse oder avx) aktivieren meist eigene optimierte Codepfade: Besimmte Funktionen werden dann direkt in Assembler geschrieben. Normalerweise wird aber bei der Ausführung geschaut ob die CPU das überhaupt unterstützt.
Mit 3dnow in den CFLAGS entscheidet der Compiler, welchen Stellen er die entsprechenden Befehle spendiert. Ich kann mir sehr gut vorstellen, dass der GCC da einfach direkt SSE(x) Befehlssätze nimmt. Kann der alte Phenom ja, und AFAIK sogar den AVX. |
|
Back to top |
|
|
py-ro Veteran
Joined: 24 Sep 2002 Posts: 1734 Location: Velbert
|
Posted: Wed Nov 26, 2014 11:33 pm Post subject: |
|
|
3dnow ist eine sub optimale Erweiterung, deine CPU wird auch die diversen SSE Varianten kennen, die alle samt schneller sind, daher wird vermutlich in ffmpeg da wo optimierter code genutzt wird eher diese verwendet.
Bye
Py |
|
Back to top |
|
|
Erdie Advocate
Joined: 20 May 2004 Posts: 2576 Location: Heidelberg - Germany
|
Posted: Thu Nov 27, 2014 9:24 am Post subject: |
|
|
@Py-ro
das könnte ein Erklärung sein. Unter /proc/cpuinfo finde ich nur
3dnowprefetch und diverse sse Varianten bis sse4. Die habe ich jetzt alle gesetzt. Der Rechner macht jetzt ein -e world, da ich auf gcc 4.8.* umgestiegen bin. Dabei wird alles andere gleich mit erschlagen.
P.S: Deshalb auch meine Frage, was 3dnowprefetch sein soll, ein USE Flag in der der Art gibt es nicht. _________________ Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W |
|
Back to top |
|
|
Erdie Advocate
Joined: 20 May 2004 Posts: 2576 Location: Heidelberg - Germany
|
Posted: Fri Nov 28, 2014 8:47 am Post subject: |
|
|
-e @world lief überigens einwandfrei durch. Sowas hatte ich noch nie. Irgendwas hakt sonst immer. Das ist doch schon mal erste Sahne.
@Franz: Der Phenom kann bis sse3. Mit dem FX ist noch sse4 dazugekommen. _________________ Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W |
|
Back to top |
|
|
Klaus Meier Advocate
Joined: 18 Apr 2005 Posts: 2908 Location: Bozen
|
Posted: Fri Nov 28, 2014 1:42 pm Post subject: |
|
|
Mach dir doch jetzt keinen Stress... Was ist wichtiger? Dass es problemlos läuft oder dass du weißt, warum |
|
Back to top |
|
|
franzf Advocate
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Sat Nov 29, 2014 11:09 am Post subject: |
|
|
Klaus Meier wrote: | Mach dir doch jetzt keinen Stress... Was ist wichtiger? Dass es problemlos läuft oder dass du weißt, warum |
Dass er weiß warum, denn diese Erkenntnis hilft ihm vielleicht später weiter.
(Meine Meinung, ich doktor auch gern an Problemen rum, die sich irgendwann auf magische Weise von selbst gelöst haben - steckt auch oft ein fieser Bug dahinter ) |
|
Back to top |
|
|
Klaus Meier Advocate
Joined: 18 Apr 2005 Posts: 2908 Location: Bozen
|
Posted: Sat Nov 29, 2014 11:30 am Post subject: |
|
|
Ok, in diesem Fall ist es wohl gar nicht so schwer. Der gcc erzeugt keinen 3dnow Code, wenn eine bessere sse-Einheit verfügbar ist. |
|
Back to top |
|
|
kurisu Apprentice
Joined: 19 Jan 2011 Posts: 159 Location: Munich, Germany
|
Posted: Sun Nov 30, 2014 2:57 am Post subject: |
|
|
franzf wrote: | Klaus Meier wrote: | Mach dir doch jetzt keinen Stress... Was ist wichtiger? Dass es problemlos läuft oder dass du weißt, warum :roll: :roll: :roll: |
Dass er weiß warum, denn diese Erkenntnis hilft ihm vielleicht später weiter.
(Meine Meinung, ich doktor auch gern an Problemen rum, die sich irgendwann auf magische Weise von selbst gelöst haben - steckt auch oft ein fieser Bug dahinter ;)) |
+1
Gewiss verkörpert Erstzitiertes zweifellos einen pragmatischen Ansatz, nichtsdestominder ergibt sich daraus eine interessante Technik der Deduktion. Denn nicht zuletzt bin ich gerade deshalb bei Gentoo, weil ich gerne genau wissen möchte, weshalb etwas nicht funktioniert. Aber jedem, wie ihm beliebt. |
|
Back to top |
|
|
Klaus Meier Advocate
Joined: 18 Apr 2005 Posts: 2908 Location: Bozen
|
Posted: Sun Nov 30, 2014 5:53 am Post subject: |
|
|
Du hast ja Recht mit deiner Aussage, aber sie trifft auf den Fall von Erdie nicht zu. Du willst wissen, warum etwas nicht geht. Dagegen ist ja nichts einzuwenden. Erdie wollte aber wissen, warum es geht. Das ist etwas anderes,
Und ich sagte ja auch nicht, dass es irrelevant ist, ich sagte, es ist wichtiger, dass es funktioniert. |
|
Back to top |
|
|
franzf Advocate
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Sun Nov 30, 2014 9:25 am Post subject: |
|
|
Zwei kleine Beispiele:
Code: | #include <iostream>
void pre_test() {
int x = 0x12345678;
}
void test() {
int x;
while(x++ < 10)
std::cout << x << '\n';
}
int main() {
pre_test();
test();
} |
Abspeichern als test1.cpp, kompilieren mit
Code: | g++ -O2 test1.cpp -o test1 |
Ausführen mit ./test1.
Ausgabe:
Code: | 1
2
3
4
5
6
7
8
9
10 |
Also alles klar geht ja
Dann lass beim Kompilieren das "O2" weg und schon gibt das Programm keinen Muckser mehr von sich.
Hintergrund: int x in test() ist nicht korrekt initialisiert ("default initialized"). Der Optimierer führt zero-initialization durch, was zu dem erwarteten Ergebnis führt. Ohne Optimierer erhält x den Wert der gerade im Speicher liegt. Der ist recht sicher größer als 10, dadurch ist die Bedingung "x < 10" immer falsch.
Zweites Beispiel:
Code: | #include <iostream>
struct Test {
int x;
};
int main() {
Test *t = new Test;
delete t;
t->x = 6;
std::cout << t->x << '\n';
} |
Spechern als test2.cpp, Kompilieren wie oben (mit oder ohne O2 ist hier wurscht).
Wunderbar, das funktioniert. Gibt "6" aus.
Dann eine kleine Änderung:
Code: | #include <iostream>
struct Test {
int x;
};
int main() {
Test *t = new Test;
delete t;
Test *t2 = new Test;
t2->x = 500;
t->x = 6;
std::cout << t2->x << '\n';
} |
Erwartete Ausgabe: 500. Gibt aber immer noch 6 aus.
(g++ -fsanitize=address erstellt ein binary das bei solchen ungültigen Speicherzugriffen die Ausführung abbricht)
Das war zweimal "undefined behaviour". Oft geht sowas gut, aber ändert man was (Compileroptionen, Code) geht es plötzlich nicht mehr. Ich hab das schon ein paarmal gesehen, dass sich (vor allem unerfahrene Programmierer) da wenig sagen lassen. "Geht doch". Und in diesen Fällen ist es wirklich gut zu wissen WARUM es vielleicht geht (automatische zero initialization, Zugriff auf zufälligerweise noch validen Speicher).
Genauso ist es gut zu wissen dass SSE >>> 3dnow, und dass es am Ende vielleicht doch Multimediaanwendungen gibt, die crashen könnten (wenn handoptimiert und kein runtime-check) |
|
Back to top |
|
|
Child_of_Sun_24 Guru
Joined: 28 Jul 2004 Posts: 578
|
Posted: Sun Nov 30, 2014 7:31 pm Post subject: |
|
|
Der FX4300 (Wie alle Prozessoren aus der Serie) emulieren 3dnow falls entsprechende Flags gesetzt sind, dadurch wird die Codeausführung "verlangsamt" ob das jetzt spürbar ist oder nicht kann ich dir nicht sagen.
-march kannst du ruhig auf bdver2 stellen (Piledriver) und die 3dnow Option nimmst du raus, nach und nach werden dann die wichtigsten Pakete beim wöchentlichem/monatlichem emerge world -avuDN --with-bdeps=y auf die neuen Flags umgestellt. Es ist also nicht wirklich notwendig alles sofort neu zu kompilieren. |
|
Back to top |
|
|
Erdie Advocate
Joined: 20 May 2004 Posts: 2576 Location: Heidelberg - Germany
|
Posted: Tue Dec 02, 2014 12:07 pm Post subject: |
|
|
Child_of_Sun_24 wrote: | Der FX4300 (Wie alle Prozessoren aus der Serie) emulieren 3dnow falls entsprechende Flags gesetzt sind, dadurch wird die Codeausführung "verlangsamt" ob das jetzt spürbar ist oder nicht kann ich dir nicht sagen.
-march kannst du ruhig auf bdver2 stellen (Piledriver) und die 3dnow Option nimmst du raus, nach und nach werden dann die wichtigsten Pakete beim wöchentlichem/monatlichem emerge world -avuDN --with-bdeps=y auf die neuen Flags umgestellt. Es ist also nicht wirklich notwendig alles sofort neu zu kompilieren. |
Genauso habe ich es gemacht. Und da gerade die Umstellung von gcc 4.7 auf 4.8 auf dem Plan stand, habe ich doch gleich alles kompiliert. Wenn das durchläuft ist es ja kein Akt. Kostet etwas Strom und eine Nacht + 1/2 Tag.
bdver2 hatte ich laut Wiki benutzt. CPUinfo bringt auch Ver. 2
Die Umstellung auf FX hat es allein schon wegen 30W weniger Leistungsaufnahme gebracht, selbst wenn hinterher nichts schneller war.
Danke nochmal an alle
Grüße
Erdie _________________ Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W |
|
Back to top |
|
|
|