Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos OSX加速框架上的浮点选择的4路SIMD版本是什么?_Macos_Llvm_Sse_Simd_Intrinsics - Fatal编程技术网

Macos OSX加速框架上的浮点选择的4路SIMD版本是什么?

Macos OSX加速框架上的浮点选择的4路SIMD版本是什么?,macos,llvm,sse,simd,intrinsics,Macos,Llvm,Sse,Simd,Intrinsics,使用来自OSX的,您可以访问4路SIMD功能,在这里您可以操作向量浮点、向量整数和向量布尔。它为您提供了4路分割,例如,以及4路sin、cos、tan等 对于4个浮点的向量浮点,框架提供了vFloat。 对于4个布尔的向量布尔,框架提供了vBool32 我试图实现的是这一行代码的4路SIMD版本: float a = ...; float b = ...; bool condition = ...; float selected = condition ? a : b; 例

使用来自OSX的,您可以访问4路SIMD功能,在这里您可以操作向量浮点、向量整数和向量布尔。它为您提供了4路分割,例如,以及4路sin、cos、tan等

对于4个浮点的向量浮点,框架提供了vFloat。 对于4个布尔的向量布尔,框架提供了vBool32

我试图实现的是这一行代码的4路SIMD版本:

  float a = ...;
  float b = ...;
  bool  condition = ...;

  float selected = condition ? a : b;
例如,在单元处理器上,可以使用固有的“spu_sel(val1,val2,conditional)”

我试着将四向选择写下来:

vFloat a = { ... };
vFloat b = { ... };
vBool32 condition = { ... };

vFloat selected = condition ? a : b;
…LLVM编译器不接受,因为“?”运算符不接受vBool32。
此外,在上述网页上没有名为“vsel”或“vself”或类似内容的运营商。在这个框架中有浮点选择吗?如果是这样,如何访问它?

如果您想在这个抽象级别上工作,那么您可能必须满足于乘以1.0f或0.0f才能获得所需的结果。这实际上仍然非常有效,因为AltiVec和SSE都可以在每个时钟周期发出至少一个SIMD浮点乘法

如果您想获得最后一点性能,那么我认为您需要直接使用本机SIMD编程并使用相关的内部函数(
vec_-sel
对于AltiVec,
对于SSE4,
\u-mm\u-blend\u-ps
对于SSE4,
\u-mm\u和\u-ps
/
\u-mm\u和\u-ps
对于较旧的SSE实施)