1

ヘイ!

cの行列乗算コードを最適化する必要があり、SSEベクトル命令を使用して実行しています。また、ドット積dppsの命令がすでにあるSSE4.1が存在することもわかりました。

問題は、このソフトウェアが動作するはずのマシンに、SSE4.1をサポートしていない古いバージョンのgcc(4.1.2)がインストールされているが、それをサポートするプロセッサがあることです(理由を聞かないでください) gccバージョンはプロセッサより古いです...)。そのため、_mm_dp_ps関数を使用できません。

cにアセンブラコードを追加して少し遊んでいました。問題は、これまでアセンブラコードを使用したことがないため、非常に混乱することです。また、アセンブラでベクトル命令を処理するすべてのコードを記述する方が効率的ですか?

だから私はここでdpps命令を使用する他の方法があるかどうか、そしてそれが使用する価値があるかどうかを尋ねていますか?

4

1 に答える 1

2

率直に言って、問題はわかりません。あなたの説明から、最終的なコードを実行する必要があるマシンは SSE4.1 とDPPS. したがって、ソース コード (組み込み (またはアセンブリ) を含む) がコンパイルされると、このマシンで実行できます。話しているマシンに新しいバージョンをインストールするか、別のマシンでコンパイルしてから、必要なマシンに実行可能ファイルをコピーすることにより、新しいバージョンのコンパイラでコードをコンパイルするだけで済みます。走ります。

を使用した最適化がDPPS努力する価値があるかどうかについては、コード (つまり、最適化の可能性がどれだけあるか - ボトルネックがどこにあるかを見つけるために徹底的にプロファイルする必要があります) と、この特定のケースで実際にパフォーマンスがどれほど重要かによって異なります。 (つまり、あなたの時間の価値はありますか?; 時は金なり)

明らかに、アセンブリの経験がほとんどない場合は、ルーチンを asm で実装したり、独自の asm ラッパー関数を の周りDPPSに記述したりすることはあまり魅力的ではなくなります。(しかし、それは確かに可能です。)

于 2010-10-16T07:50:48.960 に答える