使用 OSX 的Accelerate 框架,您可以访问 4 路 SIMD 功能,您可以在其中对向量浮点数、向量整数和向量布尔值进行操作。它为您提供 4 路除法,例如还有 4 路 sin、cos、tan 等。
对于 4 个浮点数的向量浮点数,框架提供vFloat。对于 4 个 bool 的向量 bool,框架提供vBool32。
我想要完成的是这行代码的 4 路 SIMD 版本:
float a = ...;
float b = ...;
bool condition = ...;
float selected = condition ? a : b;
例如,在 Cell 处理器上,您将使用内在的 'spu_sel(val1, val2, conditional)'。
我尝试将 4 向选择写为:
vFloat a = { ... };
vFloat b = { ... };
vBool32 condition = { ... };
vFloat selected = condition ? a : b;
... LLVM 编译器不接受它作为“?” 运算符不接受 vBool32。此外,上述网页上没有名为“vsel”或“vself”或类似名称的运算符。在这个框架中是否有浮点选择可用?如果是这样,如何访问它?