一个用GPU写的数组加法

代码说明:

输入运行代码后需要输入数组长度,代码会自动生成两个数组,然后求出数组对应相加的值存到另外一个数组中.

运行结果:

 

#include <cuda_runtime.h>
#include <iostream>

__global__ void add(int *d_a,int *d_b,int *d_c,int n)
{
	int idx = threadIdx.x;
	d_c[idx] = d_a[idx] + d_b[idx];
}
int main()
{
	int n = 0;
	int blag = 1;//标志位
	do{
		std::cout << "请输入数组的长度:" << std::endl;
		std::cin >> n;
		if(n <= 0)
		{
			std::cout << "你输入的数组长度为为正数,请重新输入:" << std::endl;
		}else
		{
			blag = 0;
		}
	}while(blag);

	/******申请主机内存******/
	int * h_a = (int*)malloc(sizeof(int) * n);
	int * h_b = (int*)malloc(sizeof(int) * n);
	int * h_c = (int*)malloc(sizeof(int) * n);
	/******主机内存赋值********/
	for(int i = 0; i < n; ++i)
	{
		h_a[i] = i + 1;
		h_b[i] = i + 3;
	}
	/******申请设备内存**********/
	int *d_a,*d_b,*d_c;
	cudaMalloc((void**)&d_a,sizeof(int) * n);
	cudaMalloc((void**)&d_b,sizeof(int) * n);
	cudaMalloc((void**)&d_c,sizeof(int) * n);

	/******主机内存数据复制到设备内存********/
	cudaMemcpy(d_a,h_a,sizeof(int) * n,cudaMemcpyHostToDevice);
	cudaMemcpy(d_b,h_b,sizeof(int) * n,cudaMemcpyHostToDevice);

	/*****启动核函数********/
	add<<<1,n>>>(d_a,d_b,d_c,n);

	/*****设备内存数据复制到主机内存*********/
	cudaMemcpy(h_c,d_c,sizeof(int) * n,cudaMemcpyDeviceToHost);

	for(int i = 0; i < n; ++i)
	{
		std::cout << "h_c[" << i << "] = " << h_c[i] << "  ";
	}
	std::cout << std::endl;
	/*******释放设备内存*****/
	cudaFree(d_a);
	cudaFree(d_b);
	cudaFree(d_c);

	/*****释放主机内存*****/
	free(h_a);
	free(h_b);
	free(h_c);

	std::cout << "运行结束!" << std::endl;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值