zoukankan      html  css  js  c++  java
  • 向量相加源码分析

    向量相加源码分析,我将主要意思和该注意的地方已经添加到注释中仔细看注释。

     1 #include "cuda.h" 
     2 #include "cuda_runtime.h"
     3 #include "device_launch_parameters.h"
     4 #include <stdio.h>
     5 
     6 /*
     7 __global__表示该函数为内核函数
     8 blockIdx网格内的块索引
     9 threadIdx块内的线程索引
    10 blockDim块内的线程数
    11 块有x-、y-和z-整数组件,它们是三维的
    12 网格只有x-和y-组件,它们是二维的
    13 */
    14 __global__ void SaXPY(float a, float* X_d, float* Y_d, int n)
    15 {
    16     if (threadIdx.x < n)
    17         Y_d[threadIdx.x] = a * X_d[threadIdx.x] + Y_d[threadIdx.x];
    18 }
    19 
    20 int main()
    21 {
    22     int n = 64;
    23     float a = 2;
    24     float *X_h, *X_d, *Y_h, *Y_d;
    25     //host端申请空间
    26     X_h = (float*)malloc(n * sizeof(float));
    27     Y_h = (float*)malloc(n * sizeof(float));
    28     //主机端数组初始化为1,结果为Y_h[0]=Y_h[1]=……=Y_h[63]=1.0;X_h[0]=0.0,……X_h[63]=63.0
    29     for (int i = 0; i < n; i++)
    30     {
    31         X_h[i] = (float)i;
    32         Y_h[i] = 1.0;
    33     }
    34     //Device端申请存储空间
    35     cudaMalloc(&X_d, n * sizeof(float));
    36     cudaMalloc(&Y_d, n * sizeof(float));
    37     /*
    38     将Host端的数据拷贝到Device端
    39     X_d和Y_d是Device端地址,目的端
    40     X_h和Y_h是Host端地址,源端
    41     cudaMemcpyHostToDevice指定了拷贝方向
    42     */
    43     cudaMemcpy(X_d, X_h, n * sizeof(float), cudaMemcpyHostToDevice);
    44     cudaMemcpy(Y_d, Y_h, n * sizeof(float), cudaMemcpyHostToDevice);
    45     /*
    46     调用内核函数
    47     <<<…>>> 执行配置语法指定执行某一指定内核调用的线程数
    48     */
    49     SaXPY <<<1,64 >>>(a, X_d, Y_d, n);
    50     /*
    51     Y_h是目的端,Y_d是源端
    52     cudaMemcpyDeviceToHost指定了拷贝方向,从Device端到Host端
    53     */
    54     cudaMemcpy(Y_h, Y_d, n * sizeof(float), cudaMemcpyDeviceToHost);
    55     for (int i = 0; i < n; i++)
    56         printf("%2.1f X[%d] + Y[%d] = %6.2f
    ", a, i, i, Y_h[i]);
    57     cudaFree(X_d);
    58     cudaFree(Y_d);
    59     free(X_h);
    60     free(Y_h);
    61     system("Pause");
    62     return 0;
    63 }

    测试环境:

    Win7+VS2013+CUDA6.5

    下载链接

  • 相关阅读:
    计算机硬件发展史
    17.Java8新特性_传统时间格式化的线程安全问题
    13. Java8新特性_Stream API 练习
    12. Java8新特性_Stream_归约与收集
    11.Java8新特性_Stream_查找与匹配
    10.Java8新特性_Stream_排序
    9. Java8新特性_Stream_映射
    8. Java8新特性_Stream_筛选与切片
    CentOS 安装 Python3
    CentOS7安装图形桌面系统(GNOME / KDE / Cinnamon / MATE / Xfce)
  • 原文地址:https://www.cnblogs.com/liangliangdetianxia/p/3979526.html
Copyright © 2011-2022 走看看