1. 그래픽 카드와 GPU의 작동 방식 [0]

thumbnail 그래픽 카드는 GPU(그래픽 처리 장치)를 중심으로 수많은 코어와 고대역폭 메모리를 활용하여 방대한 데이터를 병렬로 처리하며, 이는 비디오 게임 렌더링, AI, 암호화폐 채굴 등 특정 작업에 최적화되어 있다.

1.1. GPU와 CPU의 차이점 [0]

  1. GPU의 압도적인 연산 능력 [0]
    1. 최신 비디오 게임(Cyberpunk 2077)을 실행하려면 그래픽 카드가 초당 약 36조 번의 연산을 수행해야 한다 [4].
    2. 이는 1996년 Mario 64가 요구하는 초당 1억 번의 연산이나 2011년 Minecraft가 요구하는 초당 1천억 번의 연산을 훨씬 뛰어넘는 수치이다 [0].
    3. 이러한 연산 능력은 전 세계 4,400개의 지구가 매초 한 번씩 계산하는 것과 맞먹는 수준이다 [8].
  2. GPU와 CPU의 구조적 차이 [15]
    1. 그래픽 카드 내부의 GPU는 10,000개 이상의 코어를 가지고 있다 [16].
    2. 반면, 마더보드에 장착된 CPU는 24개의 코어만 가지고 있다 [17].
    3. 단순히 코어 수만 보면 GPU가 더 강력해 보이지만, 실제로는 더 복잡하다 [18].
  3. GPU와 CPU의 역할 비유 [20]
    1. GPU는 거대한 화물선과 같아서, 느린 속도로 엄청난 양의 데이터를 처리하는 데 특화되어 있다 [20].
      1. GPU는 기본 산술 연산과 같은 단순한 명령만 실행할 수 있으며, 운영 체제를 실행하거나 입력 장치, 네트워크와 연결할 수 없다 [26].
      2. 방대한 양의 데이터를 대상으로 계산을 수행할 때 GPU가 더 빠르다 [29].
    2. CPU는 점보 제트기와 같아서, 적은 양의 데이터를 훨씬 빠른 속도로 처리하는 데 특화되어 있다 [20].
      1. CPU는 승객, 소포, 컨테이너 등 다양한 종류의 화물을 운반할 수 있고 수만 개의 공항에서 이착륙할 수 있는 것처럼, 다양한 프로그램과 명령을 실행할 수 있어 유연하다 [23].
      2. 적은 양의 데이터를 빠르게 평가해야 하거나, 운영 체제를 실행하고 다양한 애플리케이션 및 하드웨어에서 네트워크 연결을 지원해야 할 때 CPU가 더 빠르다 [30].

