我读到的所有关于将C/C++内部类型用于MMX和SSE等SIMD功能的文章都表明,您应该将这些类型用作不透明类型,而不是直接引用内部。
但是,当我查看许多示例时,它们的工作方式是获取(显式对齐的)指向原始数据的指针,并在执行工作之前将它们重新解释为指向内部类型的指针。但是,通过使用指向内部类型的指针,特别是在将其他数据作为这些类型的别名时,您是否违反了该规则?
发布于 2012-11-16 21:00:33
你似乎已经发现,大多数例子都很糟糕。
引用SSE类型的“内部”实际上是相当安全的(只要它可以编译),而且在实践中,您可以在内存中将它们别名为内存中的“普通”数据类型,很多人这样做是因为它使代码更易于编写和使用。
但它很大程度上破坏了使用SIMD的意义。它阻止了许多优化,这意味着编译器必须不断地存储/加载SIMD数据类型,而不仅仅是将它们保存在SIMD寄存器中。
你可以这样做,但你不应该这样做。正如你已经发现的,许多人将“应该”读作“随意做这件事”。
https://stackoverflow.com/questions/13416754
复制相似问题