[英]Why my code runs faster if I build it in codeblocks?
我已經在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 $@
因為,與您的主張相反,您沒有使用完全相同的選項來構建它。
CFLAGS
是空的,這些是您用於編譯的標志。 到鏈接步驟時,您無法解決該問題。
您的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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.