멀티 스레딩을 구현하는 데는 여러 가지 방법이 있습니다. std::thread
은 결국 C++ 11 표준으로 가져 왔지만 boost::thread
을 효과적으로 대신 사용할 수있었습니다. 각 기술에는 특정 구문과 내용이 있지만 대략적으로 CPU 병렬 프로그래밍에 사용됩니다. 하지만 그들은 다른 효과가 있습니다. 예를 들어, MPI와 OpenMP가 다른 메모리 모델에 사용된다는 것을 알고 있습니다.OpenMP, MPI, POSIX 스레드, std :: thread, boost :: thread는 어떻게 상호 연관되어 있습니까?
기술의 선택이 실제로 배타적이지 않으므로 또 다른 기술 (다시, MPI 및 OpenMP)을 사용할 수 있다는 것도 알고 있습니다. 어떻게 다른 효과에 사용되지만 동일한 소스 (CPU)로 계속 작업합니까?
각 기술에 기반한 병렬 처리로 C++ 프로그램을 컴파일하면 (운영 체제 및 하드웨어 관점에서 볼 때) 차이점은 무엇입니까? 예를 들어 OpenMP 또는 std::thread
이 POSIX 스레드를 사용합니까? 그렇다면 C++ 11의 스레드는 Windows에서 어떻게 작동합니까? 아니면 이러한 각각의 기술은 어셈블리 언어 등을 통해 CPU와 직접 작동합니까?
OpenMP와 다른 스레드 패러다임을 함께 사용합니다. 'std :: thread'는 지정된 동작이 아닙니다. 명세에서 명시 적으로 금지되어 있지는 않다. 하지만 여전히 작동 여부는 구현에 따라 다릅니다. MPI와 OpenMP 또는 다른 스레딩 패러다임을 결합하는 것은 MPI가 쓰레드에 대한 지원으로 적절히 초기화되어있는 한 괜찮습니다. –