天天看點

矩陣加法的CUDA實作

#include <stdio.h>

#include <stdlib.h>

#include <cutil_inline.h>

#define N 2

__global__ void MatAdd(float A[N][N],float B[N][N],float C[N][N])

{

 int i=blockIdx.x*blockDim.x+threadIdx.x;

 int j=blockIdx.y*blockDim.y+threadIdx.y;

 if(i<N&&j<N)

  C[i][j]=A[i][j]+B[i][j];

}

int main(void)

{

 char c;

 int i,j;

    float A[N][N]={{1,1},{2,2}},B[N][N]={{3,3},{4,4}},C[N][N];

 //Knernel調用執行矩陣加法

    dim3 dimBlock(16,16);

 dim3 dimGrid((N+dimBlock.x-1)/dimBlock.x,(N+dimBlock.y-1)/dimBlock.y);

 MatAdd<<<dimGrid,dimBlock>>>(A,B,C);

 for(i=0;i<N;i++)

 {

  for(j=0;j<N;j++)

   printf("%5.2f",C[i][j]);

  printf("\n");

 }

 scanf("%c",&c);

 return 0;

}