경할 수 없으므로 버스 폭이 아주 넓더라도 한 번의 계산에 필요한 정보를 한 번에 전송할 수
없다.
4
두 번째는 좀 더 원초적인 문제로, 파이썬이 동적 타입을 사용하며 컴파일되지 않는다는 점이
다. (
C
개발자라면 수년간의 경험으로 이미 알고 있겠지만) 컴파일러가 사람보다 더 똑똑할
때가 많다. 정적인 코드를 컴파일할 때, 컴파일러는
CPU
가 특정 명령을 실행하는 방식을 포함
한 많은 부분을 변경해서 최적화할 수 있다. 하지만 파이썬은 컴파일되지 않는 데다가 코드의
기능이 런타임에 변경되는 동적 타입 언어라 최적화 알고리즘이 제 기능을 발휘하기 어렵다.
이 문제를 극복하는 여러 방법 중 사이썬
Cython
이 가장 대표적이다. 사이썬은 파이썬 코드를 컴
파일하고 컴파일러에게 동적인 코드가 실제로 어떻게 동작하는지 ‘힌트’를 줄 수 있다.
마지막은 앞에서 잠깐 언급했던
GIL
로, 코드를 병렬로 실행하려고 할 때 성능을 낮춘다. 예를
들어
2
부터
sqrtN
까지의 수를 여러 그룹으로 나눠 여러
CPU
코어를 활용하도록 코드를 변경
한다고 가정해보자. 각 코어는 할당받은 수에 대해서만 계산하고 모든 코어에서 계산이 끝나면
결과를 비교한다. 비록 루프를 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.