전체 글
[CUDA] CUDA로 threading & shared memory
Parallel Blocks 나누기 cuda에서는 parallel로 실행되는 이 block들을 thread로 나눌 수 있는 방법을 제시한다. 본 포스팅에서는 어떻게 thread로 block들을 나누어볼 수 있는지 splitting 방법에 대해서 다룬다. 이전 포스팅에서 다음과 같은 kernel call 에 대해서 첫번째 인자가 block의 수 라고 했었다. kernel 두번째 인자는 block 당 돌리고 싶은 thread의 수를 의미한다. 예를 들어 add (dev_a,dev_b,dev_c) 하게 되면 하나의 블록에 n개의 thread가 돌아가도록 설정한 것이다. MaxThreadsPerBlock 주로 block의 개수에는 한계가 있는데 일반적으로 한번의 실행에 65,535개 라고 한다. block에 실..
[CUDA] Parallel Programming in CUDA
Parallel Programming 그렇다면 이제 CUDA로 parallel 프로그래밍하는 방법을 알아보자! __global__ void add(int* a, int* b, int* c) { int tid = blockIdx.x; if (tid < N) { c[tid] = a[tid]+b[tid]; } #define N 10 int main(void){ int a[N], b[N], C[N]; int* dev_a, *dev_b, *dev_c; //allocate mem on gpu cudaMalloc((void**)&dev_a, N*sizeof(int)); cudaMalloc((void**)&dev_b, N*sizeof(int)); cudaMalloc((void**)&dev_c, N*sizeof(int)..
[CUDA] CUDA C 기초
기본 함수 CUDA는 C 기반이기 때문에 기본적으로 함수를 작성할떄 c언어 처럼 작성한다. #include "../sth.h " int main(void){ printf("hello world"); return 0; } 이렇게 기본함수, cpu에서만 실행하는 것을 host라고 칭하자. Kernel Call GPU(device)에서 실행하도록 하는 것을 kernel에서 실행한다고 부른다. device에서 실행할 수 있도록 kernel call 을 해보자 #include "../sth.h " __global__ void kernel(void){ } int main(void){ kernel (); printf("hello world"); return 0; } __global__ : 이러한 qualifier이 ..
[CUDA] GPU Programming을 하는 이유
왜 GPU programming 일까? multicore central processor의 보급량 증가! 듀얼코어를 시작으로 8- , 16- ...등 parallel computing이 꼭 필요해졌다. CPU(Central Processing Unit) 만으로는 불가능할까? CPU의 Clock cycle이 늘어나긴 했지만, 더 증가가 어렵다. 이는 heat와 power(transistor의 크기를 더 줄일 수 없다는 한계) 때문이다. 따라서, 다른 방법 즉 gpu를 찾게 된 것이다. Parallel Programming의 간단한 역사 1980,90년대 cpu가 발전하면서 그래픽 기술도 함께 발전했다. 마이크로소프트는 이를 위해서 새로운 2D display accelerator라는 것을 개발했다. hard..