2009-08-18 10 views
6

.NET ढांचे के गणित कार्य अधिकतर डबल परिशुद्धता फ्लोट पर काम करते हैं, कोई भी सटीक (फ्लोट) अधिभार नहीं होता है। उच्च प्रदर्शन परिदृश्य में एकल परिशुद्धता डेटा के साथ काम करते समय इसके परिणामस्वरूप अनावश्यक कास्टिंग और आवश्यक परिस्थितियों के साथ अधिक परिशुद्धता वाले कार्यों की गणना भी होती है, इस प्रकार प्रदर्शन कुछ डिग्री से प्रभावित होता है।.NET में सिंगल प्रेसिजन मैथ ऑपरेशंस?

क्या इस अतिरिक्त सीपीयू ओवरहेड से बचने का कोई तरीका है? जैसे क्या फ्लोट ओवरलोड के साथ एक ओपन सोर्स गणित लाइब्रेरी है जो अंतर्निहित एफपीयू निर्देशों को सीधे कॉल करती है? (मेरी समझ यह है कि इसे सीएलआर में समर्थन की आवश्यकता होगी)। और वास्तव में मुझे यकीन नहीं है कि आधुनिक CPUs में भी एक सटीक निर्देश हैं।

यह सवाल आंशिक रूप से एक अवग्रह समारोह के अनुकूलन के बारे इस सवाल से प्रेरित है:

Math optimization in C#

उत्तर

3
मेरी जानकारी के लिए

, .नेट फ्रेमवर्क गणित intrinsics के लिए सीधी पहुँच के साथ एक API शामिल नहीं है। मोनो पुस्तकालयों में अंतर्निहित कार्यों के लिए कामकाजी समर्थन शामिल है, लेकिन मुझे यकीन नहीं है कि उनकी स्थिति।

[संपादित करें:। इस पैरा पर तुम क्यों float मापदंडों के लिए भार के नहीं दिख रहा कमेंटरी है] एक मुसीबत CLI मूल्यांकन ढेर float और double प्रकार के बीच भेद नहीं करता है (ECMA-335 के अनुसार) है। एक वैध कार्यान्वयन सब कुछ गणित परिचालनों के लिए double के रूप में व्यवहार कर सकता है, लेकिन मुझे लगता है कि सीएलआर (सीएलआई का माइक्रोसॉफ्ट का कार्यान्वयन) एकल परिशुद्धता अंकगणितीय के लिए अनुकूलन करता है जहां यह कर सकता है।

मुझे लगता है कि यह कुछ हद तक दुर्भाग्यपूर्ण है कि आंतरिक उत्पादों (विशेष रूप से सिम एक्सटेंशन में) को जारी नहीं किया गया है [अभी तक जारी उत्पाद में]। मेरे बाहरी व्यक्ति का अनुमान है कि इंट्रिनिक्स के लिए समर्थन वीएम को महत्वपूर्ण बदलाव की आवश्यकता होगी जो इस बिंदु पर .NET Framework रिलीज चक्र में अस्वीकार्य जोखिम उत्पन्न करता है। कचरा कलेक्टर (और मुझे लगता है कि अपवाद हैंडलिंग तंत्र) रजिस्टर आवंटक के साथ कसकर मिलकर है, और सहायक इंट्रिनिक्स उस क्षेत्र में एक कट्टरपंथी नया चर जोड़ता है।

+0

जब आप instrinsics को संदर्भित करते हैं तो यह बाहरी कार्यों के समान होता है? - इस तरह गणित कार्यों को लागू किया जाता है, बनाम अंतर्निहित भाषा में परिभाषित किया जाता है। AFAIK सीएलआर को लागू करने के लिए आसानी से बढ़ाया जा सकता है उदा। डबल सटीक संस्करण के अलावा सार्वजनिक स्थैतिक बाहरी डबल पाप (फ्लोट ए)। – redcalx

+1

क्या आप इसे मूल कोड में लागू करने के बारे में बात कर रहे हैं? पी/एक फ्लोटिंग प्वाइंट ऑपरेशन के लिए ऐसा करने के लिए ओवरहेड का आह्वान 'पाप (डबल)' के साथ काम करने के प्रदर्शन प्रभाव से बचने के लिए पूरी तरह से अस्वीकार कर देगा। इंट्रिनिक्स को 'बाहरी' घोषित किया जाता है लेकिन पी/इनवोक नहीं होते हैं - उनके लिए मूल कोड आंतरिक रूप से जेआईटी द्वारा उन्हें जितना संभव हो सके उतना कुशल बनाने के लिए संभाला जाता है। –

+0

तो शायद कुछ प्रदर्शन प्राप्त किया जा सकता है यदि आपका एल्गोरिदम ऐसा था कि आप एक एकल पी/Invoke कर सकते हैं जो कई फ्लोट ऑपरेशंस करता है। – Fantius

1

हां, हम एक उच्च प्रदर्शन आगे स्केलिंग गणित पुस्तकालय का निर्माण करते हैं जो मूल रूप से एकल परिशुद्धता फ़्लोटिंग पॉइंट कंप्यूटेशंस का उपयोग करता है यदि आपको इसकी आवश्यकता हो। और यदि आप सही तरीके से लागू होते हैं, तो आप सही हैं, डबल डबल परिशुद्धता का उपयोग करते समय वे बहुत तेज हो सकते हैं।

केंद्र स्पेस सॉफ्टवेयर से this गणित पुस्तकालय देखें।

पॉल

+1

तो यह पुस्तकालय संभावित रूप से अप्रबंधित कोड पर कॉल कर रहा है? – redcalx

+1

हां, यह सही है। – Paul

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