库达上的原子添加不起作用..
Atomic Add on Cuda not working..
我的问题是使用 CUDA 找出 n 维球体中的整数点数。我不明白下面的代码有什么问题,但它一直给出 0 输出。CUDA 计算能力为 2.0,工具包版本为 3.10。感谢您的所有帮助。
__global__ void count_in(int pow_rad, int ndim,int *digit,int w,unsigned int *count,double radius)
{
long int i,j;
int rem,idx,sq,num;
int iy=blockDim.y * blockIdx.y + threadIdx.y;
int ix=blockDim.x * blockIdx.x + threadIdx.x;
int width=gridDim.x*blockDim.x;
int h=2*w+1;
i=iy*width+ix;
if(i>pow_rad) return;
sq=0;
idx=0;
num=i;
for(j=0;j<ndim;j++)
{digit[j]=0;}
while(num!=0)
{
rem=num%w;
num/=w;
digit[idx]=rem;
idx++;
}
for(j=0;j<ndim;j++)
{sq+=(digit[j]-h)*(digit[j]-h);}
if(sq<(radius*radius))
atomicInc(count,(unsigned int)1);
__syncthreads();
}
int main(int argc, char* argv[])
{
const long ntrials = 5;
int i;
for (int n = 0; n < ntrials; ++n) {
int *digit;
unsigned int *count;
std::cout<<n<<std::endl;
int pow_rad;
unsigned int num;
// Select radius and number of dimensions at random
const double r = drand48() * (RMAX - RMIN) + RMIN;
const int nd = lrand48() % (MAXDIM - 1) + 1;
cudaMalloc((void**) &digit,sizeof(int)*nd);
cudaMalloc((void**) &count,sizeof(unsigned int));
cudaMemset(count,0,sizeof(unsigned int));
int h=(int)floor(r);
int w=2*h+1;
std::cout << "###"<< r <<" "<< nd<< std::endl;
for(i=1;i<=nd;i++)
pow_rad*=w;
int width=(int)sqrt(pow_rad);
// Call your function
dim3 dimBlock(32,32);
dim3 dimGrid((width/32)+1,(width/32)+1);
count_in<<<dimGrid,dimBlock>>>(pow_rad, nd,digit,w,count,r);
cudaMemcpy(&num,count,sizeof(unsigned int),cudaMemcpyDeviceToHost);
std::cout << "-->"<<num << std::endl;
}
}
我没有看你所有的代码,但行
atomicInc(count,(unsigned int)1);
似乎显示了对原子公司函数的普遍误解。 第二个参数不是增量,而是模数;当全局变量达到该数量时,它将重置为零。 使用指定的值,每次语句执行变量时,变量count
都会重置为 0。
如果你把atomicInc改成atomicAdd,或者如果你把模量改成足够大的东西,以至于永远达不到它,它应该会更好地工作。
相关文章:
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 将小部件添加到布局后,QStylesheet 不起作用
- 双链接列表添加元素不起作用,不知何故它总是保持为空
- 我试图键入一个函数来在单链表的末尾添加一个节点,但不起作用
- 将子类添加到基类向量C++不起作用
- 将类添加到矢量不起作用
- 添加到私人变量不起作用
- 在 cmake 中添加子目录不起作用
- 添加项目后C find()函数不起作用
- 使用AddFontresourceex添加的字体在GDI 中不起作用
- 将布局从一个类添加到另一类不起作用
- 套接字不起作用,当添加 opencv libriary
- 当通过引用传递时,通过传递链表在第n个位置添加元素不起作用
- 添加 QSound 后应用程序部署不起作用
- Android.mk 添加LOCAL_CPPFLAGS不起作用
- 向注册表添加新项不起作用
- 将多个整数添加到一个向量索引? 'Cout'不起作用
- C++添加不起作用
- 添加 -lrt 时跟踪编译器错误"undefined reference"不起作用
- 库达上的原子添加不起作用..