하나의 프로세스 내에서 여러 스레드를 생성하여 작업을 수행할 경우
, 운영 체제의 스케줄러가여러 스레드를 다른 CPU 코어에 할당하여 병렬적으로 작업을 수행할 수 있습니다.
GIL을 우회하는 C 확장 라이브러리
를 사용하면 여러 CPU 코어를 효과적으로 활용할 수 있습니다.자체적으로 여러 스레드를 생성
하여 멀티코어 CPU의 병렬 처리 능력을 활용내부적으로 최적화된 C/C++ 라이브러리(예: BLAS, LAPACK)를 사용
MKL_NUM_THREADS
, OpenBLAS의 경우 OPENBLAS_NUM_THREADS
등을 설정할 수 있음네, 가능합니다. 사용하는 BLAS/LAPACK 라이브러리에 따라 환경 변수를 설정하여 스레드의 수를 제한할 수 있습니다. 예를 들어:
Intel MKL 사용 시: MKL이 제공하는 mkl_set_num_threads()
함수를 직접 호출하거나, 환경 변수 MKL_NUM_THREADS
를 설정하여 스레드의 수를 제한할 수 있습니다.
import os
os.environ["MKL_NUM_THREADS"] = "4" # MKL을 사용할 때 4개의 스레드 사용
OpenBLAS 사용 시: 환경 변수 OPENBLAS_NUM_THREADS
를 설정합니다.
import os
os.environ["OPENBLAS_NUM_THREADS"] = "4" # OpenBLAS를 사용할 때 4개의 스레드 사용
환경 변수는 프로그램이 실행되기 전에 설정되어야 합니다. Python 스크립트 내에서 설정하는 경우, NumPy 또는 관련 라이브러리를 임포트하기 전에 설정하는 것이 좋습니다. 또한, 일부 시스템에서는 시스템 전체의 환경 변수를 설정하여 모든 애플리케이션에 대한 기본 스레드 수를 조정할 수도 있습니다.
이러한 설정을 통해, NumPy 연산이 사용할 수 있는 스레드의 수를 제어하여, 자원 사용을 최적화하거나 다른 애플리케이션과의 자원 경쟁을 관리할 수 있습니다.
파이썬 표준 라이브러리나 대부분의 외부 라이브러리는 특정 프로세스가 현재 사용 중인 CPU 코어의 번호를 직접적으로 확인할 방법을 제공하지 않습니다.
특정 프로세스가 사용하는 CPU 코어의 번호를 정확히 알아내는 것은 일반적인 사용 사례에서는 드물고,
대부분의 응용 프로그램에서는 프로세스의 CPU 사용률이나 시스템 전체의 CPU 부하 분포에 더 관심을 가집니다.