zoukankan      html  css  js  c++  java
  • 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

    下载链接

  • 相关阅读:
    Python学习进程(1)Python简介
    OpenGL学习进程(10)第七课:四边形绘制与动画基础
    OpenGL学习进程(9)在3D空间的绘制实例
    GO语言结构体
    GO指针
    GO值类型与引用类型
    GO函数
    GO map
    GO切片
    GO数组
  • 原文地址:https://www.cnblogs.com/liangliangdetianxia/p/3979544.html
Copyright © 2011-2022 走看看