我正在尝试转换一些可以使用SIMD指令优化的现有代码。有一个掩码生成代码,我正在测试转换后我可以从SIMD获得多少性能,而下面是我用来分析它的过度简化的块。
Random r = new Random();
var random1 = new double[65536000*4];
var random2 = new double[random1.Length];
var result = new bool[random1.Length];
for (i = 0; i < random1.Length; i++)
{
random1[i] = r.Next();
random2[i] = r.Next();
}
var longRes = new long[random1.Length];
for (int i = 0; i < result.Length; i += Vector<double>.Count)
{
Vector<double> v1 = new Vector<double>(random1, i);
Vector<double> v2 = new Vector<double>(random2, i);
Vector<long> res = System.Numerics.Vector.GreaterThan(v1, v2);
res.CopyTo(longRes, i);
}
我是否可以使用一种技术将结果res
有效地放入result
数组?
最初我以为我可以和Vector<long>
一起生活并将面具保留在long[]
但我意识到这可能是不可行的。
答案 0 :(得分:-1)
在对原始问题发表评论时,我意识到System.Numberics.Vector.GreaterThan
和其他类似方法(如LesserThan
等)设计用于ConditionalSelect()
。
在我的情况下,我试图生成一个bool
数组,该数组表示稍后在整个API中使用的图像掩码,并且将long转换为bool是不可行的。
换句话说,这些比较方法并非用于通用目的。