1.2. GPU의 물리적 구조와 핵심 구성 요소 [35]

  1. GPU 칩의 내부 구조 [35]
    1. 그래픽 카드 중앙에는 PCB(인쇄 회로 기판)가 있으며, 그 위에 GPU가 장착되어 있다 [35].
    2. GA102라는 이름의 GPU 칩은 283억 개의 트랜지스터로 구성되어 있다 [36].
    3. 칩의 대부분은 계층적으로 조직된 처리 코어로 이루어져 있다 [37].
      1. 칩은 7개의 GPC(그래픽 처리 클러스터)로 나뉜다 [38].
      2. 각 GPC는 12개의 SM(스트리밍 멀티프로세서)로 구성된다 [39].
      3. 각 SM 내부에는 4개의 워프, 1개의 레이 트레이싱 코어, 그리고 각 워프 내에는 32개의 CUDA 코어(쉐이딩 코어)와 1개의 텐서 코어가 있다 [40].
      4. 전체 GPU에는 10,752개의 CUDA 코어, 336개의 텐서 코어, 84개의 레이 트레이싱 코어가 있다 [41].
  2. 세 가지 주요 코어의 기능 [42]
    1. CUDA 코어: 덧셈, 곱셈 등 간단한 이진 계산기로, 비디오 게임 실행 시 가장 많이 사용된다 [43].
    2. 텐서 코어: 행렬 곱셈 및 덧셈 계산기로, 기하학적 변환, 신경망 및 AI 작업에 사용된다 [44].
    3. 레이 트레이싱 코어: 가장 크지만 수가 적으며, 레이 트레이싱 알고리즘 실행에 사용된다 [45].
  3. GPU 칩의 제조 과정과 제품 다양성 [46]
    1. RTX 3080, 3090, 3080 Ti, 3090 Ti 그래픽 카드는 모두 동일한 GA102 칩 설계를 사용한다 [46].
    2. 이는 제조 과정에서 발생하는 결함 때문이다 [48].
      1. 패턴 오류, 먼지 입자 등으로 인해 칩의 일부 영역이 손상될 수 있다 [48].
      2. 작은 결함 때문에 전체 칩을 버리는 대신, 엔지니어는 결함 있는 영역을 영구적으로 격리하고 비활성화한다 [49].
      3. GPU는 반복적인 설계 덕분에 한 코어의 작은 결함이 해당 SM 회로에만 영향을 미치고 다른 영역에는 영향을 주지 않는다 [51].
    3. 결함 수에 따라 칩을 테스트하고 분류(binning)하여 다른 제품으로 출시한다 [52].
      1. 3090 Ti는 모든 10,752개의 CUDA 코어가 작동하는 완벽한 GA102 칩을 사용한다 [53].
      2. 3090은 10,496개, 3080 Ti는 10,240개, 3080은 8,704개의 CUDA 코어가 작동한다 [54].
    4. 그래픽 카드는 최대 클럭 속도, 코어 수, 그래픽 메모리 세대 등에서도 차이가 난다 [55].
  4. CUDA 코어의 세부 작동 방식 [57]
    1. 하나의 CUDA 코어는 약 41만 개의 트랜지스터로 구성된다 [58].
    2. 이 중 5만 개의 트랜지스터는 FMA(Fused Multiply-Add) 연산(A * B + C)을 수행하며, 이는 그래픽 카드에서 가장 흔한 연산이다 [59].
    3. CUDA 코어의 절반은 32비트 부동 소수점 숫자를 사용하여 FMA를 실행하고, 나머지 절반은 32비트 정수 또는 32비트 부동 소수점 숫자를 사용한다 [60].
    4. 다른 섹션에서는 음수 처리, 비트 시프팅, 비트 마스킹과 같은 간단한 기능을 수행하며, 들어오는 명령과 피연산자를 수집하고 대기열에 넣은 다음 결과를 누적하고 출력한다 [61].
    5. 이 단일 코어는 제한된 기능을 가진 간단한 계산기이다 [63].
    6. 이 계산기는 클럭 사이클당 한 번의 곱셈과 한 번의 덧셈 연산을 완료한다 [64].
    7. 더 복잡한 연산(나눗셈, 제곱근, 삼각 함수)은 각 SM에 4개만 있는 특수 기능 장치에서 수행된다 [65].
  5. GA102 칩의 기타 구성 요소 [67]
    1. 칩 가장자리에는 12개의 그래픽 메모리 컨트롤러, NVLink 컨트롤러, PCIe 인터페이스가 있다 [68].
    2. 하단에는 6MB의 L2 SRAM 메모리 캐시가 있으며, GigaThread 엔진이 모든 GPC와 SM을 관리한다 [69].

