nvcc kullanarak aşağıdaki kodu (CUDA 5.0) derleme, hata "hafıza elemeleri yasadışı kombinasyon", görünür.CUDA: Statik global üye fonksiyonlarını tanımlamak neden mümkün değil? o görünüşte bir sınıfta küresel çekirdekleri olacaktır imkansızdır olarak
class A
{
public:
__global__ static void kernel();
};
__global__ void A::kernel()
{}
statik olmayan üyeleri ile uğraşırken ben bu kısıtlamayı anlayabiliyorum, ama çekirdek statik ilan edildiğinde neden hata yine meydana gelir? Bu tür üyelerin çağrılması, bir ad alanında bildirildiğinde (bu durumda A
) işlevi çağırmaktan farklı olmayacaktır.
A::kernel <<< 1, 1 >>>();
Bunun neden uygulanmadığına dair bir eksiklik var mı (henüz)?
DÜZENLEME: Yanıtlar ve yorumlardaki yanıtlara dayanarak, sorumu yeterince açıklayamadım. Sorum, bir hata neden görünmüyor. Açıkçası, bunun nedeni henüz uygulanmamış olmasıdır. Sorum şu: neden uygulanmadı . Şimdiye kadar, bu özelliğin uygulanmasını engelleyen bir sebep düşünemedim. Meseleleri karmaşıklaştıracak özel bir durumun, yani soruyu unutmuş olabileceğimin farkındayım.
ben bu makul bir özelliği olduğuna inandığımız nedenlerden
şunlardır:- Statik fonksiyon çekirdek ana bilgisayarda yaşayan bir nesne üzerinde çağrıldığında Yani bile
this
işaretçisi yoktur, yoktur Bu verilere ilk etapta erişilemediği için, veriye erişimde herhangi bir çakışma yoktur (hangi nesneden veri?). Sınıfta kendisiyle ilişkilendirilmiş statik bir veri varsa, ana bilgisayarda yaşıyorsa, bu prensipte statik çekirdeğe erişilebilir olması gerektiğini iddia edebilirsiniz. Ancak, statik veriler de desteklenmiyor, bu yüzden tekrar bir çakışma yok. Biz düzenli C++ 'de kullanılan olarak ana bilgisayarda bir nesne üzerinde statik çekirdek çağrılması - (
A a; a.staticKernel<<<...,...>>>();)
,) bütün (A::staticKernel<<<...,...>>>();
de nesne olmadan çağırmak tamamen eşdeğer olacaktır.
ben eksik ?
_ _global_ _ fonksiyonu ile bir sınıf olması amacınız nedir? – 4pie0
"Benim sorum bu uygulamaya konmamıştır neden. Şu ana kadar uygulanmakta olan bu özelliğin tutan bir sebep geliyor edemedik olması."- Uygulanabilecek milyonlarca şey var ama böyle bir ihtiyaç yok ve bunlar hiçbir şekilde kabul edilmiyor. – 4pie0
Yani cevabınız:" Sadece değil. "? – JorenHeit