【问题标题】:Minimum of signed/unsigned integers using AVX使用 AVX 的有符号/无符号整数的最小值
【发布时间】:2012-12-13 22:24:37
【问题描述】:

我浏览了 AVX 指令指南,虽然有 32 位整数值的加载、存储和置换操作,但其他操作(例如确定最小值或最大值)或随机操作仅适用于浮点数和双精度数。

所以,如果我想对 32 位整数使用这些操作,我需要将其类型转换为浮点数,然后再将其类型转换回来,还是我缺少其他一些指令?

另外,如果我想在 32 位整数上使用随机播放掩码,它们是否与浮点数相同?

【问题讨论】:

    标签: c sse avx


    【解决方案1】:

    32B 向量的大部分整数运算都在 AVX2 扩展中(不是最初的 AVX 扩展,它几乎完全是浮点运算)。 Intel 最新的AVX Programming Reference 有完整的细节;您可能还想看看英特尔的blog post 宣布了一些细节。

    不幸的是,您不能使用浮点最小值或最大值运算来模拟对整数数据的这些运算,因为当解释为浮点数据时,大量整数映射到 NaN 值,并且 NaN 比较的语义不会' t 做你想要的整数比较(你还需要处理浮点编码是符号大小的事实,所以负值的顺序是“反转的”,并且 +0 和 -0 比较相等) .

    【讨论】:

    • 英特尔将 128 位整数 SSE 操作移动到 128 位 AVX 指令中(使用 3 操作数编码),但不理会它们。唯一的 256 位整数操作用于 intfloat 转换。 AVX2 是好东西即将到来的地方。
    • @Stephen:您能否详细说明为什么类型转换不起作用,即整数何时映射到 NaN 或如何保留负值的顺序?
    • @user1715122 我认为斯蒂芬误读了这一点,并认为您打算重新解释位模式。当您进行普通类型转换时,您的问题是 a)它很慢,可能比条件移动慢,b)精度损失,integer -> floating -> integer 不一定是往返。
    • 但是为什么最小、最大或随机操作会损失精度呢?
    • @danielfischer:老实说,我认为很明显,进行转换是行不通的,而且即使这样做了也会有糟糕的表现,我什至没有想到提问者可能正在询问它。
    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2013-10-02
    • 2020-04-07
    • 2015-02-17
    相关资源
    最近更新 更多