-1
我想轉換一些現有的代碼,可以使用SIMD指令進行優化。有一個掩碼生成代碼,我正在測試轉換後可以從SIMD中獲得多少性能,下面是我用來分析它的一個過於簡化的塊。System.Numerics.Vector.GreaterThan和布爾結果
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
陣列?
更新1
原本我以爲我可以Vector<long>
生活,並保持口罩long[]
但我意識到,也許這是不可行的。
當然,你不*真的*想要一個長的[]?您通常需要使用ConditionalSelect()next來使用比較結果來生成新的Vector。注意無故使用Parallel.For(),Random類不是線程安全的。 –
@HansPassant是的,我發佈後發現'Vector'是爲'ConditionalSelect()'而設計的,我可能想用它來代替。儘管如此,我還需要轉換一些手動屏蔽代碼。我正在考慮不會泄露代碼庫上層的這個實現細節的方法......也許我需要引入一個類的封裝器......並且感謝「隨機」線程安全性,在發佈後,我也意識到數組中包含很多0,因爲那... –
當你問完所有這些事情後才知道所有這些問題嗎?它只是浪費人們的時間,請刪除它。 –