CUDA Bug<三>当__global__函数出现里面所有输出的数组都随机赋值了

问题具体描述:

eg.

cpp 复制代码
__global__ void Updata_HomJm(float* H,float *HJm,float* fr,float *gr,float* ur,float* urgrJm,float*wpd,float *w, float *wJm,int n)
{  

	int idx = blockIdx.x*blockDim.x + threadIdx.x;
	float t = 0.0;//H*zp
	int idx_Ai = idx*n;



	for (int j=0; j<n; j++)
	{
		t += H[idx_Ai + j] * fr[j];//0	
		if((j==idx)||(abs(wpd[idx])==2&&abs(wpd[j])==2))
		{
			HJm[idx_Ai + j]=H[idx_Ai + j];
		}
		else
		{
			HJm[idx_Ai + j]=0;
		}
	}
	gr[idx]=t;
	if (abs(wpd[idx])==2)
	{
		wJm[idx]=w[idx];
		urgrJm[idx]=-(ur[idx]+gr[idx]);
	}else
	{
		wJm[idx]=0.0;
		urgrJm[idx]=0.0;
	}


}

这里gr,wJm,urgrJm都是计算后需要输出的值,这三个数组同时乱码,

第一个想法即使:代码有误

采取排除的方式,先将if判断都注释掉,发现还是有错;

再将wJm和urgrJm有关的都注释,发现gr计算结果正常,那么大概率不是__global__函数错误,将错误锁定在这两个数组身上,猜测可能是gr,wJm,urgrJm这三个数组size不同,则检查主函数,发现是wJm忘开辟空间。

解决办法

在主函数加入

cpp 复制代码
	cudaMalloc((void**)&d_wJm, sizeof(float)*WS*1);
相关推荐
shehuiyuelaiyuehao18 分钟前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法
智购科技自动售货机厂家22 分钟前
2026自动售货机设备清洁效果自动验证:从图像比对到评分算法的工程实践~YH
人工智能·算法·计算机视觉
爱吃巧克力的程序媛37 分钟前
main.cpp注册 C++ 类到 QML 元对象系统
c++·qt
YYYing.43 分钟前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
姜穆澜1 小时前
机器学习实战指南:从算法原理到工程落地
人工智能·算法·机器学习
Q一件事2 小时前
RWEQ——保留与消去P的soil_loss联合推导
算法
键盘会跳舞2 小时前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
HugoStudio_SWAN2 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
那年窗外下的雪.2 小时前
AIDC 学习日志|第 20 天|多归属业务验收与哈希不均定位
学习·算法·哈希算法