np.add(a, b) 내부 탐험: Python 호출에서 SIMD 커널까지

Tracing np.add, all the way down

NumPy의 np.add(a, b)는 가장 많이 실행되는 Python 코드 중 하나일 것입니다. 이 글은 NumPy 2.5.2 소스 코드를 따라, Python 호출이 어떻게 C 레벨의 ufunc 디스패치, 타입 프로모션, 반복자 또는 최적화된 트리비얼 루프를 거쳐 최종적으로 SIMD 커널에 도달하는지 단계별로 추적합니다. __array_ufunc__ 오버라이드, 루프 선택 캐싱, GIL 해제, 부동소수점 예외 처리 등 내부 메커니즘을 상세히 설명하며, 독자가 직접 NumPy 내부를 탐험할 수 있도록 안내합니다.

스트라이드만으로는 트리비얼 경로에서 쫓겨나지 않습니다. 트리비얼 루프는 1차원 배열을 받아들이고 실제 스트라이드를 내부 루프에 전달하기 때문에, a[::2]조차도 반복자 없이 단일 호출로 처리됩니다.

이 날의 다른 글

2026-09-08