c++ - 在最小时钟周期内执行 AVX2 VPXOR 和 popcount 的优化方式
问题描述
我们必须对两个数组执行按位异或运算,每个数组包含 5 个 uint64_t(unsigned long long)元素,然后执行 1 的计数(pop count)。通过使用 AVX2 256 位宽 YMM 寄存器、AVX2 VPXOR 和 popcount 以在最小时钟周期内实现这一目标的优化方式是什么?
现在我们通过以下代码片段来做到这一点
for (j = 0; j < 5; j++){
xorResult = cylinderArrayVectorA[j] ^ cylinderArrayVectorB[j];
noOfOnes = _mm_popcnt_u64(xorResult);
sumOfOnes += noOfOnes;
我们在数组 A 和数组 B 中有 260 位。在最小时钟周期内执行 AVX2 VPXOR 和 popcount 的优化方法是什么。
解决方案
推荐阅读
- animation - 4x4 矩阵 (3D) 动画
- bash - 在 bash 中将大型数据集从宽格式转换为长格式(使用 awk 或类似方法)
- python - 处理带有连词的句子的 NLP 问题
- powershell - 密码身份验证在 Windows 上的 ssh 中不起作用
- sql - SQL 查询选择所有有商店但没有商店的用户
- python - 打印分成许多列表的字符串
- amazon-web-services - 从 NLB 到达 Nat 实例
- c# - 如何在 C# 中将多维数组解释为一维数组,反之亦然
- r - 有没有办法为包含“facet_wrap()”的ggplot图设置不同的“y”限制?
- machine-learning - CatBoost 中的 CTR 是什么意思