आंतरिक कार्य

From alpha
Jump to navigation Jump to search

सॉफ़्टवेयर में, संकलक सिद्धांत में, एक आंतरिक फ़ंक्शन (या अंतर्निर्मित फ़ंक्शन) एक फ़ंक्शन (सबरूटीन) है जो किसी दिए गए प्रोग्रामिंग भाषा में उपयोग के लिए उपलब्ध है जिसका कार्यान्वयन विशेष रूप से कंपाइलर द्वारा नियंत्रित किया जाता है। आमतौर पर, यह इनलाइन फ़ंक्शन के समान मूल फ़ंक्शन कॉल के लिए स्वचालित रूप से जेनरेट किए गए निर्देश सेट आर्किटेक्चर के अनुक्रम को प्रतिस्थापित कर सकता है।[1] एक इनलाइन फ़ंक्शन के विपरीत, कंपाइलर को एक आंतरिक फ़ंक्शन का गहन ज्ञान होता है और इस प्रकार यह किसी स्थिति के लिए इसे बेहतर ढंग से एकीकृत और अनुकूलित कर सकता है।

कंपाइलर जो आंतरिक कार्यों को लागू करते हैं, आम तौर पर उन्हें केवल तभी सक्षम करते हैं जब कोई प्रोग्राम अनुकूलन संकलक का अनुरोध करता है, अन्यथा भाषा रनटाइम सिस्टम (पर्यावरण) द्वारा प्रदान किए गए डिफ़ॉल्ट कार्यान्वयन पर वापस आ जाता है।

आंतरिक कार्यों का उपयोग अक्सर उन भाषाओं में स्वचालित वैश्वीकरण और स्वत: समानांतरकरण को स्पष्ट रूप से लागू करने के लिए किया जाता है जो इस तरह के निर्माणों को संबोधित नहीं करते हैं। कुछ अप्लिकेशन प्रोग्रामिंग अंतरफलक (API), उदाहरण के लिए, AltiVec और OpenMP, संकलन के दौरान क्रमशः सदिशीकरण और बहु-जागरूक संचालन घोषित करने के लिए आंतरिक कार्यों का उपयोग करते हैं। कंपाइलर आंतरिक कार्यों को पार्स करता है और उन्हें लक्षित प्लेटफार्म (कंप्यूटिंग) के लिए उपयुक्त वेक्टर गणित या मल्टीप्रोसेसिंग वस्तु कोड में परिवर्तित करता है। ऑप्टिमाइज़र को अतिरिक्त अवरोध प्रदान करने के लिए कुछ इंट्रिनिक्स का उपयोग किया जाता है, जैसे वे मान जो एक चर ग्रहण नहीं कर सकता है।[2]


सी और सी ++

माइक्रोसॉफ्ट के सी (प्रोग्रामिंग भाषा) और सी ++ के लिए कंपाइलर्स,[3] इंटेल,[1]और जीएनयू कंपाइलर संग्रह (जीसीसी)[4] इंट्रिनिक्स लागू करें जो सीधे x86 सिंगल इंस्ट्रक्शन, मल्टीपल डेटा (SIMD) इंस्ट्रक्शंस (MMX (इंस्ट्रक्शन सेट), स्ट्रीमिंग SIMD एक्सटेंशन्स (SSE), SSE2, SSE3, SSSE3, SSE4, उन्नत वेक्टर एक्सटेंशन, AVX2, AVX512, FMA निर्देश सेट पर मैप करता है। , ...). Microsoft Visual Studio का Microsoft Visual C++ कंपाइलर x86-64 के लिए इनलाइन असेंबली भाषा का समर्थन नहीं करता है।[5][6][7][8] इसकी भरपाई करने के लिए, नए इंट्रिनिक्स जोड़े गए हैं जो कि मानक असेंबली निर्देशों के लिए मानचित्र हैं जो सामान्य रूप से C/C++, जैसे बिट स्कैन के माध्यम से सुलभ नहीं हैं।