1.3. 그래픽 카드 전체 구성 및 메모리 기술 [70]

  1. 그래픽 카드의 외부 및 전원 구성 [70]
    1. 그래픽 카드 한쪽에는 디스플레이 연결을 위한 다양한 포트가 있다 [71].
    2. 다른 쪽에는 12V 전원 커넥터와 마더보드에 연결되는 PCIe 핀이 있다 [72].
    3. 대부분의 작은 부품은 전압 조정 모듈로, 들어오는 12볼트를 1.1볼트로 변환하여 GPU에 수백 와트의 전력을 공급한다 [73].
    4. 이러한 전력 소모로 인해 GPU가 과열되므로, 그래픽 카드 무게의 대부분은 히트싱크와 4개의 히트 파이프로 구성된 냉각 시스템이 차지한다 [74].
  2. 그래픽 메모리(GDDR6X SDRAM) [75]
    1. GPU 외에 가장 중요한 구성 요소는 24GB의 GDDR6X SDRAM 그래픽 메모리 칩이다 [75].
    2. 비디오 게임을 시작하거나 로딩 화면을 기다릴 때, 대부분의 시간은 3D 모델을 SSD에서 이 그래픽 메모리 칩으로 옮기는 데 소요된다 [76].
    3. GPU는 6MB의 작은 L2 캐시를 가지고 있어 게임 환경의 일부만 저장할 수 있다 [77].
    4. 따라서 게임을 렌더링하기 위해 장면의 다른 부분들이 그래픽 메모리와 GPU 사이에서 지속적으로 전송된다 [78].
    5. GPU는 초당 수십조 번의 연산을 수행하므로, 끊임없이 테라바이트 단위의 데이터를 공급받아야 한다 [79].
    6. 그래픽 메모리 칩은 여러 대의 크레인이 동시에 화물선에 짐을 싣는 것처럼 설계되었다 [80].
      1. 24개의 칩은 한 번에 총 384비트(버스 폭)를 전송하며, 총 데이터 전송량(대역폭)은 초당 약 1.15TB에 달한다 [81].
      2. 반면, CPU를 지원하는 DRAM은 64비트 버스 폭과 최대 초당 64GB의 대역폭을 가진다 [82].
  3. 그래픽 메모리의 데이터 전송 기술 [83]
    1. 컴퓨터는 이진수(0과 1)로만 작동한다고 생각할 수 있지만, 데이터 전송 속도를 높이기 위해 GDDR6X 및 최신 GDDR7 그래픽 메모리는 여러 전압 레벨을 사용하여 데이터를 주고받는다 [83].
    2. GDDR7은 0, 1, -1의 전압을 가진 PAM-3 심볼이라는 3가지 인코딩 방식을 사용하여 이진 비트를 3진수로 결합한다 [85].
      1. 이 방식은 3개의 이진 비트를 2개의 3진수로 인코딩하고, 11비트를 7개의 3진수로 인코딩하는 방식과 결합되어 276개의 이진 비트를 176개의 3진수만으로 전송할 수 있다 [86].
    3. 이전 세대인 GDDR6X(3090 그래픽 카드에 사용)는 PAM-4라는 다른 인코딩 방식을 사용하여 4가지 전압 레벨로 2비트의 데이터를 전송했다 [87].
    4. 그래픽 메모리 산업의 엔지니어들은 인코더 복잡성을 줄이고, 신호 대 잡음비를 개선하며, 전력 효율성을 높이기 위해 미래 세대 칩에 PAM-3로 전환하기로 합의했다 [88].
  4. 고대역폭 메모리(HBM) [90]
    1. HBM(고대역폭 메모리)은 AI 칩 주변에 사용되는 기술로, DRAM 메모리 칩을 쌓아 올리고 TSV(실리콘 관통 전극)를 사용하여 스택을 단일 칩으로 연결하여 AI 메모리 큐브를 형성한다 [90].
    2. 최신 HBM3E는 단일 큐브당 최대 24~36GB의 메모리를 가질 수 있으며, AI 칩 주변에 192GB의 고속 메모리를 제공한다 [92].
    3. Micron의 HBM3는 경쟁 제품보다 전력을 30% 적게 사용한다 [94].
    4. 이러한 AI 가속기 시스템은 개당 25,000달러에서 40,000달러에 달하며, 몇 년간 주문이 밀려있는 상태이다 [95].

2. GPU의 병렬 컴퓨팅 아키텍처 [99]

thumbnail GPU는 SIMD(단일 명령 다중 데이터) 또는 SIMT(단일 명령 다중 스레드) 원리를 사용하여 비디오 게임 렌더링, 비트코인 채굴, 신경망과 같은 병렬 처리에 최적화된 작업을 효율적으로 수행한다.

