【发布时间】:2025-12-10 09:05:01
【问题描述】:
在 GPGPU 上,使用 cuda 我的问题是: 我有一个256个元素的向量,我想做一个程序,可以提取非零值的位置并将它们复制到另一个向量中。
我的代码不起作用:
dev_Hist : 是数据源,初始向量;
dev_Xn : 是 dev_Hist 上非零值位置的向量;
nN : 是 dev_Hist 上非零值的数量
1.内核调用:
gpu_Xn<<<1, nN>>>(dev_Hist, nN, dev_Xn) ;
2。设备功能
__global__ void gpu_Xn(int *pHist, int pnN, int* pXn)
{
int Tid ;
Tid = threadIdx.x ;
__shared__ T tmpXn[256] ;
tmpXn[Tid] = 0 ;
__syncthreads() ;
__shared__ int idx ;
if(Tid == 0)
idx = -1 ;
syncthreads() ;
if(pHist[Tid] !=0)
{
atomicAdd(&idx, 1) ;
tmpXn[idx] = Tid ;
}
__syncthreads() ;
if(Tid < pnN)
pXn[Tid] = tmpXn[Tid] ;
}
【问题讨论】: