병렬 프로그래밍 교과서, CPU 캐시의 현실을 마주하다
원제 Book review: Is parallel programming hard, and, if so, what can you do about it?
110 포인트댓글 33

Key Point
동시성 프로그래밍을 이론만 아는 개발자라면, CPU 캐시와 컴파일러 최적화가 실제 코드에 미치는 영향을 이 리뷰로 확인할 수 있다.
핵심 요약
- Paul E. McKenney의 무료 온라인 교과서 《Is Parallel Programming Hard, And, If So, What Can You Do About It?》에 대한 서평이다.
- 저자는 TLA⁺와 분산 시스템 전공자였으나 Fil Pizlo와의 대화를 통해 lock-free 동시성 프로그래밍에 대해 거의 모른다는 깨달음을 얻었다.
- 교과서는 PDF 3가지 형식(이중 열, 좌우 여백 있음/없음)으로 제공되며, 내부 링크가 많아 터치스크린 사용 시 의도치 않은 클릭이 빈번한 문제가 있다.
- 3장 '하드웨어와 그 습관'에서 CPU 캐시 동작 원리를 설명하는데, MESI 프로토콜이 부록에만 있어 본문 이해를 어렵게 한다.
- 4장 '업무의 도구'는 컴파일러와 CPU 최적화로 인한 데이터 경합 문제(load/store tearing, 재정렬, invented loads 등)를 다루며 kernel 중심으로 작성돼 C++11/C11의 std::memory_order 등은 짧게 다룬다.
- 5장 '계수'는 여러 스레드가 카운터를 증가시키는 10가지 구현 방식을 비교하며, false sharing의 성능 영향과 array 기반 per-thread 통계 카운터를 설명한다.
- lock-free 프로그래밍은 14장 '고급 동기화'에서 다루고, 메모리 정렬은 15장에서 다루나 저자는 추가 자료를 참고했다.
- 저자는 첫 5장을 깊이 있게 읽었으며, 교과서가 x86의 mov 원자성, DEC Alpha의 약한 메모리 모델, release-acquire 시맨틱, lock-free 알고리즘 테스트의 한계 등 직관적이지 않은 내용들의 보고라고 평가한다.