Real-Time GPU Fluid Dynamics 번역 (3)
·
GPU Programming/CUDA fluidsGL
4.4 Thread Configuration First, we choose a warp-size multiple for the block horizontal size: 32 · 2 = 64. Then we have to choose a block vertical size. Because the typical maximum threads per block is 1024, we cannot choose 64 for the vertical dimensions, as we would have 64 · 64 = 4096 threads! For this reason we choose a 64x4 block size (256 threads per block). We divide the domain size in 64..
Real-Time GPU Fluid Dynamics 번역 (2)
·
GPU Programming/CUDA fluidsGL
4 CUDA Fluids Implementation The main changes needed to port a CPU implementation to a CUDA implementation are described in this section. First, we present alternatives to CPU interpolation and the CPU fftw library. Second, we explain how to access OpenGL vertex buffer from a kernel. After that, we need to allocate memory in the GPU device that the kernels will use for the simulation step comput..
Real-Time GPU Fluid Dynamics 번역 (1)
·
GPU Programming/CUDA fluidsGL
2. Introduction Here is explained how a CPU fluid simulation can have its performance increased by using CUDA, a GPU solution. Before presenting any implementation details we will review some of the CUDA keypoints. After that, the author explains how to deploy a thread layout for fluid parallel computing. Furthermore, the reader can find GPU optimized alternatives to CPU libraries. Finally, we w..
0. Introduction
·
GPU Programming/CUDA fluidsGL
본인은 지금 막혀있다. 기존의 프로젝트를 GPU 프로그래밍으로 바꾸려고하는데 Nvidia의 예제로 배우는 CUDA 어쩌구로는 지금의 막힌 상황을 타개할 수 가 없다. 왜냐면 본인의 귀여운 뇌로 이해하기엔 설명이 부족하기 때문이다. 그러던 중 마드리드 공과대학교에서 Nnvidia의 시뮬레이션 예제중 유체 시뮬레이션을 OpenGL을 활용하여 구현한 예제를 설명한 PDF를 웹 서핑중 발견했다. 이 가뭄의 단비와도 같은 페이퍼는 서문에 이렇게 적어놓았다. "NIVIDIA의 Fluid simulation은 코드를 구체적으로 설명하지 않기 때문에 해당 부분을 더욱 확장하여 공부하고 싶은 모든 사람에게 이 문서는 특히 유용할 것이다." 이 얼마나 아름다운 서문인가 정말 본인을 위해 작성했다고 봐도 무방할만큼 본인의 ..
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 이다. 책에 적혀진 공식적인 설정(?)은 이거고 본인이..