CUDA数据结构体在GPU和CPU之间的传输

3 篇文章 0 订阅

参照《cuda c编程权威指南》上写出的,在CPU和GPU互相传输结构体。


#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>
#include<stdlib.h>


#define maxnumber 100
typedef struct node {
	int x[maxnumber];
	int y[maxnumber];
	int test[maxnumber][maxnumber];
} Node;
__global__ void gpuAddwith(Node* a,Node*c) {
	int tid = threadIdx.x;
	c->x[tid] = a->x[tid] + a->y[tid];
	c->y[tid] = tid;
	c->test[tid][1] = 0;
	c->test[tid][2] = 0;
}

void Print(Node* a) {
	for (int i = 0; i < maxnumber; i++) {
		printf("a[%d]x=%d y=%d  test[1] is:%d    test[2]is:%d\n", i, a->x[i], a->y[i],a->test[i][1], a->test[i][2]);

	}
}
int main(){

	Node* h_a;
	h_a = (Node*)malloc(sizeof(Node)*maxnumber);
	for (int i = 0; i < maxnumber; i++) {
		h_a->x[i] = i;
		h_a->y[i] = maxnumber - i;
		for (int j = 0; j < maxnumber; j++) {
			h_a->test[i][j] = i * maxnumber + j;
		}
	}

	Print(h_a);
	Node* d_a,*d_c;
	cudaMalloc((Node**)&d_a, sizeof(Node) * maxnumber);
	cudaMalloc((Node**)&d_c, sizeof(Node) * maxnumber);
	cudaMemcpy(d_a, h_a, sizeof(Node) * maxnumber, cudaMemcpyHostToDevice);
	cudaMemcpy(d_c, h_a, sizeof(Node) * maxnumber, cudaMemcpyHostToDevice);
	gpuAddwith << <1,1000 >> > (d_a,d_c);

	cudaMemcpy(h_a,d_c , sizeof(Node) * maxnumber, cudaMemcpyDeviceToHost);

	Print(h_a);
	cudaFree(d_a);
	cudaFree(d_c);
	free(h_a);
	return 0;
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值