【问题标题】:My C-Code runs slowly in Mac comparing to Ubuntu [closed]与 Ubuntu 相比,我的 C 代码在 Mac 中运行缓慢 [关闭]
【发布时间】:2013-04-20 06:31:45
【问题描述】:

我用 C 编写了一段科学代码。我在 Ubuntu 中使用 gcc 4.7.2 编译代码,在 MBP 中使用 gcc 4.2 编译代码。我的 Makefile 看起来像这样:

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:4 秒,MBP:5.5 秒。 如您所见,C 代码的运行速度甚至比 MATLAB 还要慢,这没有任何意义。 虽然 gcc 版本在两个平台上并不相同,但我希望它们至少接近。我的主要问题是我什至不知道从哪里开始解决问题或我应该检查什么。

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

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

提前感谢您的帮助

【问题讨论】:

  • 是同一个系统吗?两台不同的机器?什么规格?相同的 CPU/内核、RAM 等?在这里显示一个 makefile 并没有多大帮助。
  • 另外请记住,MATLAB 在数学方面经过了极大的优化,因此速度更快并不是不可能的。
  • @Jensd 好的。我同意,MATLAB 是高度优化的。但是 ubuntu 中的 C 代码很容易胜过 MATLAB。因此,我希望在 Mac 中看到相同的行为。
  • 那里有很多 C 代码运行缓慢,因为它很糟糕。 3.4 GHz 与 2.5 GHz 意味着速度上的巨大差异,因此 MATLAB 结果的差异。不过,0.89 到 7.8 秒意味着别的东西。尝试分析以查看 MBP 上哪些单个调用速度较慢。

标签: c performance macos gcc


【解决方案1】:

您使用的旧编译器不支持您的 CPU 支持的指令的优化。尝试改用 Clang,Apple 前段时间停止支持 GCC,并在新版本的 Xcode 中切换到此编译器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多