您的位置:首页 > 其它

CUDA学习--一维矩阵的加

2015-12-13 21:52 381 查看
//实现一个一维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; 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: