3

我正在将许多低级操作从本机 matlab 代码转换为 C/mex 代码,速度非常快。(这些低级操作可以在 .m 代码中矢量化完成,但我认为我会遇到大数据的内存命中 b/c。无论如何。)我注意到用不同的 CFLAGS 编译 mex 代码可能会导致轻微的改进。例如CFLAGS = -O3 -ffast-math,确实提供了一些加速,但代价是轻微的数值不准确。

我的问题:什么是“最好的” CFLAGS 使用,不会产生太多其他副作用?看来,至少 CFLAGS = -O3 -fno-math-errno -fno-unsafe-math-optimizations -fno-trapping-math -fno-signaling-nans一切都还好。我不确定-funroll-loops

另外,您将如何半自动地优化使用的 CFLAGS 集而不发疯?

4

2 回答 2

1

无论 ATLAS 在您的机器上使用什么 ( http://math-atlas.sourceforge.net/ ) 都可能是一个很好的起点。我不知道 ATLAS 会自动优化特定的编译器标志,但开发人员可能已经花费了大量时间手动优化。

于 2009-12-17T00:52:38.643 回答
1

如果您知道目标 CPU...或者至少愿意保证“最小”CPU...您绝对应该研究-mcpu-march.

性能提升可能非常显着。

于 2009-12-16T06:05:42.963 回答