Çekirdek işlevinde, her ikisi de size
uzunluğunda (aslında sizeof(float)*size
) paylaşılan iki paylaşılan bellek istiyorum.İki farklı vektör için dinamik paylaşımlı bellek ayırma kullan
extern __shared__ float row[];
extern __shared__ float results[];
: çekirdek içinde
myKernel<<<numBlocks, numThreads, 2*sizeof(float)*size>>> (...);
ve: Bu değişken gerekiyorsa çekirdek işlevinde doğrudan bellek tahsis etmek mümkün olmadığından
, ben gibi dinamik olarak tahsis etmek zorunda
Ancak, bu işe yaramıyor. Bunun yerine
, Ayrılmış2*size
belleği kullanarak, tüm verileri içeren tek bir vektör
extern __shared__ float rowresults[]
yaptı. Yani
row
çağrıları hala aynıdır ve
results
çağrıları
rowresults[size+previousIndex]
gibidir. Ve bu işe yarıyor.
Büyük bir sorun değil çünkü beklenen sonuçları zaten aldım, ancak dinamik olarak ayrılmış paylaşılan belleğimi iki (veya daha fazla) farklı değişkene ayırmanın herhangi bir yolu var mı? Sadece güzellik için.
Bunu yapmanın daha güzel bir yolu, aradığım şey buydu. Teşekkürler. – machlas
@Imortenson Bu yöntem, bellekteki öğelerin dinamik erişim hizalamasının yararlarını destekliyor mu? Eğer belleği “sizeof (float)” olarak tahsis ettiyseniz veya “float” dizilimini izleyecekseniz 'float4'a 32byte 'hizasında erişilir mi? Teşekkürler. – BugShotGG
Örneğinizde dizilerinizin boyutlarını biliyorsunuz; öyleyse neden yerine bir struct tanımlamıyorsunuz ve paylaşılan belleği bu yapı olarak yeniden yorumluyorsunuz? – einpoklum