2013-04-20 91 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中切換到此編譯器。

相關問題