SIMD内在函数和指针

时间:2012-11-16 12:39:36

标签: c++ c simd intrinsics

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

可以执行此操作,但 不应该。正如你所发现的那样,许多人认为“应该”是“随意做这件事”。