Linux vs Windows
-
hast bei suse nicht mit -O3 compiliert.
-
Hallo,
mmhh...davon hab ich noch nie was gehört um ehrlich zu sein.
ich hab einfach mit flag -o kompiliert.
bringt denn -o3 viel mehr? oder was ist der unterschied?
dank,
gruß,
Sebastian
-
sebastian_v_b schrieb:
Hallo,
mmhh...davon hab ich noch nie was gehört um ehrlich zu sein.
ich hab einfach mit flag -o kompiliert.
bringt denn -o3 viel mehr? oder was ist der unterschied?
dank,
gruß,
Sebastian-O oder -o?
http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Optimize-Options.html#Optimize-Options
-O3
Optimize yet more. -O3 turns on all optimizations specified by -O2 and also turns on the -finline-functions, -funswitch-loops and -fgcse-after-reload options.du musst auf jeden fall zulassen, daß inline-funktionen auch inline werden. aber das haste ja schon, wenn du -O benutzt hast. hättest du das nicht, würde es so einen riesen-faktor der langsamkeit begründen können.
-
Man!! mal wieder den nagel auf den kopf getroffen!
ich habe tatsächlich immer -o benutz statt -O ... geschweige denn -O3nun bekomme ich aber ganz schreckliche compiler fehler, die ich vorher nicht hatte:
collect2: ld terminated with signal 11 [Speicherzugriffsfehler] graphTest(.text+0x40b8): In function `Graph::delete_vertex(int)': : multiple definition of `Graph::delete_vertex(int)' graph.o(.text+0x3f78): first defined here graphTest(.text+0x3550): In function `Graph::get_vertex_name(int) const': : multiple definition of `Graph::get_vertex_name(int) const' graph.o(.text+0x3410): first defined here graphTest(.text+0x3766): In function `Graph::add_vertex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)': : multiple definition of `Graph::add_vertex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)' graph.o(.text+0x3626): first defined here graphTest(.text+0x3360): In function `Graph::get_edge_weight(int, int) const': : multiple definition of `Graph::get_edge_weight(int, int) const' graph.o(.text+0x3220): first defined here graphTest(.text+0x3ec): In function `Graph::Graph[in-charge](int, double)': : multiple definition of `Graph::Graph[in-charge](int, double)' graph.o(.text+0x2ac): first defined herevielleicht hat das was mit dem makefile zu tun??
mein makefile sieht wie folgt aus:ClusterEditing: problemKernelEditOperationsTest.cpp problemKernelEditOperations.o editGraphTest.cpp editGraph.o graphTest.cpp graph.o graphException.o g++ graphException.o graph.o -O graphTest -idirafter . graphTest.cpp g++ graphException.o graph.o editGraph.o -O editGraphTest -idirafter . editGraphTest.cpp g++ graphException.o graph.o editGraph.o problemKernelEditOperations.o -O problemKernelEditOperationsTest -idirafter . problemKernelEditOperationsTest.cpp problemKernelEditOperations.o: problemKernelEditOperations.cpp problemKernel.h editGraph.o g++ -c -idirafter . problemKernelEditOperations.cpp editGraph.o: graph.o editGraph.cpp editGraph.h g++ -c -idirafter . editGraph.cpp graph.o: graph.cpp graph.h graphException.o g++ -c -idirafter . graph.cpp graphException.o: graphException.cpp graphException.h g++ -c -idirafter . graphException.cppmuss man beim kompilieren mit -O irgendetwas beachten??
Dank,
Sebastian
-
Hast du jetzt -o weggelassen, oder was?
Ein korrekter Aufruf sähe so aus:
g++ -O3 -o main main.cpp-o brauchst du trotzdem, um salopp zu sagen: "Hey, mach mir mal ne binary"
-O3 brauchst du, um zu sagen: "Hey, mach das Programm auch gaaanz schnell"-O2 tut's im Übrigen in den meisten Fällen auf. Erst kürzlich war bei mir O3 langsamer als O2, schräge sache.
-
Hallo,
vielen Dank...natürlich hab ich einfach -o weggelassen...ich Hirnie.
leider läuft es immer noch nicht schneller, weder mit O2 noch O3.
das problem muss also ein anderes sein.habt ihr noch irgendwelche ideen?
liebe grüße,
Sebastian
-
ist der code ansonsten exakt der gleiche wie auf der winbox?
benutzt du irgendwelche externen libraries, die unter linux vielleicht grottig programmiert sind?
-
ich benutze exakt das gleiche programm, mit den exakt gleichen libraries.
also nur die standard library.
ich find das ganze auch sehr merkwürdig, vorallem weil der linux rechner mehr speicher hat und nen schnelleren prozessor!!!
der prozess läuft auch bei voller auslastung...
-
Irgendwoher muss der Unterschied ja kommen.... welche Version vom g++ hast du denn?
Denn bei mir (g++ 3.3.6) und Slackware 10.2 gibt's im Vergleich zu Win2k minimale (wenn überhaupt) Unterschiede. Hast du bei Suse noch was im Hintergrund laufen?
-
Was sagt denn
ps aux?
-
Nabend,
bevor das Raten munter weitergeht schlage ich vor, mal einen Profiler einzusetzen
und zu schauen, wo genau die Zeit haengen bleibt. Dann kann man weitersehen.gruss
v R
-
meine g++ version ist 3.3.1
die unterschiede sind da...schön das du sie nicht hast
so ein profiling wäre cool...vielleicht könnte noch jemand posten, wie man das macht....danke
