質問

C ++を使用して複雑なFFTアルゴリズムをコーディングしているため、QuaternionsやHamilton-Eisensteinコードなどの代数構造を実装する必要があります。アルゴリズムは、その構造の2D配列で動作します。クラスとしてそれらを実装するオーバーヘッドは何でしょうか?他の方法では、Quaternionクラスで構成される[M] [n]寸法を備えた配列を作成する必要がありますか、それとも[M] [n] [4]アレイを作成し、[4]アレイをQuaternionsとして作業する必要がありますか?クラスを使用する方が便利ですが、Arrayだけで作業するのではなく、M*nクラスを作成し、メソッドにアクセスすることはできません。大規模な画像処理のためにアルゴリズムをコーディングしているので、パフォーマンスが重要です。

役に立ちましたか?

解決

iMhoは、単にエラーを減らしてコードをより迅速に書くことができるという理由だけで、クラスとしてそれらを実装することにより、より良いサービスを提供することができます。測定を行い、それがあなたにとって重要である場合に最適なパフォーマンスを確認する必要がありますが、実際にこのコードがパフォーマンスボトルネックであることを確認する必要があります。 (必須 ドナルド・クヌースの引用: :「早期最適化はすべての悪の根源です」)。

ほとんどのコンパイラは、あなたのためにコードを最適化するのに非常に良い仕事をするでしょう、と私は言います。多くの場合、初期のテストを追加したり、データセットやその他のものを最小化するなど、違いを生むこれらの低レベルのもの以外のものであることがわかります。

Quaternionの場合、内部的にアレイを使用してクラスを実装できます(実際にはより速い場合)。これにより、違いがさらに重要になります。

たとえば、マルチコアマシンでパラレルでアルゴリズムを実行したり、実際の計算にSSEの指示を使用したりできるようにすることで、おそらくより良いサービスを提供するでしょう。

他のヒント

クラスのオーバーヘッドに関して:クラスに仮想関数がない限り、クラスを使用するためのペナルティはありません。

したがって、たとえば、複雑な変数の配列は次のように記述できます。

std::complex<double> m[10][10];

ただし、STLコレクションクラスに注意してください。動的割り当てを使用する傾向があり、時には重要なオーバーヘッドを導入する傾向があります(つまり、使用して配列を作成しません。 vector< vector<> >.

あなたは次のようなライブラリの使用を調査したいかもしれません 固有 高速で最適化されたマトリックス/ベクトルクラスの場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top