티스토리 뷰
728x90
반응형
#include "device_launch_parameters.h"
#include <cuda_runtime.h>
#include <stdlib.h>
#include <stdio.h>
#define SIZE 1024
// __global__을 통해서 커널임을 표시한다. host에서 호출된다.
__global__ void VectorAdd(int *a, int *b, int *c, int n)
{
// 수많은 스레드가 동시에 처리한다.
// 따라서 threadIdx(스레드 인덱스)를 통해서 스레드들을 구별한다.
int i = threadIdx.x;
printf("threadIdx.x : %d, n : %d\n", i, n);
for (i = 0; i < n; i++)
{
c[i] = a[i] + b[i];
printf("%d = %d + %d\n", c[i], a[i], b[i]);
}
}
int main()
{
int *a, *b, *c;
int *d_a, *d_b, *d_c;
// 호스트의 메모리에 할당한다.
a = (int *)malloc(SIZE * sizeof(int));
b = (int *)malloc(SIZE * sizeof(int));
c = (int *)malloc(SIZE * sizeof(int));
// cudaMalloc(destination, number of byte)로 device의 메모리를 할당한다.
cudaMalloc(&d_a, SIZE * sizeof(int));
cudaMalloc(&d_b, SIZE * sizeof(int));
cudaMalloc(&d_c, SIZE * sizeof(int));
// 초기화
for (int i = 0; i < SIZE; ++i)
{
a[i] = i;
b[i] = i;
c[i] = 0;
}
// cudaMemcpy(destination, source, number of byte, cudaMemcpyHostToDevice)로 호스트에서 디바이스로 메모리를 카피한다.
cudaMemcpy(d_a, a, SIZE * sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(d_b, b, SIZE * sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(d_c, c, SIZE * sizeof(int), cudaMemcpyHostToDevice);
// 함수 호출을 위해서 새로운 신텍스 요소를 추가할 필요가 있다.
// 첫번째 parameter는 블럭의 수이다. 예제에서는 스레드 블럭이 하나이다.
// SIZE는 1024개의 스레드를 의미한다.
VectorAdd<<<1, SIZE>>>(d_a, d_b, d_c, SIZE);
//cudaMemcpy(source, destination, number of byte, cudaMemDeviceToHost)로 디바이스의 메모리(연산 결과 데이터)를 호스트에 카피한다.
cudaMemcpy(a, d_a, SIZE * sizeof(int), cudaMemcpyDeviceToHost);
cudaMemcpy(b, d_b, SIZE * sizeof(int), cudaMemcpyDeviceToHost);
cudaMemcpy(c, d_c, SIZE * sizeof(int), cudaMemcpyDeviceToHost);
for (int i = 0; i < SIZE; ++i)
printf("c[%d] = %d\n", i, c[i]);
// 호스트의 메모리 할당 해제
free(a);
free(b);
free(c);
// cudaFree(d_a)를 통해 디바이스의 메모리를 할당 해제
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
return 0;
}
반응형
'프로그래밍' 카테고리의 다른 글
Java Spring Legacy Project STS 설정 (0) | 2017.04.11 |
---|---|
React.js 배우는 중 (0) | 2017.04.10 |
MSBuild Registry 읽기 (0) | 2017.03.28 |
MSBuild Build와 Clean를 커스터마이즈 하기 (0) | 2017.03.28 |
MSBuild Property Functions 호출하기 (0) | 2017.03.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday