簡體   English   中英

CUDA如何在運行時在共享內存的內核中創建數組?

[英]CUDA how to create arrays in runtime in kernel in shared memory?

我的任務是運行大量線程,每個線程執行一個小的矩陣乘法。 所有小矩陣均已加載到全局存儲器中。 我希望通過讓每個線程將其較小的矩陣加載到共享內存中,然后計算乘積來提高性能。 但是問題是我在編譯時不知道矩陣的大小。 因此,我無法像__shared__ double mat1[XSIZE][YSIZE]那樣創建變量。 在PC上,我會進行動態分配。 但是我不知道是否可以在共享內存上執行此操作。 如果在內核中調用malloc僅在全局內存中進行分配(假設可以進行此類調用),那么這也無濟於事。

有沒有一種方法可以在內核運行時聲明數組? 還有其他解決方法嗎?

您可以在CUDA中聲明動態大小的共享內存分配,如下所示

__global__ void kernel()
{
    extern __shared__ double *mat1;
}

然后像這樣啟動你的內核

kernel<<<grid,block,XSIZE*YSIZE*sizeof(double)>>>();

CUDA編程指南中對此進行了更詳細的討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM