이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다. 이전 글) [3] PCIe - Transaction Layer (Quality of Service & Flow Control) returnclass.tistory.com Transaction Ordering transaction ordering의 deadlock 상태를 피해야 할 필요성을 고려하여 만들어졌으며, traffic flow에서 transaction을 ordering 하는 세 가지 일반적인 모델이 있습니다. Ordering Type1. Strong Ordering PCIe는 동일한 traffic class(TC) 할당을 받은 transaction의 s..
이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다. 이전 글) [2] PCIe - Transaction Layer (TLPs) returnclass.tistory.comQuality of Service QoS는 네트워크에서 데이터 전송의 질을 관리하고 보장하기 위한 기술과 정책의 집합을 의미합니다. QoS는 데이터 트래픽을 우선순위에 따라 처리하여, 네트워크의 성능을 최적화하고, 특정 응용 프로그램이나 서비스에 필요한 대역폭과 지연 시간을 보장하는 데 중요합니다. PCIe에서 역시 QoS를 지원하는데, traffic class, virtual channel, port arbitration, vc arbitrat..
이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다. 이전 글) [1] PCIe - Introduction 2 returnclass.tistory.comTransaction Layer 소개 PCIe의 transaction layer는 CPU 혹은 device core로부터의 memory read/write, I/O configuration, message 요청을 받아 처리합니다. 이 계층에서는 요청의 성격에 맞게 Transaction Layer Packets(TLPs)를 형성하고, 이를 통해 목적지 주소와 라우팅 정보를 포함시켜 패킷을 구성합니다. 또한 데이터의 무결성을 보장하기 위해 선택적으로 CRC를 추가하..
이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다. 이전 글) [0] PCIe - Introduction 1이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다. PCIe 란? PCIe의 "PCI"는 Peripheral Component Interconnect의returnclass.tistory.com Configuration Address Space PCIe에서는 device의 configuration을 관리하기 위해 "Configuration Space"라는 특정 메모리 영역에 접근해야 합니다. 이 공간은 장치의 기능..
이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다. PCIe 란? PCIe의 "PCI"는 Peripheral Component Interconnect의 약자로써 말 그대로, " Peripheral Component " 주변 장치를 CPU 및 메모리와 연결하는 데 사용되는 표준 인터페이스입니다. 여기서 말하는 주변 장치에는 GPU, NIC, SSD와 같이 PCIe 포트에 장착되는 요소들입니다. 기존 PCI와 PCI-X를 걸쳐 현재 우리가 아는 PCIe로 넘어왔으며, 2024년 현재 PCIe gen 7까지 spec이 지정되었으며, 상용 장치는 현재 PCIe gen 5까지 출시된 상태입니다.PCIe Link PC..
CXL(Compute Express Link)는 현재 학계와 산업계에서 큰 주목을 받고 있습니다. 이번 글에서는 CXL에 대한 자세한 기술 설명보다는 현재 데이터 센터에서 발생하는 문제들과 CXL이 이러한 문제들을 어떻게 해결할 수 있는 지에 대해 다루고자 합니다. 왜 CXL이 필요할까? 오늘날 data center의 성능을 저해하고, TCO를 증가시키는 중요한 memory 문제들에 직면해 있습니다. Meta에 따르면 전체 TCO중 메모리가 차지하는 비중이 시간이 갈수록 증가하고 있으며 그 수치는 거의 절반에 가깝다고 밝혔습니다. 이러한 문제들은 주로 세 가지 주요 이슈에서 비롯됩니다. 1. DRAM과 SSD간의 지연 시간 차이 첫 번째 문제는 local DRAM과 SSD간의 latency가 차이가 ..
CUDA kernel이 어떤 종류의 device에서도 올바르게 동작할 수 있지만, 수행 속에서도 각 device의 제약에따라 크게 다를 수 있다. 본 단원에서는 CUDA device의 주요 제약을 논하고 어떤 해결방법이 있는지 알아본다. thread 수행 kernel이 수행되면 두 수준 계층으로 구성되는 thread들의 집합인 grid가 생성된다. grid는 1,2차원 배열들의 block으로 구성되며, block은 1,2,3차원 배열들의 thread로 구성되었다. 한 block은 다른 block과 상관없이 어떤 순서로든 수행할 수 있어 CUDA의 투명확장성을 가능하게 한다. block내 thread들도 서로 상관없이 어떤 순서로도 수행될 수 있다.(순서에 상관이 있다면 barrier동기화) cuda de..
병렬성의 제한적인 메모리 CUDA의 register, shared memory가 global memory access횟수를 줄이는데 효과적이라 해도 memory용량을 초과하지 않아야한다. 각 CUDA device는 제한된 크기의 CUDA memory를 제공하기 때문에 응용 프로그램이 주어질때 SM들이 동시에 수행되는 thread개수도 줄어든다. 각 thread가 더 많은 memory를 요구할수록 각 SM에 상주할 수 있는 thread개수도 줄어든다. 예를들어 각 SM이 8k(8192)개의 register를 가지고있는데, 전체 프로세서에 대해서는 총 128k개의 register가 있다. 이는 매우 큰 수이지만 개별 thread로 보면 하나의 thread는 매우 제한적인 개수의 register만 사용할 수 ..
thread들에 의해 수행되는 data들은 일단 host memory로부터 device의 global memory로 옮겨진다. 그리고 나서 thread들은 자신의 blockIdx와 threadIdx를 사용해 data중 자신이 처리해야하는 부분을 접근한다. => 이런 간단한 cuda kernel로는 hardware의 잠재적인 최대성능을 아주 일부분만 얻을 수 있다. DRAM으로 구현된 global memory의 접근 지연시간이 매우 길고 접근 대역폭도 제한적이기 때문이다. gobal memory로의 접근이 지나치게 많아져 data flow가 정체되는 상황이 발생할 수 있다. 즉, SM들 중 일부는 놀고 있을 수 있다. cuda에서는 memory접근을 위한 추가적인 방법을 제공하고있다. (cuda kerne..
Cuda kernel 함수를 개시하면, kernel function을 수행하는 thread들이 grid를 형성한다. kernel 함수는 program 실행 중 kernel이 개시될때 생성되는 thread들이 수행할 C문장을 정의한 것이다. grid내부의 thread들의 구성과 자원할당, 스케줄링을 살펴본다. CUDA thread의 구성 - grid내부 thread들은 모두 동일한 kernel fuction을 실행하기에 서로 구별하고 사용할 data영역을 구별하기 위해 고유한 좌표값(blockIdx, threadIdx)를 사용한다. - blockIdx, threadIdx는 kernel 함수에서 사용할 수 있도록 이미 초기화된 변수로 주어진다. 즉, thread가 kernel 함수를 수행하는 도중 blcok..