【问题标题】:128-bit struct or 2 64-bit records for performance and readibility128 位结构或 2 个 64 位记录以提高性能和可读性
【发布时间】:2013-09-19 13:35:46
【问题描述】:

我正在对一个大文件(10 GB)中的 128 位记录进行排序。算法工作正常,目前使用uint64_t,其中两个等于一个记录。这是在现代 64 位系统上。

为了代码的可读性,我想知道是否可以创建一个类似typedef struct u128t {uint64_t hi, uint64_t} u128t 的结构来代替两条 64 位记录。这将使数组索引和赋值更清晰,但我必须实现一个比较器函数。

这是一个可移植的解决方案,我是否应该期望它以与原始实现相同的速度运行?

进一步阅读:

【问题讨论】:

  • 使用内联比较器和不完全脑死的编译器应该不会有明显的性能下降。唯一可以确定的方法当然是尝试和测量。
  • 由于除了简单的比较之外还使用struct u128t,使用机器的字节序对字段uint64_t hiuint64_t lo 进行排序可能很有用。使其他 128 位操作更容易。

标签: c performance algorithm sorting


【解决方案1】:

使用结构体很好。

我会这样做:

#if COMPILER_WHICH_SUPPORTS_128_BIT_TYPE
    typedef __uint128 u128t;
    #define COMPARE(a, b) ((a) == (b))
#else
    typedef struct {
        uint64_t hi;
        uint64_t lo;
    } u128t;
    #define COMPARE(a, b)   MyCompareFunction((a), (b))
#endif

【讨论】:

  • +1 表示编译器_WHICH_SUPPORTS_128_BIT_TYPE。这个解决方案既可读又(我猜)是性能的理想选择。
猜你喜欢
  • 2010-12-12
  • 1970-01-01
  • 2012-02-23
  • 2010-11-27
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 2014-07-11
  • 2011-03-21
相关资源
最近更新 更多