Bunun nedeni, tüm GPU'ların işlev çağrılarını destekleyememesidir ve mümkün olsalar bile, işlev çağrıları oldukça yavaş olabilir veya çok küçük yığın derinliği gibi sınırlamaları olabilir.
Gölgelendirici kodu ve GPU hesaplama kodu her yerde işlev çağrılarına sahip gibi görünebilir, ancak normal koşullar altında derleyici tarafından% 100 satır içine alınır. GPU tarafından yürütülen makine kodu dallar ve döngüler içeriyor, ancak işlev çağrısı yok. Ancak, özyinelemeli işlev çağrıları açık nedenlerle satır içine alınamaz. (Bazı argümanlar derleme zamanı sabitleri olmadığı sürece, derleyici bunları katlayabilir ve tüm çağrı ağacını satır içine alabilir.)
Gerçek işlev çağrılarını uygulamak için bir yığına ihtiyacınız vardır. Çoğu zaman, gölgelendirici kodu hiç yığın kullanmaz - GPU'ların büyük kayıt dosyaları vardır ve gölgelendiriciler tüm verilerini sürekli olarak kayıtlarda tutabilir. Bir yığının çalışması zordur, çünkü (a) aynı anda uçuşta olabilecek tüm çözgüleri sağlamak için çok fazla yığın alanına ihtiyacınız olacak ve (b) GPU bellek sistemi çok fazla toplu iş için optimize edilmiştir yüksek işlem hacmi elde etmek için bellek işlemlerinin, ancak bu gecikme pahasına gelir, bu yüzden benim tahminim, yerel değişkenleri kaydetmek / geri yüklemek gibi yığın işlemleri çok yavaş olacaktır.
Tarihsel olarak, donanım düzeyindeki işlev çağrıları GPU'da çok yararlı olmamıştır, çünkü derleyicideki her şeyi satır içine almak daha mantıklıdır. Bu yüzden GPU mimarları onları hızlı yapmaya odaklanmadı. Muhtemelen bazı farklı dengesizlikler yapılabilir, eğer gelecekte donanım düzeyinde verimli aramalar için bir talep varsa, ancak (mühendislikteki her şeyde olduğu gibi) başka bir yerde maliyete neden olacaktır.
Işın izleme söz konusu olduğunda, insanların genellikle bu tür şeylerle başa çıkma şekli, izlenmekte olan ışınların kuyruklarını oluşturmaktır. Özyineleme yerine, bir kuyruğa bir ışın eklersiniz ve yüksek bir yerde, tüm kuyruklar boşalana kadar işlemeye devam eden bir döngünüz vardır. Bununla birlikte, klasik bir özyinelemeli raytracer'dan başlıyorsanız, oluşturma kodunuzun önemli ölçüde yeniden düzenlenmesini gerektirir. Daha fazla bilgi için, bu konuda okunacak iyi bir makale Wavefront Path Tracing'dir .