Programming

    [CUDA] Constant Memory 와 이벤트

    [CUDA] Constant Memory 와 이벤트

    이번 포스팅에서는 constant memory를 활용하여 어플리케이션 성능을 향상시킬 수 있는 방법에 대해서 다룬다. 또, event라는 것을 활용하여 어플리케이션의 성능을 평가할 수 있는 방법을 다룬다. Constant Memory constant memory 라는 이름과 같이, 변하지 않는 값의 변수에 대한 정보를 저장하는 메모리이다. NVIDIA 하드웨어에서는 64kb의 constant 메모리를 제공한다. 앞에 __constant__ 키워드를 활용하여 선언할 수 있다. __constant__ SomeStruct s[S]; 이렇게 된다면 cudaMalloc 또는 cudaFree를 해줄 필요가 없다는 장점이 있다. Constance Memory를 사용했을 때의 performance constant 메모..

    [CUDA] CUDA로 threading &  shared memory

    [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

    [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] 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이 ..