4. CUDA 스레드 블록 아키텍처 (1)
·
GPU Programming/CUDA basic
CUDA에서 스레드는 계층 구조로 되어있는데 그리드-블록-스레드 구조로 이루어져있다. 스레드가 모여 블록을 이루고 블록이 모여 그리드를 이루고 이를 그리드 블록 모델이라고 한다. 스레드를 생성하고 어떻게 병렬처리를 하는지에 대해 알기 위해서는 우선 GPU 아키텍처에 대해 알 필요가 있다. GPU에서는 여러개의 SP가 모여 SM을 이루고 SM들이 모여 TPC를 이룬다. TPC는 GPU 아키텍처마다 쓰는 경우도 있고 안쓰는 경우도 있기 때문에 이는 생략하고 다수의 SP가 SM을 구성하는 것만 일단 기억하도록 하자. CUDA 스레드 모델에서 SP는 4개의 스레드를 동시에 실행할 수 있고 하나의 블록은 하나의 SM과 대응하여 동작하게 된다. 동일한 커널 함수를 512개의 스레드를 생성하여 위 그림의 왼쪽 G80..
3. CUDA 예제 - 초급
·
GPU Programming/CUDA basic
지금까지 CUDA 에서 데이터 처리하는 방법에 대해 알아보았다. 이번 시간에는 간단한 CUDA 예제를 통해 자세하게 알아보도록 하자. 앞서 GPU에서 데이터 병렬처리를 다음과 같은 순서로 진행한다고 하였다. CUDA에서 데이터 병렬 처리 1. 입력과 출력에 사용할 데이터를 PC 메모리에 할당 2. 입력과 출력에 사용할 데이터를 그래픽 메모리에 할당 3. 처리하고자 하는 값을 PC 메모리에 입력 4. PC 메모리에 있는 입력 데이터를 그래픽 메모리로 복사 5. 데이터를 분할하여 GPU로 가져옴 6. 수천개 이상의 스레드를 생성하여 커널 함수로 병렬처리 7. 처리된 결과를 병합 8. PC 메모리에 결과를 전송 9. 그래픽 메모리를 해제 10. PC 메모리를 해제 1. 입력과 출력에 사용할 데이터를 PC 메모..
2. CUDA에서 데이터 처리 (3)
·
GPU Programming/CUDA basic
CUDA에서 데이터처리 (2)에서는 GPU에서 동작하는 커널 함수를 생성하고 호출하는 방법을 알아보았다. 이번 시간에는 병렬 프로그래밍의 꽃인 스레드의 개념에 대해 설명하겠다. CUDA에서 데이터 병렬 처리 1. 입력과 출력에 사용할 데이터를 PC 메모리에 할당 2. 입력과 출력에 사용할 데이터를 그래픽 메모리에 할당 3. 처리하고자 하는 값을 PC 메모리에 입력 4. PC 메모리에 있는 입력 데이터를 그래픽 메모리로 복사 5. 데이터를 분할하여 GPU로 가져옴 6. 수천개 이상의 스레드를 생성하여 커널 함수로 병렬처리 7. 처리된 결과를 병합 8. PC 메모리에 결과를 전송 9. 그래픽 메모리를 해제 10. PC 메모리를 해제 이전시간에 CUDA에서의 데이터 병렬처리 구조에 대해서 알아보았는데 여기서 ..
2. CUDA에서 데이터 처리 (2)
·
GPU Programming/CUDA basic
CUDA에서 데이터처리 (1)에서는 입력과 출력에 사용될 데이터를 그래픽 메모리에 할당하고 입력하는 방법을 소개했다. 이번 글에서는 데이터의 병렬처리를 위해 스레드를 생성하는 커널 함수에 대해서 설명하겠다. CUDA에서 데이터 병렬 처리 1. 입력과 출력에 사용할 데이터를 PC 메모리에 할당 2. 입력과 출력에 사용할 데이터를 그래픽 메모리에 할당 3. 처리하고자 하는 값을 PC 메모리에 입력 4. PC 메모리에 있는 입력 데이터를 그래픽 메모리로 복사 5. 데이터를 분할하여 GPU로 가져옴 6. 수천개 이상의 스레드를 생성하여 커널 함수로 병렬처리 7. 처리된 결과를 병합 8. PC 메모리에 결과를 전송 9. 그래픽 메모리를 해제 10. PC 메모리를 해제 CUDA에서는 위와 같은 과정으로 데이터를 병..
2. CUDA에서 데이터 처리 (1)
·
GPU Programming/CUDA basic
CUDA에서 데이터 처리 1. 그래픽 카드에 메모리 공간을 할당 2. PC의 입력 데이터를 그래픽 카드의 메모리로 복사 3. 강력한 GPU 성능을 이용하여 병렬처리 4. 처리된 결과를 그래픽 카드의 메모리에서 PC의 메모리로 복사 그래픽 카드 메모리 사용하기 1. 그래픽 카드 메모리의 할당 cudaMalloc(void** devPtr, size_t count); 해당 함수는 그래픽 카드의 DRAM에 메모리공간을 할당한다. 첫번째 파라미터는 할당할 메모리를 가리키는 포인터이고 두번 째 파라미터는 할당할 메모리의 크기를 입력한다. 2. 그래픽 카드 메모리의 해제 cudaFree(void* devPtr); cudaFree 함수를 통해 그래픽 카드의 DRAM에 할당된 메모리를 해제할 수 있다. 3. PC에서 그..
1. CUDA?
·
GPU Programming/CUDA basic
1. CUDA란 컴퓨터 관련 과에서 어느정도 방구좀 뀐다고 하는 학부생이라도 CUDA에 대해 이름만 들어봤거나 모르는 경우가 많다. 그도 그럴것이 학부 수준에서 병렬 프로그래밍이라는 수업을 가르치는 학교는 없거나 희귀한 케이스일 것이다. 필자 또한 머신러닝에서 학습 속도를 향상시키기 위해 이것저것 알아보다가 GPU를 사용하면 빨라진다고 해서 그때 CUDA를 처음 알게되고 설치까지 하였다. CUDA란 NVIDIA에서 그래픽 카드를 이용한 GPGPU(General Purpose Graphics Processing Unit)의 통합 개발 환경 제공을 위해 2007년 2월 발표된 Compute Unified Device Architecture 통칭 CUDA 이다. 책에 적혀진 공식적인 설정(?)은 이거고 본인이..
0. Introduction
·
GPU Programming/CUDA basic
GPU 프로그래밍을 공부하고 배운 내용을 정리하기 위해 본 시리즈를 작성한다. 앞으로 작성할 게시글은 위 두 책을 바탕으로 작성할 계획이며 최종 목표는 기존에 제작한 Curly hair simulation을 CUDA를 사용한 GPU 병렬 프로그래밍으로 변환하는 것이다. 본인의 이해한 내용을 바탕으로 작성하나 본인의 이해력이 ㅎㅌㅊ이므로 이 글을 읽는 당신은 매우 쉽게 이해할 수 있을 것이다.