1

現在、単純な c 計算の最適化を探しています。今のところ 2 つの解決策がありますが、どちらが最高のパフォーマンスを発揮するかわかりません。

コード 1 :

u32_tmp = 0x01FFBBAA; //Random value...
tab[0] = (u32_tmp & 0xFC00000) >> 18; 
tab[1] = (u32_tmp & 0x3F000) >> 12 ; 
tab[2] = (u32_tmp & 0xFC0) >> 6 ; 
tab[3] =  u32_tmp & 0x3F;

コード 2 :

u32_tmp = 0x01FFBBAA; //Random value...
tab[3] = u32_tmp & 0x3F;
u32_tmp>>=6;
tab[2] = u32_tmp & 0x3F;
u32_tmp>>=6;
tab[1] = u32_tmp & 0x3F; 
u32_tmp>>=6;
tab[0] = u32_tmp & 0x3F;

あなたの観点から見て、どれが「最高」ですか?

4

2 に答える 2

3

Code 1Code 2私の意見では、値から抽出したビットをより明確に示しています。それは私が選んだものです。

パフォーマンスが重要な場合は、最適化コンパイラがこれらのスニペットの両方を同様のアセンブリ コードに変換する可能性が高くなりますが、これがコードの読みやすさよりも大きな懸念事項である場合は、両方のケースで生成されたアセンブリ コードを調べたり、パフォーマンス テストを行ったりすることができます。 2 つのバリアントについて。

于 2013-09-27T13:28:01.987 に答える
2

そのようなコードを最適化する合理的なコンパイラーは、まったく価値がないと私は信じています。ほとんどの場合、いくつかのハックでコードを最適化しようとしても、パフォーマンスが低下することさえあります。現在、コンパイラはコードの最適化において非常に優れた仕事をしています。ロジックを最適化することで、違いが生まれます。上記の 2 つのバージョンをベンチマークして、最適化をオンにしたバージョンのいずれかの一貫した利点が示されたら、私は驚かれることでしょう。

于 2013-09-27T13:27:50.307 に答える