c++ - 有什么方法可以创建一个可以作为参数传递的 16 字节对齐的类

标签 c++ windows sse

我们有一个(数字 3 float ) vector 类,我希望将其对齐到 16 字节以允许 SIMD 操作。使用 declspec 进行 16 字节对齐会导致大量 C2719 错误(参数':带有 __declspec(align('#')) 的形式参数将不会对齐)。如果我不能绕过一个对齐的 vector ,那有什么意义呢?即使使用对 vector 的 const 引用也会导致编译器错误,这让我很恼火。

有没有办法在这里做我想做的事——获得 16 字节类对齐,同时允许结构传递,而不必对 __m128 类型做一些愚蠢的欺骗?

最佳答案

您不太可能从使用 SIMD 中获得太多好处,除非您同时对这些 3 维 vector 结构进行操作,在这种情况下,您可能会将它们传递到一个数组中,您可以根据需要对齐。您可能从 SIMD 中获得一些好处的另一种情况是,如果您对每个 vector 进行大量计算并且您可以并行化三个 channel 上的操作。在这种情况下,然后在函数的开头进行一些手动操作以将其诱导为 __m128 类型可能仍然会给您带来一些好处。

关于c++ - 有什么方法可以创建一个可以作为参数传递的 16 字节对齐的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10234227/

相关文章:

windows - 我在 Julia 收到一条消息 "using Plots",但我不知道如何解决它

windows - 将批处理脚本或 EXE 设置为 Windows 7 中的默认浏览器

c++ - AVX、SSE 总和比 gcc 自动向量化慢

caching - 使用 SSE/AVX 对压缩双向量的部分进行非时间存储

c++ - 内存没有正确对齐?

C++整数除法

c++ - 当给定 PE 基地址作为参数时,为什么 ZwUnmapViewOfSection() 取消映射整个进程的内存?

windows - "Vagrant up"卡住验证 Hyper-v 提供程序

c++ - 在for循环的某些迭代中,字符串的长度为0,而在其他迭代中则不是

c++ - 使用for循环在C++中打印矩阵次对角线?