我用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次!
感謝您的幫助提前
這是同一個系統嗎?兩臺不同的機器?什麼規格?相同的CPU /內核,RAM等?顯示一個makefile在這裏不會有太大的幫助。 – 2013-04-20 06:36:13
另外請記住,MATLAB在數學方面非常優化,所以速度更快並不是不可能的。 – Jensd 2013-04-20 06:40:10
@Jensd Ok。我同意,MATLAB是高度優化的。但在Ubuntu的C代碼輕鬆擊敗MATLAB。所以,我期望在Mac中看到相同的行爲。 – Pouya 2013-04-20 06:42:20