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);
相关推荐
持梦远方21 小时前
【C++日志库】启程者团队开源:轻量级高性能VoyLog日志库完全指南
开发语言·c++·visual studio
mit6.8241 天前
博弈dp|凸包|math分类
算法
许长安1 天前
C++中指针和引用的区别
c++·经验分享·笔记
Shinom1ya_1 天前
算法 day 41
数据结构·算法·leetcode
hetao17338371 天前
2025-10-30 ZYZOJ Star(斯达)模拟赛 hetao1733837的record
c++·算法
无敌最俊朗@1 天前
C++ 值类别与移动语义详解(精简版)
java·数据结构·算法
lingran__1 天前
算法沉淀第十一天(序列异或)
c++·算法
一匹电信狗1 天前
【C++】红黑树详解(2w字详解)
服务器·c++·算法·leetcode·小程序·stl·visual studio
散峰而望1 天前
Dev-C++一些问题的处理
c语言·开发语言·数据库·c++·编辑器
Mr. zhihao1 天前
Java 反序列化中的 boolean vs Boolean 陷阱:一个真实的 Bug 修复案例
java·bug·lua