2

私は非常に単純な問題に苦しんでいます...AVLツリーを使用して4次元キューブを使用しています...問題はパフォーマンスに関連するものです...基本的に数十億の64ビット数を比較する必要があります... (私のキーはそれぞれ16ビットの4次元で構成される64ビットであるため)...

問題は、2つの64ビット数値を比較できないことではなく、できるだけ少ないクロックサイクルで比較する必要があることです。

残念ながら、私のAVLツリーテンプレートには「intCompareKeyNode(key k、handleh)」の署名があります

内部には2つの__int64番号lhsとrhsがありますが、残念ながらこのメソッドのコントラクトは次のとおりです。1. lhs == rhs return 0 2. lhs> rhs return 1 3. lhs <rhs return -1

上記のメソッドで__int64の数値が期待される場合は、(メソッドA)return lhs--rhs;を実行できます。

残念ながら、必要なのは32ビット整数だけなので、(( METHOD B))に似たものに頼る必要があります。lhs == rhsを返しますか?0:(lhs <rhs?-1:1)

私にとっての問題は、(メソッドA)を使用してデータをロードするのに60秒かかるのに対し、(メソッドB)は117秒かかることです。

残念ながら、(METHOD A)は、lhs-rhsステートメントをキャストするための戻りの精度が失われるため、正しくありません。

処理時間は私にとって非常に重要であり、私は今私を避けている単純で効率的な答えがなければならないと確信しています...

誰かがこれを解決する方法についてアイデアを持っていますか?またはおそらく何か提案はありますか?

私はVC++(管理されていない)で作業していますが、確かに.NET/JavaはJITing/VMステージでこの問題を解決したに違いありません...そうでなければ、パフォーマンスに大きな打撃を与えるでしょう。

PS:memcmp()を試しましたが、十分ではありません...

4

3 に答える 3

0

組み立てでは、それらを差し引きます。
ゼロフラグセット=0
キャリーフラグセット=
-1else 1

于 2010-07-06T00:57:26.723 に答える
0

あなたは試すことができ(lhs<rhs) - (rhs<lhs)ます。(まったく)改善されるという保証はありませんが、少なくとも可能性はあります...

于 2010-07-06T01:19:30.803 に答える
0

本当に私が見ることができるのは、__int64 を受け入れるように関数をオーバーロードするか、書き直す必要があるということだけです。そのようなインラインロジックでは、常にパフォーマンスが低下します。__int64 を受け入れるようにクラスをオーバーロードできないのはなぜですか?

于 2010-07-06T01:27:57.833 に答える