我正在将一些低级操作从原生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套装,而不会疯狂?
答案 0 :(得分:1)
如果你知道目标CPU ......或者至少愿意保证“最小”CPU ......你一定要考虑-mcpu
和-march
。
性能提升可能很大。
答案 1 :(得分:1)
无论ATLAS在您的机器上使用什么(http://math-atlas.sourceforge.net/)都可能是一个很好的起点。我不知道ATLAS会自动优化特定的编译器标志,但开发人员可能花了相当多的时间手工完成。