有效地对两个内存进行异或

时间:2015-10-06 12:24:19

标签: c buffer simd

我有两个长度为buf1的缓冲区buf2len。我想有效地获得这两个缓冲区之间的xor。我在Linux系统上运行gcc(5.1)。

  • 这两个缓冲区是页面对齐的(使用posix_memalign,对齐getpagesize()
  • 结果可以存储在buf1中,因为我在操作后不再需要其内容。

我已尝试将void*转换为uint64_t*并执行^=操作,但仍然不能满足我的需求(比较来自块设备的数据)。

是否存在库函数 - 在memcmp之类的函数中 - 可以达到我想要的效果吗?或者是否有专门负责此类任务的图书馆?

自制实现有多复杂,可能有SIMD指令? (我正在研究Haswell-DT G3258,现在便携性不是问题)

PS:我的CPU标志是: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer xsave rdrand lahf_lm abm ida arat pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust erms invpcid xsaveopt

0 个答案:

没有答案