You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化大型uint64数组的异或(XOR)运算性能?

大型移位数组异或运算的性能优化问题

我需要对大型移位数组执行异或(XOR)运算,以下是便于说明的可移植版本函数。如何优化该运算性能?我尝试过使用AVX2但未获得明显提升。当前示例中的DB处理耗时50ms,对应12GB/s的速度,恳请提供优化建议。

#include <iostream>

uint64_t partition_size = 4096;
uint64_t entry_size = 32; // bytes
uint64_t DB_size = 16777216;
uint64_t *DB = new uint64_t[DB_size * entry_size/64];


//partition_index为partition_size的随机倍数,例如0、8192、4096等
//random_offset为[0, partition_size]范围内的随机数
void xor_shifted_arrays(uint32_t partition_index, uint32_t random_offset, uint64_t *result)
{
    auto uint64_per_entry = entry_size / sizeof(uint64_t);

    int shift_offset;
    uint32_t shift;
    
    for (int i = 0; i < partition_size  ; i = i + 1)
    {
        shift = (i + random_offset) & (partition_size - 1);
        shift_offset = shift * uint64_per_entry;
        
        for (int j = 0; j < uint64_per_entry; j=j+1){
            result[shift_offset + j] = result[shift_offset + j] ^ DB[partition_index + j];  
        }
        partition_index = partition_index + uint64_per_entry;
    }
}

更新1

  • 已在两台设备上运行测试,编译时均启用O3优化:
    • Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz(MacOS 13.6,16GB DDR4内存,编译器Apple clang 15.0.0)
    • AWS r7i.2xlarge(Intel(R) Xeon(R) Platinum 8488C,Ubuntu系统,64GB DDR5内存,编译器g++ 11.4.0)
  • 意外发现Xeon平台上运行速度慢一倍!

更新2:补充外层调用逻辑(非运行代码)

void outer_function(){
  uint64_t *result1 = new uint64_t[partition_size];
  uint64_t *result2 = new uint64_t[partition_size];
  uint64_t number_partitions = 4096;
  for (int i=0; i< number_partitions; i++){
      xor_shifted_arrays(i*partition_size, some_rnd_gen(), result1);
  }
  for (int i=0; i< number_partitions; i++){
     xor_shifted_arrays(i*partition_size, some_rnd_gen(), result2);
  }
}

内容的提问来源于stack exchange,提问作者CryptoKitty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:22:59