2016-01-20 4 views
14

मैं कुछ सी # कोड चला रहा हूं जो System.Numerics.Vector<T> का उपयोग करता है लेकिन जहां तक ​​मैं कह सकता हूं कि मुझे सिमड इंट्रिनिक्स का पूरा लाभ नहीं मिल रहा है। मैं विजुअल स्टूडियो कम्युनिटी 2015 का उपयोग अद्यतन 1 के साथ कर रहा हूं, और मेरा clrjit.dll v4.6.1063.1 है।RyuJIT सिम आंतरिक इंट्रिनिक्स का पूरा उपयोग नहीं कर रहा है

मैं Intel Core i5-3337U Processor पर चल रहा हूं, जो AVX निर्देश सेट एक्सटेंशन लागू करता है। इसलिए, मुझे लगता है, मैं 256 बिट रजिस्टर पर सबसे सिम निर्देशों को निष्पादित करने में सक्षम होना चाहिए। उदाहरण के लिए, डिस्सेप्लर में vmovups, vmovupd, vaddups, आदि ... जैसे निर्देशों में होना चाहिए, और Vector<float>.Count 8, Vector<double>.Count 4 होना चाहिए, आदि ... लेकिन यह वह नहीं है जो मैं देख रहा हूं।

WriteLine($"{Vector<byte>.Count} bytes per operation"); 
WriteLine($"{Vector<float>.Count} floats per operation"); 
WriteLine($"{Vector<int>.Count} ints per operation"); 
WriteLine($"{Vector<double>.Count} doubles per operation"); 

का उत्पादन:

इसके बजाय मेरी disassembly movups, movupd, addups, आदि ... और निम्न कोड की तरह निर्देश शामिल हैं

16 bytes per operation 
4 floats per operation 
4 ints per operation 
2 doubles per operation 

कहाँ मैं गलत हो रहा हूँ? सभी परियोजना सेटिंग्स आदि देखने के लिए परियोजना here उपलब्ध है।

+1

RyuJIT गिटहब पर खुला स्रोत है ताकि आप इसका कोड जांच सकें और सीधे डेवलपर्स के साथ चर्चा कर सकें। –

उत्तर

11

आपका प्रोसेसर थोड़ा दिनांकित है, इसकी माइक्रो-आर्किटेक्चर आइवी ब्रिज है। सैंडी ब्रिज का "टोक", एक विशेषता वास्तुशिल्प परिवर्तनों के बिना घटती है। आपका अभिशाप RyuJIT, located in ee_il_dll.cpp में कोड के इस बिट है, CILJit :: getMaxIntrinsicSIMDVectorLength() फ़ंक्शन:

if (((cpuCompileFlags & CORJIT_FLG_PREJIT) == 0) && 
    ((cpuCompileFlags & CORJIT_FLG_FEATURE_SIMD) != 0) && 
    ((cpuCompileFlags & CORJIT_FLG_USE_AVX2) != 0)) 
{ 
    static ConfigDWORD fEnableAVX; 
    if (fEnableAVX.val(CLRConfig::EXTERNAL_EnableAVX) != 0) 
    { 
     return 32; 
    } 
} 

नोट CORJIT_FLG_USE_AVX2 का उपयोग। आपका प्रोसेसर अभी तक AVX2 का समर्थन नहीं करता है, वह एक्सटेंशन हैसल में उपलब्ध हो गया। आइवी ब्रिज के बाद अगला माइक्रो-आर्किटेक्चर, एक "टिक"। बहुत अच्छा प्रोसेसर बीटीडब्ल्यू, this one जैसी खोजों में एक प्रमुख वाह कारक है।

आप इसके बारे में कुछ भी नहीं कर सकते लेकिन खरीदारी कर सकते हैं। प्रेरणा के लिए, आप this post में उत्पन्न कोड के प्रकार को देख सकते हैं।

+0

वह वास्तव में एवीएक्स समर्थन को लागू करने और पैच जमा करने का भी प्रयास कर सकता है। यह नहीं कि यह एक यथार्थवादी विकल्प है। या वहां टिकट खोलें - शायद AVX2 का उपयोग पूरी तरह से जानबूझकर नहीं था? लेकिन आम तौर पर - हाँ। खरीदारी सबसे अच्छा विकल्प है। – TomTom

संबंधित मुद्दे

 संबंधित मुद्दे