4

My code uses a lot of repetitive and largely algebraic operations that are suitable for MATLAB/FORTRAN style vector operations.

I have been considering making a switch to std::valarray or even Blitz++ to take advantage of this. But before making the switch, how can I profile the degree to which one of the main contributors to the performance gap between C++ and FORTRAN - pointer aliasing - is effecting the performance of my code, short of declaring everything with restrict and testing the difference.

Does Visual Studio 2012 / 2013 provide some way of achieving this? Maybe a different IDE?

4

1 に答える 1

0

C/C++ 言語は最適化されておらず、数学的な処理を行ってもうまく動作しません。これらの操作については、言語を変更することをお勧めします。本当に c/c++ を使い続けたい場合は、細心の注意を払って書くことをお勧めします。さまざまな言語は、可能な限り最善の方法で行うように指定されていますが、これと同じことはほとんどありません。

私が知っていることについては、C/C++ の既存の関数のほとんど、特に非標準パッケージ (boost) は可能な限り単純であると想定されているため、これを最適化する方法はありません。デバッグ パッケージもデバッグ関数でオーバーロードされているため遅くなりますが、「オブジェクトは自分に属しているか」や「サブスクライバーは範囲外チェック」などのセキュリティ チェックを行うリリース関数もいくつか見られました。これがエイリアシング、オートポイター、その他のポインターの種類などのアトミック関数に関するものである場合、それらは改善することはできず、可能な限り最高に機能するように作られています。

より多くの圧縮レベルが必要であることをコンパイラーに伝えることもできます。これにより、可能であれば何かが高速化される可能性がありますが、前に述べたように、数学を行うには数学用に作成された言語を使用してください。最終的に、fortran やその他の言語から asm オブジェクトを作成できる場合は、このファイルを c/c++ のコードにリンクできます。

于 2013-11-06T21:28:10.580 に答える