「System.Numerics.Vector<T>」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| 52行目: | 52行目: | ||
var v = new Vector<int>(new[]{1,2,3,4,5,6,7}); | var v = new Vector<int>(new[]{1,2,3,4,5,6,7}); | ||
// System.IndexOutOfRangeException | // System.IndexOutOfRangeException | ||
== 使ってみる == | |||
配列が小さい(64未満くらい)と逆に遅くなる模様。 | |||
<source> | |||
// 配列を用意する | |||
var array = Enumerable.Range(0, 1024).ToArray(); | |||
var arraySize = array.Length; | |||
// SIMDサイズ | |||
var simdSize = Vector<int>.Count; | |||
// インクリメント用 | |||
var one = Vector<int>.One; | |||
// 実行 | |||
for (int index = 0; index < arraySize; index += simdSize) | |||
{ | |||
// 配列をSIMDレジスタに格納 | |||
var vector = new Vector<int>(array, index); | |||
// ベクトル演算Add | |||
vector += one; | |||
// SIMDレジスタを配列に書き戻す | |||
vector.CopyTo(array, index); | |||
} | |||
</source> | |||