AGGREGATE Magicからのトリックが高速計算の最大値を見つけました。これが整数の唯一の問題ですが、いくつか試してみましたが、どのように符号なし整数のバージョンを作るのか分かりません。符号なし整数の高速ブランチレス最大
inline int32_t max(int32_t a, int32_t b)
{
return a - ((a-b) & (a-b)>>31);
}
アドバイスはありますか?他の人が述べたように、それは未定義の動作を生成するので
EDIT
は、これを使用しないでください。現代のアーキテクチャでは、コンパイラはからブランチレス条件付き移動命令を発行することができます。これは問題の関数より高速です。
待ちを '>返しますb? a:b'? –
この機能はほとんど役に立ちません。 'std :: max'を使います。 –
ええ、パイプラインのある最新のCPUでは、分岐が遅いです。私は、SSEバージョンと同じくらい速く、このバージョンを測定しました。 – plasmacel