Lastest Update: 20250413

1. 개요

파이썬은 느리다. 경험상 파이썬으로 할수 있는 모든 최적화 방법들을 동원해도(numba, pypy, cython)모두 C/C++, Rust, Go, Scala, Julia보다 느리다. 극한의 최적화를 하면 어느정도 따라잡을 수 있지만 시간 비용 대비 좋은 선택이라고 보기 힘들다.

그럼에도 불구하고 다른 해결책들을 찾아본 결과 여기에 어떠한 가정이 붙으면 이 관계는 바뀔 수 있지 않을까 생각했다. 그 가정은 다음과 같다.

파이썬이 틱 데이터 연구에서 느리다는 생각은 CPU플랫폼에서 연산을 할 경우라고 생각한다. CPU플랫폼에서 경쟁하기 때문에 GIL과 interpreter 형식의 파이썬에게 매우 불리한 환경이다. GPU환경에서는 어떻게 될까?

우리가 쓰는 CPU플랫폼에서 메모리 엑세스 패턴에서 CPU 캐쉬의 크기는 매우 커도 256MB 이다. (쓰레드리퍼 3990x 기준)

https://www.alibabacloud.com/blog/the-mechanism-behind-measuring-cache-access-latency_599384

https://www.alibabacloud.com/blog/the-mechanism-behind-measuring-cache-access-latency_599384

GPU에서 수만개의 코어와 GPU Memory(HBM)에서 한번에 연산을 맞기고 결과만 파이썬에서 받아볼 수 있다면 연산량의 qauntum jump 가 가능하다.

데이터가 흘러가는 방향은 다음과 같다. Disk I/O → DRAM → HBM(GPU Memory) → GPU Core 순이다.

  1. Disk I/O: parquet 압축과 decompression시 멀티코어 사용으로 Disk I/O 최적화 가능
  2. DRAM: DDR4-3200 기준 대역폭은 25.6GB/초 이다.
  3. GPU Memory(HBM): HBM3 기준 대역폭은 819GB/초 이다.