2013-02-28 78 views
0

我有一些類我如何在CUDA的註冊中創建對象?

class A { 
int bla; 
float blabla; 
}; 

有沒有辦法在線程的註冊表中創建對象A?因爲,newmalloc正在分配空間全局內存(我不想這樣做)。

+1

如果您在線程棧上創建一個那麼編譯器將在棧上分配空間,但成員可以總是在寄存器中。如果你是新的A,那麼它將在全局內存中的上下文堆中。 – 2013-02-28 21:00:18

+0

「在線程堆棧上創建A」 - 好的,那麼代碼在內核方法中的外觀如何? – waskithebest 2013-02-28 21:11:39

+1

在你的線程代碼中,執行:'A myA;'然後myA是一個直接或棧變量。見[這裏](http://stackoverflow.com/questions/3735839/c-stack-variables-and-heap-variables)。 – 2013-02-28 21:17:13

回答

1

內核中的每一個當地變量是在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; 
} 
}