मैं System.Numerics.Vector<T>
(documentation) का उपयोग करने की कोशिश कर रहा हूं।वेक्टर <T> क्यों है स्थिर?
मैं एक साधारण इकाई परीक्षण लिखा है:
var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, v.Count);
लेकिन यह मेरे लिए एक निर्माण त्रुटि दिया:
Member 'Vector.Count' cannot be accessed with an instance reference; qualify it with a type name instead
मेरे आश्चर्य करने के लिए, Vector<T>.Count
स्थिर है।
तो मैं करने की कोशिश की:
var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, Vector<double>.Count);
अब कोड बनाता है लेकिन इकाई परीक्षण में विफल रहता है:
Assert.AreEqual failed. Expected:<3>. Actual:<2>.
पर क्या हो रहा है?
जांच मैंने पाया:
Assert.AreEqual(2, Vector<double>.Count);
Assert.AreEqual(4, Vector<float>.Count);
Assert.AreEqual(4, Vector<int>.Count);
Assert.AreEqual(2, Vector<long>.Count);
आपका दो स्निपेट समान हैं। – BoltClock
@ बोल्टक्लॉक धन्यवाद तय। –
ठीक है, आप खोज रहे हैं कि वर्ग को ढांचे में क्यों नहीं जोड़ा गया था। हैसवेल या ब्रॉडवेल प्रोसेसर पर आपको जो मूल्य मिलता है वह भी गलत है, यह मूल्य को दोगुना होना चाहिए क्योंकि यह AVX2 द्वारा प्रदान किए गए 256 बिट वाईएमएम रजिस्टरों का उपयोग करेगा। मेज पर 2x perf छोड़ देता है, उस कार्यान्वयन विस्तार को छिपाने के लिए मुश्किल है। AVX-512 जल्द ही आ रहा है :) –