首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >cuda统计和的过程中使用for循环导致输出结果全0?

cuda统计和的过程中使用for循环导致输出结果全0?

提问于 2023-01-27 14:26:58
回答 0关注 0查看 40

梦在千里外(1205541637) 2023/1/27 11:31:02

请教一个问题:

下面程序计数总是输出全0,有点不清楚问题在哪。请教大佬!

程序主要目的是读取共享内存,并将共享内存的数据使用for循环相加。

最后将结果写回共享内存。

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include "device_functions.h"
#include <omp.h>		//计时头文件
#include <fstream>		//写入文件的头文件
#include <random>
#include<array>
#include<iostream>
#define Num  10
using namespace std;
__global__   void test(int* a)
{
	int ID_Block = threadIdx.x;
	int temp = 0;
	if (ID_Block < 5)
	{
		for (int i=0; i < 2; i++)
		{
			temp += a[ID_Block + i << 5];
		}
		printf("%d:%d\n", ID_Block, temp);
		a[ID_Block] = temp;
		//a[ID_Block + 5] += a[ID_Block];
	}
	__syncthreads();
	if (ID_Block == 0)
	{
		temp = 0;
	__volatile	for (int i = 0; i < 5; i++)
		{
			temp += a[i];
		}
		a[0] = temp;
		printf("%d\n", a[0]);
	}
	return;
}
int main(int argc, char** argv)
{
	 int* D;
	int h_D[10];
	for (int i = 0; i < 10; i++)
	{
		h_D[i] = i;
	}
	//****************************************
	//静态内存数组变量的传递测试
	cudaMalloc((void**)&D, Num * sizeof(int));
	cudaMemcpy(D, h_D, Num * sizeof(int), cudaMemcpyHostToDevice);
	test << <1, 5 >> > (D);
	cudaMemcpy(h_D, D, Num * sizeof(int), cudaMemcpyDeviceToHost);
	for (int i = 0; i < 10; i++)
	{
		cout << i << ":\t" << h_D[i] << endl;
	}
	return 0;
}

如果有大佬,不胜感激!

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档