现在的位置: 首页 > 综合 > 正文

一维矩阵的加

2014年02月10日 ⁄ 综合 ⁄ 共 1206字 ⁄ 字号 评论关闭

转载连接:点击打开链接

//实现一个一维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; 
}

抱歉!评论已关闭.