gpt4 book ai didi

c++ - 如何获得英特尔架构 SIMD __m128 的标志

转载 作者:行者123 更新时间:2023-11-30 01:38:14 25 4
gpt4 key购买 nike

因为据我所知,“_mm_sign_ps”不存在:给定一个具有四个浮点值的 __m128 值,哪个 SIMD 指令或 SIMD 指令列表会将其转换为具有四个浮点值的 __m128 值-点值包含:

+1,如果四个的原始值为正且大于零。0,如果那四个原值是零。-1,如果四个的原始值为负且小于零。

最佳答案

SSE 确实与此完全不匹配。首先,比较函数不会导致 ±1.0f,而是如果条件为真则所有位都被设置,或者如果条件为假则没有位被设置。此外,您要求进行三向比较,如果值为“零”,则结果为“零”(“零”在引号中,因为您实际上没有指定您想要正零还是负零;IEEE 754两者都有)。如果您可以重新构建问题以更好地匹配 SSE 提供的内容,您会好得多

也就是说:

__m128 foo (__m128 value) {
const __m128 zero = _mm_set_ps1 (0.0f);

__m128 positives = _mm_and_ps(_mm_cmpgt_ps (value, zero), _mm_set_ps1(1.0f));
__m128 negatives = _mm_and_ps(_mm_cmplt_ps (value, zero), _mm_set_ps1(-1.0f));

return _mm_or_ps(positives, negatives);
}

我不知道你打算用它做什么,但如果你对按位运算感到满意,那么你很有可能会弄清楚如何只使用一个 _mm_cmpgt_ps_mm_cmpge_ps_mm_cmplt_ps_mm_cmple_ps

关于c++ - 如何获得英特尔架构 SIMD __m128 的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48363225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com