为什么我的代码在代码块中运行得更快

Why my code runs faster if I build it in codeblocks?

本文关键字:代码 运行 我的 为什么      更新时间:2023-10-16

我在代码块中用c++创建了一个小库(大约600行),我使用OMP和O3优化来构建它。当我尝试使用具有完全相同选项(-fopenmp -O3)的Makefile通过终端构建相同的代码时,它运行速度大约慢3倍。我需要在不同的机器上构建它,所以我需要通过终端而不是通过代码块来做这个过程。为什么会发生这种情况?这是我的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 $@

您的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++ -fltoLDFLAGS=$(CXXFLAGS)

因为,与你所说的相反,你并没有使用完全相同的选项来构建它。

您的CFLAGS为空,这些是您用于编译的标志。当你到达链接步骤时,你无法解决这个问题。