GPU && CUDA:主机和设备间数据传输测试

数据传输测试,先从主机传输到设备,再在设备内传输,再从设备传输到主机。

H-->D

D-->D

D-->H

 1 // moveArrays.cu
 2 //
 3 // demonstrates CUDA interface to data allocation on device (GPU)
 4 // and data movement between host (CPU) and device.
 5 
 6 
 7 #include <stdio.h>
 8 #include <assert.h>
 9 #include <cuda.h>
10 #include "cuda_runtime.h"
11 #include "device_launch_parameters.h"
12 int main(void)
13 {
14     float *a_h, *b_h;     //指向主机的指针
15     float *a_d, *b_d;     //指向设备的指针
16 
17     int N = 14;
18     int i;
19     //在主机端申请内存
20     a_h = (float *)malloc(sizeof(float)*N);
21     b_h = (float *)malloc(sizeof(float)*N);
22     //在设备端申请存储
23     cudaMalloc((void **)&a_d, sizeof(float)*N);
24     cudaMalloc((void **)&b_d, sizeof(float)*N);
25     //主机端数据初始化
26     for (i = 0; i < N; i++) {
27         a_h[i] = 10.f + i;
28         b_h[i] = 0.f;
29     }
30     //将数据从主机端传送到设备端:a_h-->a_d
31     cudaMemcpy(a_d, a_h, sizeof(float)*N, cudaMemcpyHostToDevice);
32     
33     //在设备内传输数据
34     cudaMemcpy(b_d, a_d, sizeof(float)*N, cudaMemcpyDeviceToDevice);
35     
36     //将数据从设备端传输到主机:b_d-->b_h
37     cudaMemcpy(b_h, b_d, sizeof(float)*N, cudaMemcpyDeviceToHost);
38     
39     //核对结果
40     for (i = 0; i < N; i++)
41         assert(a_h[i] == b_h[i]);
42     
43     //释放主机端存储
44     free(a_h);
45     free(b_h);
46     //释放设备端存储
47     cudaFree(a_d);
48     cudaFree(b_d);
49 }

 测试环境:

Win7+VS2013+CUDA6.5

下载链接

原文地址:https://www.cnblogs.com/liangliangdetianxia/p/3979544.html