कुछ C और C++ कंपाइलर गैर-पोर्टेबल प्लेटफ़ॉर्म-विशिष्ट इंट्रिनिक्स प्रदान करते हैं। अन्य इंट्रिनिक्स (जैसे जीएनयू कंपाइलर कलेक्शन बिल्ट-इन) थोड़े अधिक सारगर्भित हैं, जो कई समकालीन प्लेटफार्मों की क्षमताओं का अनुमान लगाते हैं, बिना किसी उचित निर्देश के प्लेटफॉर्म पर पोर्टेबल फॉल बैक कार्यान्वयन के साथ।[9] यह C++ पुस्तकालयों के लिए सामान्य है, जैसे कि glm या Sony की कंप्यूटर ग्राफिक्स की शब्दावली#V,[10] सशर्त संकलन (प्लेटफ़ॉर्म विशिष्ट कंपाइलर फ़्लैग्स पर आधारित) के माध्यम से सुवाह्यता प्राप्त करने के लिए, पूरी तरह से पोर्टेबल उच्च-स्तरीय प्रिमिटिव (जैसे, एक चार-तत्व फ़्लोटिंग-पॉइंट वेक्टर प्रकार) प्रदान करते हुए उपयुक्त निम्न स्तर की प्रोग्रामिंग भाषा कार्यान्वयन पर मैप किया गया, जबकि अभी भी इससे लाभान्वित हो रहे हैं। सी ++ टाइप सिस्टम और इनलाइनिंग; इसलिए सी अनुप्रयोग बाइनरी इंटरफ़ेस (एबीआई) का उपयोग करके हाथ से लिखी गई असेंबली ऑब्जेक्ट फ़ाइलों को जोड़ने पर लाभ।

उदाहरण

<वाक्यविन्यास लैंग = सीपीपी शैली = फ़ॉन्ट-आकार: 83%; >

uint64_t __rdtsc (); // आंतरिक सीपीयू क्लॉक काउंटर लौटाएं
uint64_t __popcnt64 (uint64_t n); // एन में सेट बिट्स की गिनती
uint64_t _umul128 (uint64_t फैक्टर1, uint64_t फैक्टर2, uint64_t* हाईप्रोडक्ट); // 64 बिट * 64 बिट => 128 बिट गुणन
__m512 _mm512_add_ps (__m512 a, __m512 b); // 16 फ्लोट्स के दो वैक्टरों के लिए ए + बी की गणना करता है
__m512 _mm512_fmadd_ps(__m512 a, __m512 b, __m512 c); // 16 फ्लोट्स के तीन वैक्टरों के लिए ए * बी + सी की गणना करता है

</वाक्यविन्यास हाइलाइट>

लिंक

जावा

हॉटस्पॉट (वर्चुअल मशीन) जावा वर्चुअल मशीन (जेवीएम) जस्ट-इन-टाइम संकलन | समय-समय पर संकलन में विशिष्ट जावा एपीआई के लिए इंट्रिनिक्स भी है।[11] हॉटस्पॉट इंट्रिनिक्स मानक जावा एपीआई हैं जिनमें कुछ प्लेटफॉर्म पर एक या अधिक अनुकूलित कार्यान्वयन हो सकते हैं।

संदर्भ

  1. 1.0 1.1 "Intel® C++ Compiler 19.1 Developer Guide and Reference". Intel® C++ Compiler Documentation. 16 December 2019. Retrieved 2020-01-17.
  2. The Clang Team (2020). "Clang Language Extensions". Clang 11 documentation. Retrieved 2020-01-17. Builtin Functions
  3. MSDN. "Compiler Intrinsics". Microsoft. Retrieved 2012-06-20.
  4. GCC documentation. "Built-in Functions Specific to Particular Target Machines". Free Software Foundation. Retrieved 2012-06-20.
  5. MSDN. "Intrinsics and Inline Assembly". Microsoft. Archived from the original on 2018-01-02. Retrieved 2010-04-16.
  6. MSDN. "Intrinsics and Inline Assembly". Microsoft. Retrieved 2011-09-28.
  7. MSDN. "Intrinsics and Inline Assembly". Microsoft. Retrieved 2011-09-28.
  8. MSDN. "Intrinsics and Inline Assembly". Microsoft. Retrieved 2011-09-28.
  9. "Vector Extensions". Using the GNU Compiler Collection (GCC). Retrieved 2020-01-16.
  10. "Sony open sources Vector Math and SIMD math libraries (Cell PPU/SPU/other platforms)". Beyond3D Forum. Retrieved 2020-01-17.
  11. Mok, Kris (25 February 2013). "Intrinsic Methods in HotSpot VM". Slideshare. Retrieved 2014-12-20.


बाहरी संबंध