我在Codeblocks中用C ++创建了一个小型库(大约600行),并且我使用OMP和O3优化来构建它。当我尝试使用具有完全相同选项( -fopenmp -O3 )的Makefile通过终端构建相同的代码时,它运行速度慢了3倍。我需要在各种机器上构建它,所以我需要通过终端而不是通过Codeblocks来完成这个过程。为什么会这样? 如果您有兴趣,这是我的Makefile:
CC=g++
CFLAGS=
LDFLAGS= -fopenmp -O3 -std=c++11
SOURCES=main.cpp CNNFunctions.cpp
OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=cnn
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
答案 0 :(得分:5)
因为,与您的说法相反,您并未使用完全相同的选项构建它。
您的CFLAGS
为空,这些是您用于编辑的标志。到达链接步骤时,您无法解决此问题。
答案 1 :(得分:5)
您的Makefile
错了。优化标志主要在编译时相关。至少尝试:
CXX=g++
CXXFLAGS= -Wall -fopenmp -O3 -std=c++11 -mtune=native
LDFLAGS= -fopenmp
SOURCES=main.cpp CNNFunctions.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=cnn
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(LINK.cpp) $(OBJECTS) -o $@
链接时优化的链接时优化可能很重要,对于该用途CXX=g++ -flto
和LDFLAGS=$(CXXFLAGS)