CrossTL: Hub-Based Translation of GPU Programs and the Preservation of Source Rules
यह शोध पत्र CrossTL को प्रस्तुत करता है, जो एक ओपन-सोर्स हब-आधारित ट्रांसलेटर है जो एक नियम-वहन करने वाली मध्यवर्ती भाषा (CrossGL) के माध्यम से दस GPU भाषाओं को ग्यारह लक्ष्यों तक रूट करता है, जो यह प्रदर्शित करता है कि स्रोत-विशिष्ट अर्थ संबंधी नियमों को स्पष्ट रूप से संरक्षित करना केवल सिंटैक्स-आधारित दृष्टिकोणों की तुलना में अनुवाद संबंधी विचलन को काफी कम कर देता है, हालांकि यह अंतर्निहित कार्यान्वयन गैर-अनुरूपताओं के कारण पूर्ण शुद्धता की गारंटी नहीं दे सकता है और बड़े पैमाने पर तीसरे पक्ष के कोड पर केवल मामूली उपयोगिता लाभ प्रदान करता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने नहीं लिखा है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
आधुनिक वीडियो गेम, वैज्ञानिक सिमुलेशन और आर्टिफिशियल इंटेलिजेंस सभी एक विशेष प्रकार के कंप्यूटर प्रोग्राम पर निर्भर करते हैं जो ग्राफिक्स प्रोसेसर पर चलते हैं। ये चिप्स एक साथ कई गणनाएँ करने में अविश्वसनीय रूप से तेज़ होते हैं, लेकिन वे संख्याओं को संभालने के मामले में बहुत चूजी (नखरेबाज़) होते हैं। इन चिप्स को बनाने वाली विभिन्न कंपनियाँ—जैसे कि एप्पल, एनवीडिया (NVIDIA) और एएमडी (AMD)—इन प्रोग्रामों को लिखने के लिए अलग-अलग भाषाओं का उपयोग करती हैं। हालाँकि ये भाषाएँ सतह पर समान दिखती हैं, लेकिन अक्सर अंकगणित के बुनियादी नियमों पर उनमें मतभेद होता है। उदाहरण के लिए, एक भाषा कह सकती है कि जब परिणाम बहुत बड़ा हो जाए तो किसी संख्या को स्वयं में जोड़ने पर वह एक छोटी ऋणात्मक संख्या में 'रैप अराउंड' (घूमकर वापस आना) हो जानी चाहिए, जबकि दूसरी भाषा कह सकती है कि ऐसा कार्य अपरिभाषित है और परिणाम कुछ भी हो सकता है। यदि कोई डेवलपर एक प्रकार के चिप के लिए प्रोग्राम लिखता है और उसे दूसरे प्रकार के चिप पर ले जाने की कोशिश करता है, तो अनुवाद उपकरणों (ट्रांसलेशन टूल्स) को यह निर्णय लेना होता है कि किस नियम का पालन किया जाए। यदि वे इसमें गलती करते हैं, तो प्रोग्राम कंपाइल और रन तो हो सकता है, लेकिन वह गलत उत्तर देगा, जिससे गेम क्रैश हो सकता है या वैज्ञानिक डेटा दूषित हो सकता है।
शोधकर्ताओं की एक टीम ने इस समस्या को हल करने के उद्देश्य से इन ग्राफिक्स प्रोग्रामों के लिए एक सार्वभौमिक अनुवादक (यूनिवर्सल ट्रांसलेटर) बनाने का लक्ष्य रखा। उन्होंने 'क्रॉस टीएल' (CrossTL) नामक एक प्रणाली बनाई, जो एक केंद्रीय केंद्र (हब) के रूप में कार्य करती है। दस अलग-अलग स्रोत भाषाओं से कोड लेने और उसे ग्यारह अलग-अलग लक्ष्य भाषाओं में भेजने से पहले, उनकी प्रणाली इसे एक एकल, तटस्थ प्रारूप (न्यूट्रल फॉर्मेट) में परिवर्तित करती है। मुख्य चुनौती जो उन्हें झेलनी पड़ी वह यह थी कि यह तटस्थ प्रारूप, अपने आप में, यह याद नहीं रखता कि कोड के एक विशेष हिस्से को किस विशिष्ट नियम का पालन करना चाहिए था। यह एक साधारण जोड़ के चिह्न को देखता है, लेकिन यह नहीं बता सकता कि उस चिह्न का अर्थ "रैप अराउंड" है या "रुकना और त्रुटि देना"। इस स्मृति (मेमोरी) के बिना, अनुवादक अनजाने में प्रोग्राम का अर्थ बदल सकता है, जिससे 'साइलेंट फेल्योर' (मौन विफलता) हो सकती है जहाँ कोड चलता तो है लेकिन गलत परिणाम देता है।
इसे ठीक करने के लिए, शोधकर्ताओं ने "रूल कैरिंग" (नियम ले जाने) नामक एक विधि विकसित की। उन्होंने अपने अनुवादक को संशोधित किया ताकि वह प्रत्येक गणितीय ऑपरेशन के साथ मिलने वाले प्रत्येक ऑपरेशन से एक विशिष्ट नोट (टिप्पणी) संलग्न कर सके। यह नोट रिकॉर्ड करता है कि मूल भाषा ने उस ऑपरेशन के लिए किस नियम का उपयोग किया था। जब कोड हब के माध्यम से आगे बढ़ता है और एक नए लक्ष्य भाषा की ओर जाता है, तो अनुवादक इस नोट की जाँच करता है। यदि लक्ष्य भाषा उसी नियम का पालन करती है, तो वह ऑपरेशन को आगे भेज देता है। यदि लक्ष्य भाषा एक अलग नियम का पालन करती है, तो अनुवादक उस ऑपरेशन को एक कस्टम-निर्मित कोड के टुकड़े से बदल देता है जो लक्ष्य को बिल्कुल स्रोत की तरह व्यवहार करने के लिए मजबूर करता है। यह सुनिश्चित करता है कि प्रोग्राम नए हार्डवेयर पर भी वही परिणाम दे जो उसने पुराने हार्डवेयर पर दिया था, चाहे उसके अंतर्निहित भाषाओं में कितना भी अंतर क्यों न हो।
टीम ने इस प्रणाली का परीक्षण साठ-छह (66) सावधानीपूर्वक डिज़ाइन किए गए टेस्ट प्रोग्रामों के एक समूह का उपयोग करके किया, जिन्हें 'हैज़र्ड कर्नल्स' (hazard kernels) कहा जाता है। ये परीक्षण उन विशिष्ट नियमों को ट्रिगर करने के लिए डिज़ाइन किए गए थे जहाँ भाषाएँ असहमत होती हैं, जैसे कि शून्य से भाग देने पर या बहुत बड़ी संख्याओं को जोड़ने पर क्या होता है। उन्होंने एप्पल के ग्राफिक्स प्रोसेसर और कई ओपन-सोर्स ड्राइवरों सहित विभिन्न वास्तविक-विश्व हार्डवेयर और सॉफ्टवेयर वातावरणों पर इन परीक्षणों को चलाया। परिणामों ने दिखाया कि बिना उनकी नई विधि के, मौजूदा अनुवाद उपकरण कई मामलों में सही नियमों को खो देते थे, जिससे गलत आउटपुट प्राप्त होता था। जब शोधकर्ताओं ने 'रूल-कैरिंग' विशेषता को सक्षम किया, तो सिस्टम ने लगभग हर मामले में सही व्यवहार को सफलतापूर्वक संरक्षित किया। सैकड़ों परीक्षण रनों में से, त्रुटियों की संख्या नाटकीय रूप से कम हो गई, और शेष कुछ विफलताओं का पता ड्राइवरों द्वारा कोड को संभालने के विशिष्ट व्यवहार (quirks) के कारण लगा, न कि अनुवाद तर्क (ट्रांसलेशन लॉजिक) में खामियों के कारण।
अध्ययन ने यह भी देखा कि यह नई विधि तीसरे पक्ष द्वारा लिखे गए हजारों वास्तविक-विश्व प्रोग्रामों पर कैसा प्रदर्शन करती है, जो मशीन लर्निंग लाइब्रेरी से लेकर ग्राफिक्स इंजन तक विस्तृत हैं। शोधकर्ताओं ने पाया कि हालांकि नया सिस्टम कुछ स्थापित उपकरणों की तुलना में ऐसा कोड बनाने में थोड़ा कम सक्षम था जिसे एक कंपाइलर स्वीकार कर सके, लेकिन यह सुनिश्चित करने में कहीं अधिक विश्वसनीय था कि जो कोड कंपाइल हुआ वह वास्तव में काम करे। वास्तव में, नए तरीके ने कोड की सफलता दर को एक प्रतिशत से भी कम बदला, जिससे यह सिद्ध हुआ कि इसे मौजूदा वर्कफ़्लो को तोड़े बिना अपनाया जा सकता है। शोधकर्ताओं ने निष्कर्ष निकाला कि एक अनुवादक के लिए वास्तव में निष्ठावान होने के लिए, उसे केवल एक भाषा से दूसरी भाषा में सिंटैक्स (syntax) को स्थानांतरित नहीं करना चाहिए; उसे स्रोत भाषा के सिमेंटिक (अर्थ संबंधी) नियमों को भी अपने साथ ले जाना चाहिए, ताकि यह सुनिश्चित हो सके कि प्रोग्राम का अर्थ उसकी यात्रा के दौरान सुरक्षित रहे।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।