cuda问题集

部署运行你感兴趣的模型镜像

A1:我有N张图片,每张图片需要进行K次处理。我希望调用N个线程,每个线程处理一张图片,对每一张图片,我又希望能够调用K个线程,每个线程处理一次我该怎么做哦,求思路。

Q1:N张图片对应N个block,每个block对应k个线程。

__global__ kernelPicAdd ( uchar *pic1, uchar *pic2 )
{
  // get index
  i = ..;
  j = ..;
  k = ..;
  pic [ index(i,j,k) ] += pic[ index(i,j,k) ];
}

__host__ void MergePics ( uchar *ptr1, uchar *ptr2 )
{
 ...
 kernelPicAdd <<< gridDim, blockDim >>> (ptr1,ptr2);
...
}

CalErrorKernel3<<<samplecount*initialcount,K>>>(d_img,d_tempdetaS,d_loc,d_detaSb,d_dis);//K<=512

__global__ void CalErrorKernel3(int *img,float*tempdetaS,int*loc,float*detaSb,float*dis)
{
	__shared__ float diffS[marknum*K];
	diffS[threadIdx.x]=0;
	__syncthreads();
	
	int imgidx=blockIdx.x;
	int weakridx=threadIdx.x;
	float diffS2[marknum];
	printf("cal%d\n",imgidx);
	/*if(imgidx<samplecount*initialcount)
	{*/	
		//cal diffS
		int fervalue = 0;	
		for (int i = 0; i <F*2; i+=2)
		{			
			fervalue = fervalue * 2 + (img[imgidx*marknum+loc[weakridx*F*2+i]] <img[imgidx*marknum+loc[weakridx*F*2+i+1]]? 1 : 0);		
		}
		
		for (int i = 0; i < marknum; i++)
		{	
			diffS[weakridx*marknum+i]=detaSb[weakridx*32*marknum+fervalue*marknum+i];				
		}	
		__syncthreads();

printf("cal diffS end%d\n",imgidx);

		for(int j=0;j<marknum;j++)
		{
			diffS2[j]=0;
			for(int jj=0;jj<K;jj++)
			{
				diffS2[j]+=diffS[jj*marknum+j];
			}
		}
		 double temp = 0;		 
		 for (int j = 0; j < marknum; j++)
		{
			temp+=pow(tempdetaS[imgidx*marknum+j]-diffS[j],2);						
		}			
		temp = sqrt(temp)/(samplecount*initialcount);
		dis[imgidx]=temp;
		printf("calend%d\n",imgidx);
	//}	
}

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值