什么是System.Numerics.Vector.ConditionalSelect用于?

时间:2018-03-28 23:45:01

标签: c# .net simd system.numerics

任何人都可以优先用一个例子解释什么/何时/如何System.Numerics.Vector.ConditionalSelect可以使用?

我无法理解docs

1 个答案:

答案 0 :(得分:1)

当使用condition的4字节重载(例如带有Vector<int>ConditionalSelect参数的重载)时,Vector<int>参数实际上是Vector<float>。使用8字节版本等时,conditionVector<long>

要扩展您问题中@Hans的评论,condition的含义是:double c = cond == -1 ? a : b;。也就是说,当cond == -1时,它选择左值。当cond == 0时,它选择正确的值。

cond是另外一个东西时,我看到了一些我不太了解的结果,也没有进行实际研究。

class Program
{
    static void Main(string[] args)
    {
        //Length depends on your Vector<int>.Count. In my computer it is 4
        Vector<int> vector1 = new Vector<int>(4); //vector1 == {<4, 4, 4, 4>}
        Vector<int> vector2 = new Vector<int>(5); //vector2 == {<5, 5, 5, 5>}
        Vector<int> mask = Vector.GreaterThan(vector1, vector2); //mask == {<0, 0, 0, 0>}
        Vector<int> selected = Vector.ConditionalSelect(mask, vector1, vector2); //selected == {<5, 5, 5, 5>}

        vector1 = new Vector<int>(4); //vector1 == {<4, 4, 4, 4>}
        vector2 = new Vector<int>(3); //vector2 == {<3, 3, 3, 3>}
        mask = Vector.GreaterThan(vector1, vector2); //mask == {<-1, -1, -1, -1>}
        selected = Vector.ConditionalSelect(mask, vector1, vector2); //selected == {<4, 4, 4, 4>}

        mask = new Vector<int>(123); //mask == {<123, 123, 123, 123>}
        selected = Vector.ConditionalSelect(mask, vector1, vector2); //selected == {<0, 0, 0, 0>}

        mask = new Vector<int>(4);
        selected = Vector.ConditionalSelect(mask, vector1, vector2); //selected == {<7, 7, 7, 7>}
    }
}
相关问题