Comparison vector ops

bearophile bearophileHUGS at lycos.com
Sun Feb 20 18:05:00 PST 2011


Are comparison operators too going vectorial?

void main() {
    int[5] a1, a2, a3;
    bool[5] b1, b2;
    ubyte[5] u1, u2;

    a1 = [1, 2, 3, 4, 5];
    a2 = [5, 2, 1, 4, 4];

    b1 = a1[] > 3;
    assert(b1 == [false, false, false, true, true]);
    u1 = a1[] > 3;
    assert(u1 == [0, 0, 0, 1, 1]);

    b2 = a1[] > a2[];
    assert(b2 == [false, false, true, false, true]);
    u2 = a1[] > a2[];
    assert(u2 == [0, 0, 1, 0, 1]);

    a3 = max(a1[], a2[]);
    assert(a3 == [5, 2, 3, 4, 5]);
    
    assert(pack(a1, a1[] > 3) == [4, 5]);
}

Vectorial comparisons are common in NumPy code:
https://github.com/paulnasca/paulstretch_python/raw/master/paulstretch_stereo.py


If you take a look at the AVX instructions you get ideas for some other vectorial operations beside just the comparison ones, like vectorial loops:
http://software.intel.com/file/33301

A useless example:

void main() {
    int[5] a0 = [0, 0, 0, 0, 0];
    int[5] a = [1, 2, 3, 4, 5];
    while (a[] > 0)
        a[] = min(a[] - 1, a0[]);
    assert(a0[] == a[]);
}

Bye,
bearophile


More information about the Digitalmars-d mailing list