为啥我的程序在使用 makefile 编译时会变慢?
Posted
技术标签:
【中文标题】为啥我的程序在使用 makefile 编译时会变慢?【英文标题】:Why is my program slower when compiled using a makefile?为什么我的程序在使用 makefile 编译时会变慢? 【发布时间】:2014-01-07 21:04:46 【问题描述】:tl;dr:当我以一种方式编译我的代码时,可执行文件运行得很快。当我使用我的 makefile 时,它会慢约 10 倍(可执行速度,而不是编译时间)。
当我编译以下代码(使用 Eigen 包)时:
#include <Eigen/Dense> // For matrix math
#include <iostream>
using namespace std;
using namespace Eigen;
// Loop an infinite number of times, computing dot products.
int main(int argc, char * argv[])
setNbThreads(16);
initParallel(); // Tell Eigen that we're going to be multithreaded.
int n = 100;
VectorXf a(n), b(n);
for (int counter = 0; true; counter++)
a[0] = a.dot(b) / n;
if ((counter + 1) % 10000000 == 0)
cout << counter / 10000000 << endl;
使用线路:
g++ *.cpp -o exe -I ./PathToEigen -std=c++11 -O2 -DNDEBUG -msse2
它运行得非常快。如果我使用下面的 makefile,生成的可执行文件会慢 10 倍左右。我做错了什么?
PROGRAM = EXE
INCLUDEDIRS = -I ./PathToEigen
CXXSOURCES = $(wildcard *.cpp)
CXXOBJECTS = $(CXXSOURCES:.cpp=.o) # expands to list of object files
CXXFLAGS = -w $(INCLUDEDIRS)
CXX = g++
#
# Default target: the first target is the default target.
# Just type "make -f Makefile.Linux" to build it.
#
all: $(PROGRAM)
#
# Link target: automatically builds its object dependencies before
# executing its link command.
#
$(PROGRAM): $(CXXOBJECTS)
$(CXX) -o $@ $(CXXOBJECTS) -std=c++11 -O2 -DNDEBUG -msse2
# Clean target: "make -f Makefile.Linux clean" to remove unwanted objects and executables.
#
clean:
$(RM) -f $(CXXOBJECTS) $(PROGRAM)
#
# Run target: "make -f Makefile.Linux run" to execute the application
# You will need to add $(VARIABLE_NAME) for any command line parameters
# that you defined earlier in this file.
#
run:
./$(PROGRAM)
【问题讨论】:
【参考方案1】:因为您没有使用任何优化进行编译。 (CXXFLAGS
中没有-O2
,$(PROGRAM)
规则中的-O2
仅适用于链接步骤。)
【讨论】:
以上是关于为啥我的程序在使用 makefile 编译时会变慢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Android Studio 在编辑 xml 文件或更改设计时会变慢?
为啥 MySQL 查询在使用 LIMIT 和 Order BY 时会变慢?