공유 메모리 병렬 프로그래밍을위한 Python 가이드


11

매트릭스 추가, 곱셈 등과 같은 간단한 작업을 수행하기 위해 공유 메모리 시스템 (C 및 FORTRAN 모두) 용 OpenMP를 코딩 한 경험이 있습니다 (LAPACK과 어떻게 경쟁하는지 확인하십시오). 문서를 보지 않고도 간단한 작업을 수행 할 수있는 OpenMP를 알고 있습니다.

최근에 저는 프로젝트를 위해 Python으로 옮겼으며 절대 기본을 넘어서는 Python에 대한 경험이 없습니다.

두 가지 질문이 있습니다.

  • Python의 공유 메모리 병렬 컴퓨팅을 설명하는 데 유용한 안내서 (온라인 PDF)가 있습니까?

  • 그것을 달성하는 가장 좋은 방법은 무엇입니까? 나는 조금 보았고 ctypes그것이 최선의 방법인지 확실하지 않습니다. (최선 적으로 프로그래머 시간과 시스템 시간 사이에 균형이 좋은 것을 의미합니다. 실행이 느리거나 코딩이 너무 지루해서는 안됩니다)

답변:


8

[이것은 나의 첫 번째 글이며 SE의 사용법을 완전히 오해하지 않았기를 바랍니다.-그렇다면 사전에 사과드립니다]

본인은 제공된 정보를 바탕으로 질문에 답변하기가 매우 어렵다는 "bgschaid"에 동의합니다. 저수준 루틴이 멀티 코어 아키텍처를 활용하기를 원하거나 당혹스럽게 병렬 문제 또는 그 사이의 무언가에 대해 병렬 처리를 사용해야하는 경우 큰 차이가 있습니다. 파이썬에서 다른 병렬 컴퓨팅 가능성에 대한 개요는 여기 에서 찾을 수 있습니다 .

전자의 경우 최소한 Enthought의 MKL 컴파일 버전에서 멀티 코어 아키텍처를 지원하는 NumPy / SciPy 와 같은 도구를 사용하는 것이 좋습니다 . 여기서 환경 변수 "MKL_NUM_THREADS"를 통해 사용할 코어 수를 제어 할 수 있습니다. 이것은 성능을 능가 할 것으로 기대할 수없는 고도로 최적화 된 라이브러리에 의존합니다. 나는 일반적으로 가능할 때마다 이러한 고품질의 고도로 최적화 된 라이브러리를 사용하는 것이 좋습니다.

거친 수준에서 병렬 처리를 활용하려면 Python 표준 도구 다중 처리 가 사용하기 쉽고 공유 데이터 객체도 지원합니다. 멀티 프로세싱 패키지의 일부로 사용할 여러 도구가 있습니다 . 내가 사용이 map_async (SIMD 등) apply_async 좋은 결과 몇 가지 문제에 대한 (같은 MIMD을). 멀티 프로세싱 패키지는 매우 사용하기 쉬운 당신은 쉽게 당신의 코드의 다른 잠재적 인 사용자가 사용할 수있을 것으로 예상 할 수있는 파이썬 수단의 표준되고있다. 멀티 프로세싱 은 NumPy 데이터 객체에 직접 연결됩니다. 멀티 프로세싱을 사용하는 경우NumPy 가 각 프로세스 / 작업자마다 하나의 코어 만 허용되도록 환경 변수 "MKL_NUM_THREADS"를 1로 설정하는 것이 좋습니다. 그렇지 않으면 NumPy 병렬과 멀티 프로세싱 간에 리소스 경합이 발생 하여 성능이 저하 될 수 있습니다. 멀티 프로세싱 은 동일한 운영 체제에서 멀티 CPU / 멀티 코어 아키텍처에 적합합니다. 4 개의 Xeon E7-4850 CPU (각 10 코어) 및 512GB 메모리가있는 공유 메모리 컴퓨터에서 멀티 프로세싱 을 사용 했으며 매우 잘 작동했습니다. 공유 배열은 multiprocessing.Array 또는 sharedctypes 로 처리 할 수 ​​있습니다 . 여기 에서 파이썬 문서를 찾을 수 있습니다 .library.pdf 파일. 나는 이것의 기본 부분 중 일부를 설명하는 슬라이드를 가지고 있습니다.

분산 메모리가있는 클러스터 구성이 있다면 mpi4py 가 선호되는 도구 일 것입니다. 나는 이것을 직접 사용하지는 않았지만 파이썬 병렬 프로그래밍에서 많이 사용되고 있음을 알고 있습니다.


3

병렬 프로그래밍하려는 수준에 따라 다릅니다. 예를 들어 행렬 / 벡터 물건의 경우 파이썬의 첫 번째 중지 지점은 NumPy / SciPy (Python의 편의와 함께 라이브러리의 최고 속도를 제공하는 숫자 라이브러리에 대한 인터페이스를 제공함)와 병렬 처리에 대해 쓰는 것입니다. 라이브러리가 병렬 사용을 위해 컴파일 된 경우 프로그램은 특정 작업에 멀티 코어를 사용합니다. (이 기사는 조금 더 오래된 것처럼 보이며, 그 동안 운영 체제가 개선되었을 수도 있습니다. 또한 다른 병렬 프로그래밍 수단에 대한 링크가 있습니다.

물론 MPI를 직접 프로그래밍하는 mpi4py 가 있습니다 (위 기사에 포함됨).

결론은 : 주요 관심사가 벡터 / 매트릭스 연산이고 병렬 처리가 "단지"해야 할 일이라면 NumPy / SciPy-ecosystem을 보지 않으면 안됩니다. 자신의 라이브러리 작성을 고려할 때 필요한 것들

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.