2013-04-20 92 views
-1

我用C编写了一个科学代码。我在Ubuntu中使用gcc 4.7.2编译代码,并在使用gcc 4.2的MBP中编译代码。我的Makefile如下所示:我的C代码在Mac上运行比较慢,与Ubuntu相比

CC = gcc 
CFLAGS = -c -fPIC -Wall -O3 -lpthread -g 
BaseDir = /Users/admin/ 
libName = libTTVS.so 
Include = -I$(BaseDir)UMFPACK/Include -I$(BaseDir)AMD/Include -I$(BaseDir)SuiteSparse_config 
Lib = -L$(BaseDir)UMFPACK/Lib -L$(BaseDir)AMD/Lib -L$(BaseDir)SuiteSparse_config -L$(BaseDir)GotoBLAS2 
AddFiles = -lumfpack -lamd -lsuitesparseconfig -lgoto2 
StaticLibs = $(BaseDir)UMFPACK/Lib/libumfpack.a $(BaseDir)AMD/Lib/libamd.a $(BaseDir)SuiteSparse_config/libsuitesparseconfig.a $(BaseDir)GotoBLAS2/libgoto2.a 
all: AlgebraFuncs.o QSP.o UpdateAlgVars.o AlgVarsJac.o ExtraRoutines.o SolveMultiStepSolverC.o TTVS.o TTVS.h 
     $(CC) $(Include) $(Lib) $(AddFiles) -shared -lpthread -o $(libName) $^ -lm -g $(StaticLibs) 

AlgebraFuncs.o: AlgebraFuncs.c TTVS.h 
     $(CC) $(Include) $(CFLAGS) $^ 

QSP.o: QSP.c TTVS.h 
     $(CC) $(Include) $(CFLAGS) $^ 

UpdateAlgVars.o: UpdateAlgVars.c TTVS.h 
     $(CC) $(Include) $(CFLAGS) $^ 

AlgVarsJac.o: AlgVarsJac.c TTVS.h 
     $(CC) $(CFLAGS) $^ 

ExtraRoutines.o: ExtraRoutines.c TTVS.h 
     $(CC) $(CFLAGS) $^ 

SolveMultiStepSolverC.o: SolveMultiStepSolverC.c TTVS.h 
     $(CC) $(Include) $(CFLAGS) $^ 

TTVS.o: TTVS.c TTVS.h 
     $(CC) $(Include) $(CFLAGS) $^ 

正如您所看到的,我使用-O3来编译源代码。

问题是编译后的代码在Mac中非常慢。在Ubuntu中,代码执行时间为0.89秒,而在MBP中,代码执行时间为7.8秒。我也在MATLAB中实现了代码,这里是结果:Ubuntu:4sec,MBP:5.5sec。正如你所看到的,C代码的运行速度比MATLAB要慢,这是没有意义的。 尽管gcc版本在两个平台上并不相同,但我预计他们至少会接近。我的主要问题是,我甚至没有开始解决这个问题或者我应该检查什么。

这两台机器的规格: Ubuntu的:酷睿i7 2600 @ 3.4GHz的四核,8GB内存 MBP:酷睿i5 @ 2.5GHz的,8GB的内存

我知道,Ubuntu有更强大CPU,但考虑到MATLAB的结果,我不明白为什么C代码在Ubuntu中速度更快。它应该更快,但不是8次!

感谢您的帮助提前

+0

这是同一个系统吗?两台不同的机器?什么规格?相同的CPU /内核,RAM等?显示一个makefile在这里不会有太大的帮助。 – 2013-04-20 06:36:13

+0

另外请记住,MATLAB在数学方面非常优化,所以速度更快并不是不可能的。 – Jensd 2013-04-20 06:40:10

+0

@Jensd Ok。我同意,MATLAB是高度优化的。但在Ubuntu的C代码轻松击败MATLAB。所以,我期望在Mac中看到相同的行为。 – Pouya 2013-04-20 06:42:20

回答

3

您使用的是旧的编译器不为您的CPU支持指令优化支持。尝试使用Clang来代替,Apple不久前停止支持GCC,并在新版本的Xcode中切换到此编译器。

相关问题