
तेज़ कार्यात्मक उपकरण मॉडल लिखने के लिए वर्चुअल प्लेटफॉर्म के लिए डोमेन-विशिष्ट भाषा। DML को Intel Simics सिम्युलेटर के लिए अनुकूलित API कॉल के साथ C में संकलित करता है, जो हार्डवेयर सिमुलेशन और सुरक्षा परीक्षण को सक्षम बनाता है।
डिवाइस मॉडलिंग भाषा (DML) एक डोमेन-विशिष्ट भाषा है जो वर्चुअल प्लेटफार्मों के लिए तेज़ कार्यात्मक या ट्रांजेक्शन-स्तरीय डिवाइस मॉडल लिखने के लिए उपयोग की जाती है। DML कार्यात्मक डिवाइस मॉडल के लिए उपयुक्त उच्च-स्तरीय अब्स्ट्रैक्शन प्रदान करता है, जिसमें रजिस्टर बैंक, रजिस्टर, बिट फील्ड, ईवेंट पोस्टिंग, मॉडलों के बीच इंटरफेस और लॉगिंग जैसे कंस्ट्रक्ट शामिल हैं। DML कोड को DML Compiler (DMLC) द्वारा संकलित किया जाता है, जो एक विशिष्ट सिमुलेटर के लिए अनुकूलित API कॉल के साथ C कोड उत्पन्न करता है।
वर्तमान में, कंपाइलर Intel® Simics® सिमुलेटर के लिए मॉडल बनाने का समर्थन करता है, लेकिन भविष्य में अन्य बैक-एंड जोड़े जा सकते हैं।
DMLC बनाने के लिए, आपके पास एक Simics सिमुलेटर स्थापना और एक Simics प्रोजेक्ट सेट अप होना चाहिए।
यदि आपके पास पहले से Simics सिमुलेटर स्थापना या वाणिज्यिक चैनलों के माध्यम से Simics सिमुलेटर तक पहुंच नहीं है, तो इंस्टॉल करें Intel Simics सिमुलेटर का सार्वजनिक रिलीज़ और एक Simics प्रोजेक्ट बनाएं (डिफ़ॉल्ट स्थापना प्रवाह में स्वचालित)।
अपने Simics प्रोजेक्ट में, DML रिपॉजिटरी को modules/dmlc निर्देशिका में चेक आउट करें। प्रोजेक्ट के शीर्ष-स्तर पर, make dmlc (या विंडोज़ पर bin\make dmlc) चलाएँ।
DMLC के साथ प्रदान किए गए यूनिट परीक्षणों को चलाने के लिए, प्रोजेक्ट के शीर्ष-स्तर से make test-dmlc या bin/test-runner --suite modules/dmlc/test चलाएँ।
DMLC विकसित करते समय निम्नलिखित पर्यावरण चर उपयोगी होते हैं। यदि आप नियमित रूप से स्थानीय रूप से निर्मित DMLC के साथ काम करते हैं, तो अपने .bashrc में चर DMLC_DIR, T126_JOBS, DMLC_PATHSUBST और PY_SYMLINKS सेट करने पर विचार करें। शेष चर केवल आवश्यकतानुसार सक्षम करना बेहतर है।
DMLC के निर्माण के बाद, आपको DMLC_DIR को <your-project>/<hosttype>/bin पर सेट करना होगा, ताकि स्थानीय रूप से निर्मित कंपाइलर के साथ डिवाइस बनाने के लिए make के बाद के आह्वान में इसका उपयोग हो सके। <hosttype> आपके होस्ट प्रकार के आधार पर linux64 या win64 है।
सेट होने पर, दिए गए संख्या में परीक्षण समानांतर में चलाए जाते हैं।
DMLC निर्माण कुछ DML लाइब्रेरी फ़ाइलों, जैसे dml-builtins.dml, को <hosttype>/bin में कॉपी करता है। जब कोई संकलन त्रुटि होती है, तो त्रुटि संदेश सामान्यतः इस प्रतिलिपि की ओर इशारा करेंगे न कि स्रोत की ओर। DMLC_PATHSUBST को <hosttype>/bin/dml=modules/dmlc/lib पर सेट करके, त्रुटि संदेशों को पुनर्लेखित किया जाएगा जो स्रोत फ़ाइल की ओर इंगित करेंगे। <hosttype> आपके होस्ट प्रकार के आधार पर linux64 या win64 है।
जब 1 पर सेट किया जाता है, तो make dmlc Python फ़ाइलों को कॉपी करने के बजाय सिमलिंक करेगा। इसके दो प्रभाव हैं: Python ट्रेसबैक आपको रिपॉजिटरी में स्रोत फ़ाइल पर ले जाएंगे, और Python फ़ाइलों को संपादित करने के बाद आपको make को पुनः चलाने की आवश्यकता नहीं है।
जब 1 पर सेट किया जाता है, तो कंपाइलर में अप्रत्याशित अपवाद stderr पर प्रतिध्वनित होते हैं। डिफ़ॉल्ट रूप से ट्रेसबैक dmlc-error.log फ़ाइल में छिपाए जाते हैं।
यूनिट परीक्षणों में डिफ़ॉल्ट कंपाइलर को ओवरराइड करें।
सेट होने पर, DMLC स्व-प्रोफाइलिंग करता है और प्रोफाइल को .prof फ़ाइल में लिखता है।
सेट होने पर, DMLC एक .tar.bz2 आर्काइव उत्सर्जित करता है जिसमें सभी DML स्रोत फ़ाइलें होती हैं, जो एक ऐसे रूप में पैकेज की जाती हैं जिसे अकेला संकलित किया जा सकता है। यह तब उपयोगी होता है जब कोई DML समस्या एक जटिल निर्माण वातावरण में दिखाई देती है, और आप समस्या को अलग-थलग करके पुन: उत्पन्न करना चाहते हैं। बनाए गए आर्काइव में, सभी DML फ़ाइलें एक ही निर्देशिका में स्थित होती हैं (या तो शीर्ष स्तर पर या _ नामक उपनिर्देशिकाओं की एक श्रृंखला के अंतर्गत), और सापेक्ष आयात को आर्काइव में सिमलिंक शामिल करके भी संभाला जाता है। विंडोज़ पर, DMLC कभी-कभी इन सिमलिंक को सही ढंग से हल करने में असमर्थ होता है; इस कारण से, यह अनुशंसा की जाती है कि आर्काइव को केवल लिनक्स पर निकाला और संकलित किया जाए।
सेट होने पर, DMLC एक फ़ाइल आउटपुट करता है जो -size-stats.json में समाप्त होती है, जो कोड जनरेशन आँकड़े दिखाती है जो उत्पन्न कोड आकार को कम करने और संकलन गति बढ़ाने में उपयोगी होते हैं। फ़ाइल सूचीबद्ध करती है कि प्रत्येक DML विधि के लिए कितना C कोड उत्पन्न होता है। आउटपुट त्रिक [tot_size, location, num] की एक सूची है, जहाँ tot_size एक विधि घोषणा से उत्पन्न C कोड के बाइट्स की कुल संख्या है, num वह संख्या है जितनी बार इस घोषणा से C कोड उत्पन्न हुआ (क्योंकि यह एक टेम्पलेट द्वारा विस्तारित किया गया था), और location घोषणा का स्रोत स्थान है।
बड़े tot_size और बड़े num वाली प्रविष्टि को विधि को shared घोषित करके कम किया जा सकता है; इससे आकार को num से लगभग विभाजित करना चाहिए। बड़े tot_size के साथ num = 1 वाली प्रविष्टि का आमतौर पर अर्थ है कि विधि एक #foreach या #select जैसे कंस्ट्रक्ट द्वारा प्रभुत्व है, और इसे लूप बॉडी को एक अलग विधि में तोड़कर, या लूप को किसी अन्य कंस्ट्रक्ट जैसे foreach में पुनर्कार्य करके कम किया जा सकता है।
ध्यान दें कि आँकड़े केवल विधि घोषणाओं से सीधे उत्पन्न कोड को शामिल करते हैं; कुल कोड आकार में बहुत कुछ और शामिल है। विधि घोषणाओं से एक मेगाबाइट कोड आकार आमतौर पर संकलन समय के कुछ सेकंड में योगदान देता है।