首页 > 代码库 > GPU && CUDA:主机和设备间数据传输测试

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_d31     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_h37     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

下载链接

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