【发布时间】:2021-12-20 12:50:16
【问题描述】:
如果我有一些类,其字段类似于__m256i* loaded_v,方法类似于:
void load() {
loaded_v = &_mm256_load_si256(reinterpret_cast<const __m256i*>(vector));
}
loaded_v 将成为有效指针多久?由于寄存器数量有限,我想最终loaded_v 将引用不同的值,或者会发生其他一些奇怪的行为。但是,我想减少我执行的加载次数。
我正在编写一个压缩位数组类,我想使用 AVX 内部函数来提高性能。但是,每次我做一些操作(和、或、异或等)时加载我的位数组是低效的。因此,我希望能够在执行一些操作之前显式调用load()。但是,我不明白 AVX 寄存器是如何处理的。任何人都可以帮助我,或者指向我有关此问题的一些文档吗?
【问题讨论】:
-
这段代码甚至没有编译,你正在获取一个右值的地址。
-
@MarcGlisse 是将整个 __m256i 值作为字段存储在我的班级中的唯一选择吗?
-
__m256i与int或float没有本质区别,编译器仍然需要为它们分配寄存器。负载内在函数基本上只是用于传达对齐与否,并作为演员表。__m256i不是仅寄存器或类似的东西,从数组或结构访问__m256i通常会涉及加载指令,除非数组优化掉。 Understanding how the instrinsic functions for SSE use memory
标签: sse intrinsics avx2