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);
相关推荐
吃着火锅x唱着歌19 分钟前
LeetCode 1446.连续字符
算法·leetcode·职场和发展
眠りたいです20 分钟前
基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作
c++·qt·ui·微服务·云原生·架构·媒体
烦躁的大鼻嘎23 分钟前
【Linux】深入Linux多线程架构与高性能编程
linux·运维·服务器·开发语言·c++·ubuntu
野生的编程萌新26 分钟前
【C++深学日志】C++编程利器:缺省参数、函数重载、引用详解
c语言·开发语言·c++
愚润求学26 分钟前
【贪心算法】day10
c++·算法·leetcode·贪心算法
吴秋霖35 分钟前
主流反爬虫、反作弊防护与风控对抗手段
爬虫·算法·反爬虫技术
java1234_小锋1 小时前
Scikit-learn Python机器学习 - 分类算法 - K-近邻(KNN)算法
python·算法·机器学习
智者知已应修善业1 小时前
【矩阵找最大小所在位置】2022-11-13
c语言·c++·经验分享·笔记·算法·矩阵
shan&cen1 小时前
Day04 前缀和&差分 1109. 航班预订统计 、304. 二维区域和检索 - 矩阵不可变
java·数据结构·算法
手握风云-1 小时前
回溯剪枝的 “减法艺术”:化解超时危机的 “救命稻草”(二)
算法·机器学习·剪枝