「System.Numerics.Vector<T>」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の4版が非表示) | |||
| 54行目: | 54行目: | ||
== 使ってみる == | == 使ってみる == | ||
基本は以下の繰り返し。 | |||
<source> | * 配列の一部分をVector<T>に格納する | ||
* ベクトル演算を実行する | |||
* 演算結果のVector<T>を配列に書き戻す | |||
<source lang="csharp"> | |||
// 配列を用意する | // 配列を用意する | ||
var array = Enumerable.Range(0, 1024).ToArray(); | var array = Enumerable.Range(0, 1024).ToArray(); | ||
| 79行目: | 83行目: | ||
} | } | ||
</source> | </source> | ||
== ベンチマーク == | |||
[[BenchmarkDotNet]]で単純な[[インクリメント]]を比較してみた。 | |||
備考:比較対象のScalarOpはこんな感じ。 | |||
<source lang="csharp"> | |||
for (int index = 0; index < arraySize; index ++) | |||
{ | |||
array[index] += 1; | |||
} | |||
</source> | |||
結果。 | |||
<source> | |||
BenchmarkDotNet=v0.12.1, OS=macOS Catalina 10.15.4 (19E287) [Darwin 19.4.0] | |||
Intel Core i7-8700B CPU 3.20GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores | |||
.NET Core SDK=3.1.300 | |||
[Host] : .NET Core 3.1.4 (CoreCLR 4.700.20.20201, CoreFX 4.700.20.22101), X64 RyuJIT | |||
Job-AGKFKU : .NET Core 3.1.4 (CoreCLR 4.700.20.20201, CoreFX 4.700.20.22101), X64 RyuJIT | |||
InvocationCount=1 UnrollFactor=1 | |||
| Method | ArraySize | Mean | Error | StdDev | Median | | |||
|--------- |---------- |----------:|----------:|---------:|----------:| | |||
| ScalarOp | 512 | 320.43 ns | 10.136 ns | 29.89 ns | 315.00 ns | | |||
| VectorOp | 512 | 159.76 ns | 9.236 ns | 27.09 ns | 166.50 ns | | |||
| ScalarOp | 1024 | 574.93 ns | 13.965 ns | 13.06 ns | 575.00 ns | | |||
| VectorOp | 1024 | 169.69 ns | 9.599 ns | 28.00 ns | 170.50 ns | | |||
</source> | |||
加速されすぎ。 | |||