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);
相关推荐
午彦琳3 分钟前
leetcode hot 100_49,128
算法·leetcode·职场和发展
..过云雨6 分钟前
【负载均衡oj项目】01. 项目概述及准备工作
linux·c++·html·json·负载均衡
郝学胜-神的一滴9 分钟前
深度解析:Python元类手撸ORM框架,解锁底层编程魔法
数据结构·数据库·python·算法·职场和发展
yuuki23323310 分钟前
【C++ 智能指针全解析】从内存泄漏痛点到 RAII + unique/shared/weak_ptr 手撕实现
开发语言·c++
big_rabbit050215 分钟前
[算法][力扣219]存在重复元素2
数据结构·算法·leetcode
闻缺陷则喜何志丹22 分钟前
【构造 前缀和】P8902 [USACO22DEC] Range Reconstruction S|普及+
c++·算法·前缀和·洛谷·构造
摸鱼仙人~25 分钟前
动态规划求解 20 个通用模板
算法·动态规划
记忆多29 分钟前
c++内联函数
算法
仟濹42 分钟前
【算法打卡day20(2026-03-12 周四)算法/技巧:哈希表,双指针,字符串交换处理】5个题
数据结构·算法·散列表
老四啊laosi43 分钟前
[C++进阶] 16. 继承
c++·继承