3

전통적 직렬 CPU 루프의 효율 병목

AI999第4课:现代计算底座与张量化并行演化
00:00

진화 과정은 개체군 다양성에 의존하며, 다양성은 개체군 규모와 평가 횟수의 배수적 증가를 의미합니다. 후보 평가가 수만 회 규모에 이르면,전통적 직렬 CPU 루프는 전체 파이프라인에서 가장 좁은 구간이 됩니다. 한 번에 하나의 개체만 처리하므로 하드웨어의 병렬 능력이 거의 유휴 상태로 남습니다.

직렬 CPU 루프와 배치 병렬: 총 소요 시간이 후보 평가 횟수에 따라 증가직렬 개별 처리배치 병렬 처리실제 소요 시간(정규화)≈ 100초직렬: 거의 선형 증가병렬: 계단식 증가직렬 개별: 개체 가져오기 → 디코딩 → 평가 → 되쓰기인접 반복이 겹칠 수 없어 병렬 유닛 대부분이 유휴 상태배치 병렬: 배치 단위로 구성, 시간은 배치 수에 의해 결정10³회10⁴회10⁵회후보 평가 횟수참고: 진한 색 구간은 스케줄링 및 데이터 이동 오버헤드입니다. 동일한 작업량에서 병렬 소요 시간의 증가는 개체 수가 아닌 배치 수에 의해 주로 결정됩니다.

한 번에 하나씩: 직렬 루프의 실행 모델

가장 단순한 구현은 전체 개체군을 하나의 리스트로 취급하고 루프로 개체를 하나씩 꺼내는 것입니다. 개체 가져오기 → 구체적 파라미터로 디코딩 → 평가 함수 호출 → 적합도 되쓰기. 인접 반복 간에는 거의 겹칠 수 없습니다. 평가 결과가 돌아오지 않으면 되쓰기가 진행될 수 없고, 되쓰기가 끝나지 않으면 다음 개체가 결과를 놓을 자리가 없습니다. 그래서 멀티코어, SIMD, GPU 같은 병렬 유닛은 대부분의 시간을 유휴 상태로 보내며, 하나의 개체가 파이프라인을 다 돌아가는 것을 지켜볼 수밖에 없습니다.

오버헤드는 어디에서 오는가

  • 선형으로 팽창하는 평가 횟수: 총 평가 횟수는 대략 개체군 규모 × 반복 세대이며, 10⁵ 규모에 이르면 직렬 실제 소요 시간이 거의 선형으로 증가합니다.
  • 인터프리터 계층의 개별 실행: 개체별 루프, 경계 검사, 타입 분기는 고정적이지만 높은 상수 오버헤드를 초래합니다.
  • 비연속 메모리 접근과 데이터 이동: 개별적으로 가져오는 개체는 메모리에서 대개 연속적이지 않아 캐시 적중률이 낮고, 이동 비용이 반복적으로 발생합니다.
  • 동기화와 스케줄링: 다음 개체를 가져오기 위해 실행 흐름이 반복적으로 멈췄다가 재개되어야 합니다.

규모를 시간으로 환산하기

개체군 1000, 반복 100세대를 예로 들면 총 약 10만 회의 후보 평가가 이루어집니다. 단일 평가가 평균 1 ms라면 평가 단계만 직렬로 약 100초가 걸리며, 여기에 연산자 계산과 스케줄링 오버헤드는 아직 포함되지 않았습니다. 다양성 유지를 위해 재시작 횟수를 1회에서 5회로 늘리면 비용은 거의 선형으로 약 500초까지 상승합니다. 동일한 작업량을 배치 단위로 구성해 병렬 하드웨어에 맡기면 실제 소요 시간은 개체 수가 아닌 배치 수에 의해 주로 결정됩니다.

이 병목은 언제 완화되는가

경계 조건도 마찬가지로 중요합니다. 단일 평가가 매우 저렴하거나(마이크로초 수준) 개체군이 매우 작으면(100 미만) 스케줄링과 메모리 오버헤드가 계산 오버헤드를 역전할 수 있고, 직렬과 병렬의 차이가 뚜렷하게 줄어들며, 텐서화의 한계 수익이 체감하고, 병목이 스케줄링 입자성과 메모리 대역폭으로 옮겨갑니다. 따라서 실행 모델을 개조할 가치가 있는지는 평가 비용과 규모를 함께 고려해 평가해야 합니다.

구조적 병목이지 코드 결함이 아니다
직렬 CPU 루프의 효율 병목은 실행 모델 차원의 문제로, 국소적 코드 튜닝으로는 제거할 수 없습니다. 진정으로 해결하려면 개별 처리를 배치 단위로 재구성해야 합니다. 즉 배치 처리, 텐서화, 병렬 스케줄링이며, 이는 이후 텐서화 계산 그래프 설계의 직접적인 동기가 됩니다.