gpt4 book ai didi

assembly - 有序/无序比较是什么意思?

转载 作者:行者123 更新时间:2023-12-03 08:40:39 27 4
gpt4 key购买 nike

看看上证所运营商

CMPORDPS - ordered compare packed singles
CMPUNORDPS - unordered compare packed singles

有序和无序是什么意思?我在 x86 指令集中寻找等效指令,它似乎只有无序(FUCOM)。

最佳答案

有序比较检查两个操作数是否都不是 NaN .相反,一个 无序比较 检查任一操作数是否为 NaN .
此页面提供了有关此的更多信息:

  • http://csapp.cs.cmu.edu/public/waside/waside-sse.pdf (第5节)

  • 这里的想法是与 NaN 的比较是不确定的。 (无法决定结果)因此,有序/无序比较检查是否是(或不是)情况。
    double a = 0.;
    double b = 0.;

    __m128d x = _mm_set1_pd(a / b); // NaN
    __m128d y = _mm_set1_pd(1.0); // 1.0
    __m128d z = _mm_set1_pd(1.0); // 1.0

    __m128d c0 = _mm_cmpord_pd(x,y); // NaN vs. 1.0
    __m128d c1 = _mm_cmpunord_pd(x,y); // NaN vs. 1.0
    __m128d c2 = _mm_cmpord_pd(y,z); // 1.0 vs. 1.0
    __m128d c3 = _mm_cmpunord_pd(y,z); // 1.0 vs. 1.0
    __m128d c4 = _mm_cmpord_pd(x,x); // NaN vs. NaN
    __m128d c5 = _mm_cmpunord_pd(x,x); // NaN vs. NaN

    cout << _mm_castpd_si128(c0).m128i_i64[0] << endl;
    cout << _mm_castpd_si128(c1).m128i_i64[0] << endl;
    cout << _mm_castpd_si128(c2).m128i_i64[0] << endl;
    cout << _mm_castpd_si128(c3).m128i_i64[0] << endl;
    cout << _mm_castpd_si128(c4).m128i_i64[0] << endl;
    cout << _mm_castpd_si128(c5).m128i_i64[0] << endl;
    结果:
    0
    -1
    -1
    0
    0
    -1
    如果操作数具有可比性(两个数字都不是 NaN),则有序返回 true:
  • 1.0的有序比较和 1.0true .
  • NaN的有序比较和 1.0false .
  • NaN的有序比较和 NaNfalse .

  • 无序比较正好相反:
  • 1.0的无序比较和 1.0false .
  • NaN的无序比较和 1.0true .
  • NaN的无序比较和 NaNtrue .
  • 关于assembly - 有序/无序比较是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8627331/

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