2.1. SIMD(단일 명령 다중 데이터) 아키텍처 [99]

  1. 병렬 처리의 개념: Embarrassingly Parallel [99]
    1. Embarrassingly Parallel은 문제를 병렬 작업으로 나누는 데 거의 또는 전혀 노력이 필요 없는 컴퓨터 문제의 기술적 분류이다 [100].
    2. 비디오 게임 렌더링과 비트코인 채굴이 이 범주에 쉽게 속한다 [101].
    3. GPU는 SIMD(Single Instruction Multiple Data) 원리를 사용하여 이러한 문제를 해결한다 [102].
      1. SIMD는 동일한 명령이나 단계를 수천에서 수백만 개의 다른 숫자에 반복적으로 적용하는 방식이다 [102].
  2. 3D 비디오 게임 환경에서의 SIMD 활용 예시 [104]
    1. 카우보이 모자는 약 28,000개의 삼각형으로 구성되며, 각 삼각형은 X, Y, Z 좌표를 가진 약 14,000개의 정점(vertex)으로 이루어져 있다 [105].
    2. 각 객체는 자체 모델 공간(Model Space) 좌표계를 가지며, 3D 세계를 구축하기 위해 수백 개의 객체가 환경에 배치된다 [106].
    3. 카메라가 각 객체의 상대적 위치를 파악하려면, 모든 정점을 각 모델의 모델 공간에서 공유된 월드 좌표계(World Space)로 변환해야 한다 [108].
    4. 예를 들어, 카우보이 모자의 14,000개 정점을 모델 공간에서 월드 공간으로 변환하려면 다음 단계를 따른다 [110].
      1. 단일 명령을 사용하여 모자의 월드 공간 원점 위치를 모델 공간의 단일 정점의 X, Y, Z 좌표에 더한다 [110].
      2. 이 명령을 모자를 구성하는 수천 개의 다른 정점의 X, Y, Z 좌표에 복사하여 적용한다 [111].
      3. 테이블과 장면의 다른 수백 개의 객체에도 동일한 명령을 사용하지만, 각 객체의 월드 공간 좌표와 수천 개의 정점에 적용한다 [112].
    5. 결과적으로 모든 객체의 정점과 삼각형이 공통 월드 공간 좌표계로 변환되어, 카메라가 어떤 객체가 앞에 있고 뒤에 있는지 판단할 수 있게 된다 [113].
    6. 이 예시는 SIMD의 강력함을 보여주며, 단일 명령이 장면 내 5,629개의 다른 객체에 걸쳐 총 830만 개의 정점에 적용되어 2,500만 번의 덧셈 연산을 수행한다 [114].
    7. SIMD와 Embarrassingly Parallel 프로그램의 핵심은 이러한 수백만 개의 계산이 서로 의존하지 않으므로, 모든 계산을 GPU의 수천 개 코어에 분산하여 병렬로 완료할 수 있다는 점이다 [115].
  3. 렌더링 파이프라인의 다른 단계 [116]
    1. 정점 변환은 복잡한 비디오 게임 그래픽 렌더링 파이프라인의 첫 단계 중 하나일 뿐이다 [116].
    2. 각 객체의 회전 및 스케일 변환은 유사한 과정으로 추가 SIMD 계산이 필요하다 [118].

2.2. GPU의 컴퓨팅 아키텍처와 SIMT로의 발전 [119]

  1. 물리적 아키텍처와 컴퓨팅 아키텍처의 연계 [119]
    1. 각 명령은 스레드(thread)에 의해 완료되며, 이 스레드는 단일 CUDA 코어에 매칭된다 [120].
    2. 스레드는 32개씩 묶여 워프(warp)를 형성하며, 동일한 명령 시퀀스가 워프 내 모든 스레드에 발행된다 [121].
    3. 워프는 스레드 블록(thread block)으로 그룹화되며, 이는 스트리밍 멀티프로세서(SM)에 의해 처리된다 [122].
    4. 마지막으로 스레드 블록은 그리드(grid)로 그룹화되며, 전체 GPU에서 계산된다 [123].
    5. 이 모든 계산은 GigaThread 엔진에 의해 관리 또는 스케줄링되며, 스레드 블록을 사용 가능한 SM에 효율적으로 매핑한다 [124].
  2. SIMD에서 SIMT로의 발전 [125]
    1. SIMD 아키텍처 내에서는 워프 내 32개 스레드 모두가 동일한 명령을 따르며, 마치 병사들이 함께 움직이는 것처럼 동기화(lockstep)되어 실행된다 [125].
    2. 그러나 2016년경부터는 SIMT(Single Instruction Multiple Threads) 아키텍처를 따르는 새로운 GPU가 등장했다 [127].
    3. SIMD와 SIMT의 차이점은 다음과 같다 [128].
      1. 둘 다 각 스레드에 동일한 명령 세트를 보내지만, SIMT에서는 개별 스레드가 서로 동기화될 필요 없이 다른 속도로 진행할 수 있다 [128].
      2. 각 스레드에 자체 프로그램 카운터가 부여된다 [129].
      3. SM 내의 모든 스레드는 공유 128KB L1 캐시를 사용하므로, 한 스레드에서 출력된 데이터를 다른 스레드가 사용할 수 있다 [130].
    4. SIMD에서 SIMT로의 개선은 데이터 의존적 조건문(warp divergence)을 만났을 때 더 큰 유연성을 제공하며, 스레드가 장벽 동기화에 도달하기 위한 재수렴을 더 쉽게 만든다 [131].
    5. 결론적으로, 최신 GPU 아키텍처는 특히 코드 내 분기(branches)를 만났을 때 더 유연하고 효율적이다 [133].
  3. '워프' 용어의 유래 [134]
    1. '워프'라는 용어는 워프 드라이브에서 유래한 것이 아니라, 직조(weaving), 특히 자카드 직조기(Jacquard loom)에서 유래했다 [134].
    2. 1804년의 이 직조기는 프로그래밍 가능한 펀치 카드를 사용하여 특정 실을 선택하여 복잡한 패턴을 직조했다 [135].

