1

我读到的所有关于使用 C/C++ 内在类型来实现 MMX 和 SSE 等 SIMD 功能的内容都表明您应该将它们用作不透明类型,而不是直接引用内部。

但是,当我查看许多示例时,它们通过获取(显式对齐)指向原始数据的指针并在执行工作之前将它们重新解释为指向内部类型的指针来工作。但是,通过使用指向内在类型的指针,尤其是在将其他数据别名为这些类型时,您是否违反了该规则?

4

1 回答 1

5

你似乎发现大多数例子都很糟糕。

引用 SSE 类型的“内部”实际上是相当安全的(只要它可以编译),实际上您可以在内存中将它们别名为内存中的“普通”数据类型,很多人这样做是因为它使代码更方便编写和使用。

但这几乎破坏了使用 SIMD 的意义。它阻止了很多优化,这意味着编译器必须不断地存储/加载 SIMD 数据类型,而不仅仅是将它们保存在 SIMD 寄存器中。

可以这样做,但你不应该这样做。正如您所发现的,许多人将“应该”理解为“随意这样做”。

于 2012-11-16T13:00:33.400 回答