[英]Template usage in CUDA code
我試圖了解如何在這里使用模板:
template <uint32_t N_ATOMIC=32>
struct ParallelCounter {
public:
uint32_t count[N_ATOMIC];
// spread the counts across the counter
__device__ __host__ void set(uint32_t x) {
for(int i=0; i < N_ATOMIC; i++) count[i]=x/N_ATOMIC;
}
};
#ifndef SPREAD
#define SPREAD 32
#endif
__device__ ParallelCounter<SPREAD> myCounter;
__global__ void initCounter() {
int tid = threadIdx.x + blockIdx.x * blockDim.x;
if(tid == 0)
myCounter.set(0);
}
到目前為止,我所看到的所有模板示例在上面第一行的<>中都有一些變量。 但是為什么我們這里有一個常量uint32_t N_ATOMIC = 32。 如果它是一個常數,模板將如何有用? 它針對特定類型是固定的。 我對嗎? 謝謝
這個問題與CUDA無關。
如果以這種方式定義模板,則意味着如果實例化該模板但未專門提供該參數,則它將默認為指示的值 。 您仍然可以使用其他值實例化模板,以獲得不同的行為。
只能將typename用作模板參數是不正確的。 int const也可以是模板參數。
這很有用,因為此參數可以在編譯時而不是運行時確定。 盡早確定有助於生成更優化的運行時代碼。
在您的特定情況下,必須在編譯時確定結構ParallelCounter
的大小。 C ++不會接受類型,直到運行時才能確定大小。
如果您的代碼中未使用模板,則可能必須針對不同的SPREAD
值編寫一系列struct ParallelCounter
和void initCounter()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.