2.3. GPU의 특수 연산: 비트코인 채굴 및 신경망 [137]

  1. 비트코인 채굴에서의 GPU 활용 [145]
    1. 블록체인에서 블록을 생성하기 위해, 거래 내역, 타임스탬프, 추가 데이터, 그리고 논스(nonce)라는 무작위 숫자를 포함하는 데이터 세트에 SHA-256 해싱 알고리즘이 실행된다 [148].
    2. 이 값들을 SHA-256 알고리즘에 입력하면 무작위 256비트 값이 출력된다 [149].
    3. 이 알고리즘은 복권 번호를 직접 선택할 수는 없지만, 입력 데이터에 따라 무작위 복권 번호를 생성하는 복권 생성기와 같다 [150].
    4. 논스 값을 변경하고 나머지 데이터를 동일하게 유지하면 다른 해시(새로운 무작위 복권 번호)를 얻게 된다 [151].
    5. 비트코인 채굴 복권의 당첨자는 처음 80비트가 모두 0인 무작위 생성된 복권 번호를 가장 먼저 찾는 사람이다 [154].
    6. 당첨 복권이 발견되면 3비트코인의 보상이 주어지고, 새로운 거래 및 입력 값으로 복권이 재설정된다 [155].
    7. 그래픽 카드가 채굴에 사용된 이유는 동일한 거래, 타임스탬프 및 기타 데이터를 사용하되 다른 논스 값으로 SHA-256 알고리즘을 수천 번 반복 실행할 수 있었기 때문이다 [156].
      1. RTX 3090과 같은 그래픽 카드는 초당 약 9,500만 개의 SHA-256 해시(9,500만 개의 무작위 복권 번호)를 생성할 수 있었다 [157].
    8. 그러나 오늘날에는 ASIC(주문형 반도체)으로 채워진 컴퓨터가 초당 250조 개의 해시를 수행하며, 이는 2,600개의 그래픽 카드와 맞먹는 수준이다 [159].
    9. ASIC 채굴 컴퓨터 옆에서 비트코인을 채굴하는 그래픽 카드는 마치 삽 옆의 숟가락과 같다 [160].
  2. 텐서 코어의 설계와 신경망 활용 [161]
    1. 텐서 코어는 세 개의 행렬을 받아 처음 두 행렬을 곱하고 세 번째 행렬을 더한 다음 결과를 출력한다 [163].
    2. 출력 값의 하나는 첫 번째 행렬의 첫 번째 행 값과 두 번째 행렬의 첫 번째 열 값을 곱한 값의 합에 세 번째 행렬의 해당 값을 더한 것과 같다 [165].
    3. 세 입력 행렬의 모든 값이 동시에 준비되므로, 텐서 코어는 모든 행렬 곱셈 및 덧셈 계산을 동시에 완료한다 [166].
    4. 신경망과 생성형 AI는 수조에서 수천조 번의 행렬 곱셈 및 덧셈 연산을 필요로 하며, 일반적으로 훨씬 더 큰 행렬을 사용한다 [167].
  3. 레이 트레이싱 코어 [168]
    1. 레이 트레이싱 코어는 별도의 영상에서 다루어진 바 있다 [168].