Próbuję użyć System.Numerics.Vector<T>
(documentation).Dlaczego Vector <T> .Count static?
Napisałem prosty test Jednostka:
var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, v.Count);
Ale to dało mi błąd kompilacji:
Member 'Vector.Count' cannot be accessed with an instance reference; qualify it with a type name instead
Ku mojemu zaskoczeniu, Vector<T>.Count
jest statyczny.
Tak próbowałem:
var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, Vector<double>.Count);
Teraz kod buduje, ale z testów jednostkowych nie:
Assert.AreEqual failed. Expected:<3>. Actual:<2>.
Co się dzieje?
Badanie znalazłem:
Assert.AreEqual(2, Vector<double>.Count);
Assert.AreEqual(4, Vector<float>.Count);
Assert.AreEqual(4, Vector<int>.Count);
Assert.AreEqual(2, Vector<long>.Count);
Twoje dwa fragmenty są identyczne. – BoltClock
@BoltClock thanks fixed. –
Cóż, odkrywasz, dlaczego klasa nie została dodana do frameworka. Otrzymana wartość jest również niesłusznie, na procesorze Haswell lub Broadwella powinna być podwójna wartość, ponieważ użyje on 256-bitowych rejestrów YMM dostarczonych przez AVX2. Pozostawia 2x perf na stole, trudno ukryć ten szczegół implementacji. AVX-512 już wkrótce :) –