Oma*_*aha 1 c c++ simd intrinsics
我已经读过有关将C / C ++内在类型用于SIMD功能(如MMX和SSE)的所有内容,这些都表明您应该将它们用作不透明类型,而不是直接引用内部结构。
但是,当我看许多示例时,它们的工作方式是(指向)原始数据的指针(明确对齐),然后在进行工作之前将它们重新解释为内部类型的指针。但是,通过使用指向内部类型的指针,尤其是在将其他数据作为这些类型的别名时,您是否没有违反该规则?
您似乎发现的是,大多数示例都很糟糕。
实际上,引用SSE类型的“内部”(只要它可以编译)是相当安全的,实际上,您可以将它们在内存中别名为内存中的“正常”数据类型,很多人这样做是因为使代码的编写和使用更加方便。
但这几乎毁了使用SIMD的意义。它阻止了很多优化,这意味着编译器必须不断存储/加载SIMD数据类型,而不仅仅是将它们保存在SIMD寄存器中。
你可以这样做,但你应该不会。正如您所发现的,许多人将“应该”理解为“可以随意做”。