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

ターゲットCPUがわかっている場合、または少なくとも「最小」CPUを保証する意思がある場合は、必ず調べて-mcpuください-march

パフォーマンスが大幅に向上する可能性があります。

于 2009-12-16T06:05:42.963 に答える
1

マシンで ATLAS が使用するもの ( http://math-atlas.sourceforge.net/ ) は、おそらく良い出発点です。ATLAS が特定のコンパイラ フラグを自動的に最適化するかどうかはわかりませんが、開発者はおそらく手作業でかなりの時間を費やしてきたでしょう。

于 2009-12-17T00:52:38.643 に答える