1. 하나의 프로세스 numpy 모듈을 이용하여, 여러 CPU core을 사용 병렬적으로 연산하기 VS 2. 여러 프로세스로 분산, 병렬 연산 처리

About_work·2024년 2월 14일
0

process, thread

목록 보기
17/23

1. 본문

1.1. 하나의 프로세스에서 NumPy 모듈을 이용하여 여러 CPU 코어 사용하기

  • 얘가 더 합리적인듯하다.
    장점:
  • 효율성:
    • NumPy는 내부적으로 최적화된 C/C++ 라이브러리를 사용하기 때문에, 고성능의 수치 계산이 가능
    • 이러한 라이브러리들은 자동으로 멀티코어를 활용하여 연산을 병렬로 처리
  • 관리 용이성:
    • 메모리 공간을 공유하므로, 데이터 교환에 대한 오버헤드가 적음
  • 단점:
  • 자동 병렬화의 한계:
    • NumPy 연산은 내부적으로 병렬화될 수 있지만, 모든 연산이 자동으로 최적의 병렬 처리 방식으로 실행되는 것은 아닙니다.
    • 연산의 종류, 데이터의 크기, 메모리 대역폭 등에 따라 병렬 처리의 이점이 달라질 수 있습니다.

1.2. 연산을 여러 프로세스로 분산하여 병렬적으로 처리하기

장점:

  • GIL 우회: 각 프로세스는 독립된 Python 인터프리터를 가지므로, GIL의 제약을 받지 않습니다. 이를 통해, 순수 파이썬 연산도 진정한 병렬 처리가 가능해집니다.

단점:

  • 오버헤드:
    • 프로세스 간 통신(IPC)에는 상대적으로 높은 오버헤드가 발생
    • 데이터를 프로세스 간에 전송하려면 직렬화와 역직렬화가 필요하며, 이는 추가적인 계산 리소스를 소모
  • 각 프로세스가 자신만의 메모리 공간을 유지하기 때문에, 동일한 데이터의 복사본을 여러 프로세스가 가지고 있을 수 있습니다. 이는 메모리 사용량을 증가시킵니다.

2. 하나의 프로세스가 사용가능한 메모리 공간의 제한은 어떻게 설정되나요?

  • 하나의 프로세스가 사용할 수 있는 메모리 양의 제한은 아래 요소에 영향을 받음
    • 운영 체제
    • 프로세스가 실행되는 시스템의 하드웨어
    • 그리고 해당 프로세스에 할당된 설정

2.1. 운영 체제 (OS)

  • 결론: 64비트 아키텍쳐의 경우, 하나의 프로세스에서 사용가능한 메모리 비중은 거의 제한이 없다!!!!!
  • 32비트 vs 64비트 아키텍처:
    • 32비트 시스템은 주소 지정 가능한 메모리가 최대 4GB까지이며, 이 중 일부는 시스템 자체에 의해 사용됩니다.
    • 반면, 64비트 시스템은 훨씬 더 많은 메모리를 주소 지정할 수 있습니다 (이론적으로는 16,000,000,000GB까지, 실제로는 하드웨어와 OS에 따라 제한됨).
  • OS별 메모리 관리 정책:
    • 각 OS는 메모리를 관리하는 고유한 방식을 가지고 있으며, 프로세스별 메모리 할당 한계를 설정할 수 있습니다.

2.2. 하드웨어

  • 물리적 메모리 (RAM): 시스템에 설치된 RAM의 양이 실제로 프로세스가 사용할 수 있는 메모리의 상한을 결정합니다. 물리적 메모리가 부족하면, 시스템은 디스크 기반의 가상 메모리를 사용하여 이를 보완하지만, 이는 성능 저하를 일으킬 수 있습니다.
  • CPU: CPU의 설계(특히, 메모리 관리 유닛(MMU))도 주소 지정 가능한 메모리 양에 영향을 미침

2.3. 프로세스 설정

  • 가상 메모리 설정: 운영 체제는 각 프로세스에 대해 가상 메모리 공간을 할당합니다. 이 설정은 프로세스가 사용할 수 있는 메모리 양을 제한할 수 있습니다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글