본문 바로가기

전체 글68

[Parallel Computing] (23) Shared Memory CUDA Memory Hierarchy는 아래와 같은 Memory type으로 구분된다.Global Memory, Texture Memory, Constant Memory, Shared Memory, Local Memory, Registers로 구성된다.  Global MemoryGlobal Memory는 모든 Thread Block에서 공유하는 메모리이며, Read/Write 수행가능하며, Caching이 된다. 큰 메모리 공간을 제공하는 대신에 접근 속도는 느리다.변수 선언은 '__device__'로 수행한다. Lifetime은 application 수행이 완료될 때까지 이다. Texture MemoryTexture Memory는 모든 Thread Block에서 접근 가능한 메모리이며, 오직 Read.. 2024. 5. 28.
[Parallel Computing] (22) Optimization for GPUs GPU에서 스케쥴링을 수행하는 기본 단위가 존재하고, 해당 기본 단위 안에서 모든 스레드들은 SIMD(Single Instruction Multiple Data) 형태로 처리되며, 모든 스레드가 실행되고 다음 Instruction이 실행되는 Lock-step으로 수행된다. NVIDIA에서는 이 기본 단위를 Warp이라 부르며, 하나의 Warp 안에는 32개의 Hardware threads(for OpenCL -> work-times)들이 존재한다. AMD에서는 Wavefront라 부르며, 하나의 Wavefront 안에는 64개의 Hardware threads들이 존재한다.  NVIDIA Fermi Architecture에서는 여러 개의 SM(Steam multiprocessor)가 존재한다. 1. 각 S.. 2024. 5. 28.
[Parallel Computing] (21) CUDA Stream CUDA에서 말하는 Stream은 GPU 상에서 Issue 순서로 수행되는 동작들의 Sequence를 말한다. CUDA에는 여러 개의 Stream이 존재할 수 있으며, 서로 다른 Stream들은 동시에 수행할 수 있다. 일반적으로 여러 Stream을 사용하지 않는 다면, Default Stream(a.k.a stream 0)에서 수행된다. 하나의 Stream 내에서의 동작은 대부분 Host와 GPU에서 synchronous 하게 동작하지만, 'cudaMemcpy*Async'/cudaMemset*Async'와 같이 Asynchronous 동작을 의도하는 경우에는 synchronous 하게 동작하지 않는다. 아래의 동작들은 동시에 수행될 수 있는 것들이다. 1. CUDA Kernel2. cudaMemcpyA.. 2024. 5. 27.
[Parallel Computing] (20) CUDA CUDA는 아래의 정의와 같이 GPU를 General Purpose으로 사용할 수 있도록 하는 기술이다.  CUDA("Compute Unified Device Architecture", 쿠다)는 그래픽 처리 장치(GPU)에서 수행하는 (병렬 처리) 알고리즘을 C 프로그래밍 언어를 비롯한 산업 표준 언어를 사용하여 작성할 수 있도록 하는 GPGPU 기술이다. CUDA는 엔비디아가 개발해오고 있으며 이 아키텍처를 사용하려면 엔비디아 GPU와 특별한 스트림 처리 드라이버가 필요하다. [1] CUDA는 앞서 OpenCL과 같이 Host(CPU)와 Device(GPU)가 같이 연산을 수행하는 Heterogeneous Computing 환경에서 수행된다. OpenCL과 유사하게 Host program은 Device.. 2024. 5. 26.