0
我有一些類我如何在CUDA的註冊中創建對象?
class A {
int bla;
float blabla;
};
有沒有辦法在線程的註冊表中創建對象A
?因爲,new
和malloc
正在分配空間全局內存(我不想這樣做)。
我有一些類我如何在CUDA的註冊中創建對象?
class A {
int bla;
float blabla;
};
有沒有辦法在線程的註冊表中創建對象A
?因爲,new
和malloc
正在分配空間全局內存(我不想這樣做)。
內核中的每一個當地變量是在GPU的寄存器文件分配。除非你已經使用過所有的寄存器。寄存器文件的使用是自動處理的,所以你不能做太多的工作,但改變你的代碼,並用編譯器標誌檢查使用情況:--ptxas-options=-v
。當寄存器文件滿時,如果啓用,則數據溢出到高速緩存L1。否則數據會進入緩存L2。
例內核是:
__global__ regKernel(int length)
{
A localA; // goes to register file
int threadId = threadIdx.x;// goes to register file
if (threadId < length)
{
localA.bla++;
localA.blabla = 0.4;
}
}
如果您在線程棧上創建一個那麼編譯器將在棧上分配空間,但成員可以總是在寄存器中。如果你是新的A,那麼它將在全局內存中的上下文堆中。 – 2013-02-28 21:00:18
「在線程堆棧上創建A」 - 好的,那麼代碼在內核方法中的外觀如何? – waskithebest 2013-02-28 21:11:39
在你的線程代碼中,執行:'A myA;'然後myA是一個直接或棧變量。見[這裏](http://stackoverflow.com/questions/3735839/c-stack-variables-and-heap-variables)。 – 2013-02-28 21:17:13