2009-12-15 41 views
3

我将大量的低级操作从原生matlab代码转换为C/mex代码,并且速度很快。 (这些低级操作可以用.m代码进行矢量化,但我认为我可以获得大量数据的内存命中。)我注意到用不同的CFLAGS编译mex代码可能会导致轻微的改进。例如CFLAGS = -O3 -ffast-math确实会提供一些加速,但代价是数值不准确。matlab中mex函数的安全,快速的CFLAGS

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

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

回答

1

如果您知道目标CPU ...或者至少愿意保证“最小”CPU ......您应该仔细查看-mcpu-march

性能增益可能很大。

+0

我原则上喜欢这个,但还没有能够正确地测试它。会做.. – shabbychef 2010-02-04 19:57:32

+0

为我工作很好。谢谢。 – Sevenless 2011-02-28 21:46:23

1

无论ATLAS在您的机器上使用什么(http://math-atlas.sourceforge.net/)可能是一个很好的起点。我不知道ATLAS会自动优化特定的编译器标志,但开发人员可能会花费相当多的时间来完成这些工作。