यह अनिवार्य रूप से है क्योंकि सभी जीपीयू फ़ंक्शन कॉल का समर्थन नहीं कर सकते हैं- और भले ही वे कर सकते हैं, फ़ंक्शन कॉल काफी धीमी हो सकती हैं या बहुत छोटी स्टैक गहराई जैसी सीमाएं हो सकती हैं।
शेडर कोड और जीपीयू कंप्यूट कोड सभी स्थानों पर फ़ंक्शन कॉल के लिए दिखाई दे सकते हैं, लेकिन सामान्य परिस्थितियों में वे सभी 100% कंपाइलर द्वारा इनबिल्ड होते हैं। GPU द्वारा निष्पादित मशीन कोड में शाखाएं और लूप होते हैं, लेकिन कोई फ़ंक्शन कॉल नहीं करता है। हालाँकि, पुनरावर्ती फ़ंक्शन कॉल स्पष्ट कारणों के लिए इनलाइन नहीं हो सकते हैं। (जब तक कि कुछ दलीलें संकलन-समय स्थिरांक न हों, इस तरह से कि संकलक उन्हें मोड़ सकता है और कॉल के पूरे पेड़ को इनलाइन कर सकता है।)
सही फ़ंक्शन कॉल को कार्यान्वित करने के लिए, आपको एक स्टैक की आवश्यकता होती है। अधिकांश समय, shader कोड सभी में ढेर का उपयोग नहीं करता है-GPU के पास बड़ी रजिस्टर फाइलें होती हैं और shaders पूरे समय रजिस्टर में अपना सारा डेटा रख सकते हैं। स्टैक का काम करना मुश्किल है क्योंकि (ए) आपको एक बार में उड़ान भरने वाले सभी वॉरप्स के लिए ढेर सारे स्टैक स्पेस की आवश्यकता होगी, और (बी) जीपीयू मेमोरी सिस्टम को एक साथ बैचिंग के लिए अनुकूलित किया गया है। उच्च लेन-देन को प्राप्त करने के लिए मेमोरी लेन-देन, लेकिन यह विलंबता की कीमत पर आता है, इसलिए मेरा अनुमान है कि स्थानीय चरों को बचाने / बहाल करने जैसे स्टैक ऑपरेशन बहुत धीमी गति से होंगे।
ऐतिहासिक रूप से, GPU पर हार्डवेयर-स्तरीय फ़ंक्शन कॉल बहुत उपयोगी नहीं हैं, क्योंकि इससे कंपाइलर में सब कुछ इनलाइन करने के लिए अधिक समझ में आता है। इसलिए GPU आर्किटेक्ट्स ने उन्हें तेजी से बनाने पर ध्यान केंद्रित नहीं किया है। संभवतः कुछ अलग ट्रेडऑफ़ बनाए जा सकते हैं, अगर भविष्य में कुशल हार्डवेयर-स्तरीय कॉल की मांग है, लेकिन (इंजीनियरिंग में सब कुछ के साथ) यह कहीं और खर्च उठाना होगा।
जहां तक किरणों का संबंध है, जिस तरह से लोग आमतौर पर इस तरह की चीज को संभालते हैं, वह उन किरणों की कतार बनाकर होती है, जो पता लगाने की प्रक्रिया में हैं। पीछे हटने के बजाय, आप एक कतार में एक किरण जोड़ते हैं, और उच्च स्तर पर कहीं न कहीं आपके पास एक लूप होता है जो तब तक प्रसंस्करण करता रहता है जब तक कि सभी कतारें खाली न हो जाएं। यदि आपको एक क्लासिक पुनरावर्ती किरण से शुरू कर रहे हैं, तो यह आपके प्रतिपादन कोड के महत्वपूर्ण पुनर्गठन की आवश्यकता है। अधिक जानकारी के लिए, इस पर पढ़ने के लिए एक अच्छा पेपर वेवफ्रंट पाथ ट्रेसिंग है ।