我试图了解模板是如何在这里使用的:
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 。如果它是一个常数,那么模板有什么用处?它针对特定类型是固定的。我对吗?谢谢