我是靠谱客的博主 小巧八宝粥,最近开发中收集的这篇文章主要介绍CUDA学习--一维矩阵的加,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

//实现一个一维1*16的小矩阵的加法。
//矩阵大小:1*16
//分配一个block,共有16个线程并发。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <cuda_runtime.h>
#include <cutil.h>

#define VEC_SIZE 16

//kernel function
__global__ void vecAdd(float* d_A,float* d_B,float* d_C)
{
    int index=threadIdx.x;
    d_C[index]=d_A[index]+d_B[index];

}

int main()
{
    //得到分配空间的大小
    size_t size=VEC_SIZE*sizeof(float);

    //为本地分配内存
    float* h_A=(float*)malloc(size);
    float* h_B=(float*)malloc(size);
    float* h_C=(float*)malloc(size);

    //初始化
    for (int i=0;i<VEC_SIZE;++i)  
   {
        h_A[i]=1.0;
        h_B[i]=2.0;  
    }

    //将本地内存的中的数据复制到设备中
    float* d_A;
    cudaMalloc((void**)&d_A,size);
    cudaMemcpy(d_A,h_A,size,cudaMemcpyHostToDevice);

    float* d_B;
    cudaMalloc((void**)&d_B,size);
    cudaMemcpy(d_B,h_B,size,cudaMemcpyHostToDevice);

    //分配存放结果的空间
    float* d_C;
    cudaMalloc((void**)&d_C,size);

    //定义16个线程
    dim3 dimblock(16);
    vecAdd<<<1,dimblock>>>(d_A,d_B,d_C);

    //讲计算结果复制回主存中
    cudaMemcpy(h_C,d_C,size,cudaMemcpyDeviceToHost);

    //输出计算结果
    for (int j=0;j<VEC_SIZE;++j)    
   {
        printf("%f/t",h_C[j]);
    }

    //释放主机和设备内存
    cudaFree(d_A);
    cudaFree(d_B);
    cudaFree(d_C);

    free(h_A);
    free(h_B);
    free(h_C);

    return 0;
}

最后

以上就是小巧八宝粥为你收集整理的CUDA学习--一维矩阵的加的全部内容,希望文章能够帮你解决CUDA学习--一维矩阵的加所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部