我已经分析了我拥有的一个 AVX2-heavy 功能,瓶颈如下所示:
std::uint64_t data[8];
// Some computation that fills data
std::uint64_t X[4] = { data[7], data[5], data[3], data[1] };
__m256i vec = _mm256_loadu_si256(reinterpret_cast<__m256i*>(X));
// Compute more with vec
// Later on use data[6], data[4], data[2], and data[0] in a similar fashion
实际上,数组也适当地对齐(load
而不是loadu
)。但问题是,有没有更快的方法用 AVX(2) 做到这一点?具体来说,我正在查看收集说明。我可以使用它们来初始化vec
吗data
?或者其他一些说明值得在这里尝试吗?