簡體   English   中英

如果我在代碼塊中構建代碼,為什么我的代碼運行得更快?

[英]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++ -fltoLDFLAGS=$(CXXFLAGS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM