GPU 프로그래밍 - CUDA 기초 문법
CUDA Programming 문법 1. 개요 NVIDIA GPU를 이용하여 프로그래밍을 하려면 기본적으로 CUDA 프로그래밍에 대해서 알아야한다. 프로그래밍을 하기 위해서는 프로세서 구조를 어느정도 알아야하는데, 이전까지 포스팅은 GPU의 구조에 대한 설명이었다. 이번 포스팅은 CUDA 프로그래밍에 대한 기본적인 내용을 알아보겠다. 2. 주요 ...
CUDA Programming 문법 1. 개요 NVIDIA GPU를 이용하여 프로그래밍을 하려면 기본적으로 CUDA 프로그래밍에 대해서 알아야한다. 프로그래밍을 하기 위해서는 프로세서 구조를 어느정도 알아야하는데, 이전까지 포스팅은 GPU의 구조에 대한 설명이었다. 이번 포스팅은 CUDA 프로그래밍에 대한 기본적인 내용을 알아보겠다. 2. 주요 ...
Cache 성능 1. 개요 기본적으로 Memory에 대한 성능을 이야기 할때 AMAT(Average Memory Access Time)를 가지고 말한다. 이 AMAT는 아래와 같이 산출한다. [AMAT = Hit Time + Miss Rate + Miss Penalty] Hit Time : Cache에 data가 있고 이 데이터를 갖고 오기까...
Cache 1. 개요 캐시(Cache)란 CPU 연산에 비해 상대적으로 느린 메모리 접근 속도를 커버하기 위해 만든 임시 저장장소이다. 기본적으로 지역성에 근거하여 빨라질 것이라는 기대아래 설계된 것으로, 실제로 Cache 덕분에 성능은 급격하게 올라갔다. ※ 지역성이란? 기본적으로 공간 지역성(Spatial Locality), 시간 지역성(Tem...
Apache Kafka 1. 개요 Apache Kafka는 이벤트 스트리밍을 처리하는 플랫폼이다. 이벤트 스트리밍을 처리하기 위해 분산될수 있고, 저장하는 곳으로도 사용이 가능하다. 원래는 Linked-in에서 만들었고 그 회사내에서 사용하려고 했지만 오픈소스화 되면서 많은 곳에서 사용중에 있다. 2. 용도 1) 메시징 카프카는 메시지 브로커로 사...
Vector DB 1. 개요 원래는 No-SQL에 포함할까 했지만 분류에 대해 의견이 분분하여 그냥 별도의 항목으로 분리했다. 현재 LLM에 대한 관심이 뜨거운 가운데 이 Vector DB도 굉장히 유명해졌는데 LLM에서 취급하는 데이터가 바로 이 Vector Data이고, 이를 이용하여 학습되지 않은 문제에 대해서도 어느정도 답변을 내놓을 수 있는...
CUDA Reduce 예제 분석 이번 시간에는 수업중에 나온 Reduce 함수에 대한 예제를 분석해보겠다. 보다보면 알겠지만 번호가 큰 함수일 수록 효율적이고 빠른 함수이다. 1. reduce0 예제 분석 // device 함수 __global__ void reduce0(float* x, int m) { int tid = blockDim.x...
TLP(Thread level parallelism) 1. 개요 이전의 Pipeline에 대한 부분은 ILP(Instruction Level Parallelism)에 대한 내용이었다. ILP의 주요 내용은 Super Scalar 구조를 통해 CPI를 줄이고 Instruction에 대해 병렬 처리를 하는 것이었다. 하지만 이 Instruction ...
Branch prediction 1. 개요 분기문은 비용이 큰 명령중 하나다. 5-stage pipeline에서 분기문이 발생하면 다음 명령어를 어떤 것을 실행해야할지 알수가 없고, 예측해서 명령어를 갖고 온다고 한들 해당 예측이 틀려버리면 파이프라인 전체를 비워버려야하기 때문에 다수의 사이클을 허비하게 된다. 때문에 현대의 CPU는 분기 예측을 ...
Pipelining 종류 이전 포스팅에서는 5 Stage 기준으로 파이프라인이 어떻게 되는지 성능은 어떻게 되는지 알아보았다. 이번에는 총 3개 정도의 아키텍처를 살펴보고 파이프라인이 어떻게 되는지 성능은 어떻게 되는지 알아보자. 1. Deeper Pipeline 좀 더 깊은 파이프라인 단계를 가진 아키텍쳐이다. 이전에 5 stage로 파이프라인을...
RAID 1. 개요 RAID는 한 마디로 다수의 SSD/HDD를 사용하기 위한 방법이다. 그냥 한 개의 스토리지 디바이스만 쓰면 되는거 아닌가 하는 의문이 들 수 있다. 2025년 1월 기준 현존하는 최대 용량이 HDD는 32TB[1] 인데 이거면 충분하지라고 생각할 수 있지만 매일 기가(GB) 단위는 우습게 넘기고 테라(TB) 혹은 페타(PB...