请教一个cuda动态并行,随机卡死的问题

GKatHere 2024-11-06 08:16:01
// 源代码如下, VS2022, cuda 12.6,

__global__ void SetBool(volatile int* b)
{
	if (ptrdiff_t(b) > 100)
		* b = 1;
	else
		__nanosleep(1);
}

__device__ volatile int fc = 0;
__global__ void fk()
{
	size_t pidx = threadIdx.x;
	if(0 == pidx) // cudaStreamTailLaunch 放在这,导致随机卡死(3000次就会产生卡死)
		SetBool << <1, 1, 0, cudaStreamTailLaunch >> > (&fc);
	switch (pidx)
	{
	case 0: // cudaStreamTailLaunch 放在这,没有发现随机卡死
		//SetBool << <1, 1, 0, cudaStreamTailLaunch >> > (&fc);
		return		SetBool<<<1,1>>>(0);
	case 1: return		SetBool << <1, 1 >> > ((volatile int*)1);
	case 2: return		SetBool << <1, 1 >> > ((volatile int*)2);
	case 3: return		SetBool << <1, 1 >> > ((volatile int*)3);
	case 4: return		SetBool << <1, 1 >> > ((volatile int*)3);
	case 5: return		SetBool << <1, 1 >> > ((volatile int*)3);
	case 6: return		SetBool << <1, 1 >> > ((volatile int*)3);
	case 7: return		SetBool << <1, 1 >> > ((volatile int*)3);
	default:
		break;
	}
}
__global__ void waitf()
{
	fc = 0;
	fk << <1, 10 >> > ();
	while (!fc)__nanosleep(1);
}



int main(int argc, char** argv)
{
for (size_t i =0; ; i++)
{
	auto t = clock();
	waitf << <1, 10 >> > ();
	cudaDeviceSynchronize(); // 当运行次数很多的时候,会随机卡死在这。
	auto e = clock();
	printf("%lld: %d, ", i, e - t);
}
}

 

...全文
75 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

589

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