<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist]]></title><description><![CDATA[<p>hallo,<br />
ich habe einen algorithmus in c++ geschrieben, der das TSP(traveling salesman problem) mittels simulated annealing &quot;lösen&quot; soll.</p>
<p>der code funktioniert soweit auch recht gut, allerdings wenn ich ihn kompiliere, ist die laufzeit sehr stark abhängig davon, ob die files als object-files eingebungen wurden, oder ob der gesamte source in einem file ist.</p>
<p>ich habe die klasse und ein paar funktionen in jeweils eigene .cpp und .h files ausgelagert.</p>
<p>mein make file sieht so aus:</p>
<pre><code>DBGFLAGS=-g -O0
PRODFLAGS=-O3
CFLAGS=-std=c++11 -pedantic -Wall -pthread -lboost_program_options
CC=g++
SRC=./

OBJECTFILES=${SRC}perm.o ${SRC}operations.o

#$@...Name of the target
#$^...a list of dependencies (without double entries)
all: distances.h
all: main
all: comb

dbg: distances.h
dbg: maindbg

main: ${SRC}main.o ${OBJECTFILES}
	${CC} ${CFLAGS} ${PRODFLAGS} -o $@ $^

comb: ${SRC}comb.cpp 
	${CC} ${CFLAGS} ${PRODFLAGS} -o $@ $^

maindbg: ${SRC}main.o ${OBJECTFILES}
	${CC} ${CFLAGS} ${DBGFLAGS} -o $@ $^

%.o: %.cpp
	${CC} ${CFLAGS} ${DBGFLAGS} -c -o $@ $^

distances.h: 
	./gen_distances.pl

clean:
	rm -f main.o perm.o operations.o main maindbg distances.h comb
</code></pre>
<p>das problem tritt auf, wenn ich &quot;make all&quot; aufrufe.</p>
<p>comb.cpp und main.cpp enthalten jeweils den selben code, mit dem unterschied, dass er beim comb in einem file liegt und keine externen files eingebunden werden müssen und bei main.cpp ist alles in 2 externe files(perm.cpp und operations.cpp) ausgelagert.</p>
<p>wenn ich comb aufrufe, ist das programm etwa 5x schneller, als mit main.</p>
<p>ich denke, mein fehler müsste ja wohl nur eine konfiguration (parameter beim g++) sein, somit hab ich euch den source des programms nicht mitgegeben.</p>
<p>sollte er dennoch benötigt werden, werd ich ihn gerne hochladen.</p>
<p>danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322075/ist-die-g-optimierung-schlechter-wenn-source-auf-mehreren-files-aufgeteilt-ist</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 10:09:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322075.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Dec 2013 16:52:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist on Thu, 05 Dec 2013 16:52:08 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich habe einen algorithmus in c++ geschrieben, der das TSP(traveling salesman problem) mittels simulated annealing &quot;lösen&quot; soll.</p>
<p>der code funktioniert soweit auch recht gut, allerdings wenn ich ihn kompiliere, ist die laufzeit sehr stark abhängig davon, ob die files als object-files eingebungen wurden, oder ob der gesamte source in einem file ist.</p>
<p>ich habe die klasse und ein paar funktionen in jeweils eigene .cpp und .h files ausgelagert.</p>
<p>mein make file sieht so aus:</p>
<pre><code>DBGFLAGS=-g -O0
PRODFLAGS=-O3
CFLAGS=-std=c++11 -pedantic -Wall -pthread -lboost_program_options
CC=g++
SRC=./

OBJECTFILES=${SRC}perm.o ${SRC}operations.o

#$@...Name of the target
#$^...a list of dependencies (without double entries)
all: distances.h
all: main
all: comb

dbg: distances.h
dbg: maindbg

main: ${SRC}main.o ${OBJECTFILES}
	${CC} ${CFLAGS} ${PRODFLAGS} -o $@ $^

comb: ${SRC}comb.cpp 
	${CC} ${CFLAGS} ${PRODFLAGS} -o $@ $^

maindbg: ${SRC}main.o ${OBJECTFILES}
	${CC} ${CFLAGS} ${DBGFLAGS} -o $@ $^

%.o: %.cpp
	${CC} ${CFLAGS} ${DBGFLAGS} -c -o $@ $^

distances.h: 
	./gen_distances.pl

clean:
	rm -f main.o perm.o operations.o main maindbg distances.h comb
</code></pre>
<p>das problem tritt auf, wenn ich &quot;make all&quot; aufrufe.</p>
<p>comb.cpp und main.cpp enthalten jeweils den selben code, mit dem unterschied, dass er beim comb in einem file liegt und keine externen files eingebunden werden müssen und bei main.cpp ist alles in 2 externe files(perm.cpp und operations.cpp) ausgelagert.</p>
<p>wenn ich comb aufrufe, ist das programm etwa 5x schneller, als mit main.</p>
<p>ich denke, mein fehler müsste ja wohl nur eine konfiguration (parameter beim g++) sein, somit hab ich euch den source des programms nicht mitgegeben.</p>
<p>sollte er dennoch benötigt werden, werd ich ihn gerne hochladen.</p>
<p>danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370025</guid><dc:creator><![CDATA[erdbeergulasch1]]></dc:creator><pubDate>Thu, 05 Dec 2013 16:52:08 GMT</pubDate></item><item><title><![CDATA[Reply to ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist on Thu, 05 Dec 2013 16:55:54 GMT]]></title><description><![CDATA[<p>Kompiliere mal mit &quot;-flto&quot; (<a href="http://gcc.gnu.org/wiki/LinkTimeOptimization" rel="nofollow">http://gcc.gnu.org/wiki/LinkTimeOptimization</a>)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370028</guid><dc:creator><![CDATA[perfectoption]]></dc:creator><pubDate>Thu, 05 Dec 2013 16:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist on Thu, 05 Dec 2013 16:56:59 GMT]]></title><description><![CDATA[<p>Ich hänge immer noch ein -Wextra dran, aber das sei dir überlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370029</guid><dc:creator><![CDATA[perfectoption]]></dc:creator><pubDate>Thu, 05 Dec 2013 16:56:59 GMT</pubDate></item><item><title><![CDATA[Reply to ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist on Thu, 05 Dec 2013 17:14:52 GMT]]></title><description><![CDATA[<p>dankeschön für den tipp, flto hat leider nix gebracht. sie sind beide exakt gleich. einmal mit und einmal ohne flto.<br />
(hatte zweimal 30sek) und das combined schaffts in 7sek</p>
<p>das mit Wextra ist ja nur dass die warnungen als errors kommen, oder das ist ja für die performance egal? oder doch nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370032</guid><dc:creator><![CDATA[erdbeergulasch1]]></dc:creator><pubDate>Thu, 05 Dec 2013 17:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist on Thu, 05 Dec 2013 17:27:02 GMT]]></title><description><![CDATA[<p>Was passiert, wenn du statt dem makefile einen einzigen gcc Aufruf (-flto nicht vergessen) nutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370034</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 05 Dec 2013 17:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist on Thu, 05 Dec 2013 17:26:16 GMT]]></title><description><![CDATA[<p>Jo, Wextra ist nur für Warnungen.</p>
<p>Wenn ich mir dein Makefile genauer ansehe, stelle ich fest, dass du die *.o-Files mit Debug-Flags kompilierst. Dann ist natürlich schon zu spät, die mit Optimierungen zusammenzulinken.</p>
<p>Mal so ungetestet zusammengehackt, wie das Makefile besser aussehen sollte:</p>
<pre><code>DBGFLAGS=-g -O0
PRODFLAGS=-O3
CFLAGS=-std=c++11 -pedantic -Wall -pthread -lboost_program_options

ifdef DEBUG
CFLAGS += $(DBGFLAGS)
else
CFLAGS += $(PRODFLAGS)
endif

CC=g++
SRC=$(wildcard *.cc) # Viel bequemer
OBJ=$(patsubst %.cc,%.o,$(SRC)) # und einfacher
HDR=$(wildcard *.h) distances.h # Das geht besser, siehe http://www.c-plusplus.net/forum/88418-full

all: main

main: $(OBJ)
    $(CC) $(CFLAGS) $&lt; -o $@

$(OBJS): %.o: %.cc $(HDR)
    $(CC) $(CFLAGS) -c $&lt; -o $@

distances.h:
    ./gen_distances.pl

clean:
    rm -f $(OBJ) distances.h main
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2370036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370036</guid><dc:creator><![CDATA[perfectoption]]></dc:creator><pubDate>Thu, 05 Dec 2013 17:26:16 GMT</pubDate></item><item><title><![CDATA[Reply to ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist on Thu, 05 Dec 2013 17:33:17 GMT]]></title><description><![CDATA[<p>danke, das war zwar nicht das problem, aber das hat mir geholfen, das problem zu finden:</p>
<p>es muss natürlich so heißen:</p>
<pre><code>%.o: %.cpp
    ${CC} ${CFLAGS} ${PRODFLAGS} -c -o $@ $^
</code></pre>
<p>und mit</p>
<pre><code>PRODFLAGS=-flto -O3
</code></pre>
<p>gehts jetzt auch! dankeschön...</p>
<p>eine sache wäre da noch:<br />
wie kann ich, wenn ich &quot;make dbg&quot; eingebe alle .cpp files mit DBGFLAGS kompileren?<br />
weil wenn ich jetzt &quot;make dbg&quot; eingebe, ist das .cpp file trotzdem im produktionsmodus oder?</p>
<p>mein verbessertes makefile sieht jetzt so aus:</p>
<pre><code>DBGFLAGS=-g -O0 
PRODFLAGS=-flto -O3 
CFLAGS=-std=c++11 -pedantic -Wall -pthread
CC=g++
SRC=./

OBJECTFILES=${SRC}perm.o ${SRC}operations.o

#$@...Name of the target
#$^...a list of dependencies (without double entries)
all: distances.h
all: main
all: bsp7
all: bsp4

dbg: distances.h
dbg: maindbg

main: ${SRC}main.o ${OBJECTFILES}
    ${CC} ${CFLAGS} ${PRODFLAGS} -o $@ $^

bsp7: ${SRC}bsp7.cpp
    ${CC} ${CFLAGS} ${PRODFLAGS} -o $@ $^

bsp4: ${SRC}bsp4.cpp 
    ${CC} ${CFLAGS} ${PRODFLAGS} -o $@ $^

maindbg: ${SRC}main.o ${OBJECTFILES}
    ${CC} ${CFLAGS} ${DBGFLAGS} -o $@ $^

%.o: %.cpp
    ${CC} ${CFLAGS} ${PRODFLAGS} -c -o $@ $^

distances.h: 
    ./gen_distances.pl

clean:
    rm -f main.o perm.o operations.o main maindbg distances.h bsp7 bsp4
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2370038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370038</guid><dc:creator><![CDATA[erdbeergulasch1]]></dc:creator><pubDate>Thu, 05 Dec 2013 17:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to ist die g++ optimierung schlechter, wenn source auf mehreren files aufgeteilt ist on Thu, 05 Dec 2013 17:35:01 GMT]]></title><description><![CDATA[<p>danke perfectoption hab erst jetzt deinen beitrag gelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2370039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2370039</guid><dc:creator><![CDATA[erdbeergulasch1]]></dc:creator><pubDate>Thu, 05 Dec 2013 17:35:01 GMT</pubDate></item></channel></rss>