【发布时间】:2010-07-06 00:54:11
【问题描述】:
我一直在努力解决一个非常简单的问题...我正在使用 AVL 树处理 4 维立方体...现在问题是与性能相关的问题...基本上我必须比较数十亿个 64 位数字...(因为我的密钥是 64 位,包括 4 个维度,每个维度为 16 位)...
问题不在于我无法比较 2 个 64 位数字,而是我需要在尽可能少的时钟周期内进行比较。
不幸的是,我的 AVL 树模板的签名是“int CompareKeyNode(key k, handle h)”
在后台我有两个 __int64 数字 lhs 和 rhs,不幸的是这种方法的合同是: 1. lhs==rhs 返回 0 2. lhs > rhs 返回 1 3. lhs
现在,如果上述方法需要一个 __int64 数字,我可以简单地执行 (METHOD A) return lhs - rhs;
不幸的是,它只需要一个 32 位整数,所以我不得不求助于类似于 ((METHOD B)) 的东西,即。返回 lhs == rhs ? 0 : (lhs
我的问题是使用 (METHOD A) 加载我的数据需要 60 秒,而 (METHOD B) 需要 117 秒。
不幸的是,(方法 A)不正确,因为它在转换 lhs-rhs 语句的返回时会丢失精度。
处理时间对我来说至关重要,我相信现在一定有一个简单有效的答案正在逃避我......
有人知道如何解决这个问题吗?或者有什么建议?
我在 VC++(非托管)中工作,但 .NET/Java 肯定已经在 JITing/VM 阶段解决了这个问题......否则它们会受到巨大的性能影响。
PS:已经尝试过 memcmp() 但还不够好...
【问题讨论】:
标签: int64