2009-06-24 6 views
3

우리는 Windows 플랫폼 용으로 개발중인 제품이며 요즘 PC에있는 여러 개의 코어를 활용하려고합니다.Windows 용 C/C++ 용 병렬 API

VS2010에는 Concurrency Runtime이 있다는 것을 알고 있습니다. 그래도 여전히 베타 버전입니다. 그 동안 우리는 지금 양질의 코드를 발표 할 필요가 있습니다. 나중에 부드러운 전환을 가능하게하는 API를위한 좋은 옵션은 무엇입니까? 다른 제안?

답변

2

나는 알고 :

  • Intel Thread Building Block library (오픈 소스) (미래에 언젠가 크로스 플랫폼)
  • C++ 0X 스레드 라이브러리 지원하는 C++ 0X 스레드 라이브러리의
  • Just Software 구현 - 2008 년 대 새로운 C++ 쓰레드 라이브러리 사용에 머리를 맞출 수 있습니다.
  • OpenMP - 요즘 대다수의 C++ 컴파일러에 VS 2008을 포함하여 빌드하십시오.
  • pthreads for win32 - 모든 POSIX 불만 OS를위한 크로스 플랫폼이므로 POSIX 스레드. 그것은 다른 멀티 스레드 API의 대부분에 걸쳐 높은 수준의 추상화가의로
  • WIN32 스레딩 API는

나는 인텔 스레드 빌딩 블록을 추천 할 것입니다. 또한 오픈 소스이므로 다운로드 할 수 있으며 일부 작업이 어떻게 수행되는지 확인할 수 있습니다. 상향식 버전은 윈도우 동시성 런타임 (Concurrency Runtime)이있는 경우 사용할 수 있습니다. 또한 인텔이 TBB를 C++ 표준에 포함시키기 위해 제출했다고 읽었습니다.

pthreads와 Win32 API는 다중 스레드 환경을 훨씬 더 잘 이해할 필요가있는 하위 레벨 기본 요소입니다. 자신이 무엇을하고 있는지 알면이 도구를 사용하여 가장 잘 제어 할 수 있습니다.

아직 새로운 C++ 스레딩 지원을 사용하고 있지만 pthreads와 같은 수준이거나 약간 높은 것으로 보입니다. Just Software는 새로운 C++ 쓰레드 라이브러리 사용법에 대해 흥미로운 articles을 가지고 있습니다.

OpenMP에 대해서만 읽었으며 사용하는 것이 확실하지 않습니다.

Joe Duffy'sConcurrent Programming on Windows 책을 읽고 싶을 수도 있습니다.

Herb Sutter 또한 효과적인 동시성이라는 제목으로 많은 기사를 게시합니다.

희망이 있습니다.

1

인텔의 스레드 구성 블록 라이브러리에는 동시성 런타임과 유사 (상위 수준에서)하는 병렬 작업 시스템이 있습니다. API의 세부 사항은 다르지만 독립적으로 실행되는 작은 작업으로 프로그램을 무너 뜨리는 작업은 계속 이어질 것입니다.

+0

Thread Building Block 라이브러리에 대한 자세한 내용은 http://www.threadingbuildingblocks.org/에서 찾을 수 있습니다. C++ 라이브러리이므로 C 코드에서 사용하려는 경우에는 pthreads 또는 OpenMP와 함께 사용 – garethm

1

나는 항상 pthread를 좋아했습니다. 내가 실행 한 다른 스레딩 모델에 꽤 잘 맞 춥니 다. 프로그램을 쉽게찾았습니다 (MPI와 비교하여).

그러나 Concurrency Runtime만큼 높은 것은 아닙니다.

나는 또한 OpenMP에 대한 약간의 소음을 들었지만, 들여다 보지 않았습니다.

+0

Windows 용 pthreads에 대한 자세한 내용은 http://sourceware.org/pthreads-win32/ – garethm

2

기다리는 동안 OpenMP을 사용하는 것이 좋습니다. 대부분의 컴파일러에서 구현되며 기존 코드에 비교적 쉽게 추가 할 수 있으며 나중에 다른 API와 함께 사용할 수 있습니다.

1

짧은 대답 : 좋은 스레딩 경험을 가진 프로그래머를 고용하십시오.

멀티 코어에서 멀티 스레드로 작업하는 것은 어렵습니다. 경험을 대체 할만한 것은 없습니다.

Visual C++ (최신 버전)에는 병렬 소프트웨어 개발 도구가 있지만 경험이없는 사용자에게는 매우 까다로운 데이터 동기화와 같은 복잡성이 있습니다. 동시성 런타임 (Concurrency Runtime)은 복잡성을 숨기고 컴파일러가 작업을 수행하기위한 시도입니다. 그것은 아주 잘 작동하지만, 배심원은 여전히 ​​있습니다. 지금 당장은 기존 도구로 좋은 결과를 얻을 수 있지만 전문 지식이 필요합니다.

아키텍처를 올바르게 수행하고 직원의 속도를 향상시킬 수 있도록 훌륭한 계약자를 고용하는 것이 좋습니다.

+0

에서 찾으실 수 있습니다. 안녕하세요! 멀티 스레딩을 처음 시도한 것이 잘못되었다는 점에 유감스럽게 생각합니다. 내 질문은 API/arch가 "future-proofing"에 사용하는 것에 더 많은 것이었다. 우리는 그 계약자입니다. – moogs

+0

그 경우, 제 응답은 "미래 보장"해결책이 아직 없다는 것입니다. VS10 항목은 하나가 될 수 있지만 성숙 될 때까지는 그렇지 않을 수 있습니다. 베타 버전으로 사용하면 큰 위험에 처할 수 있습니다. 다음 C++ 표준은 약간의 병렬 처리를 할 것이지만 여전히 약간 낮은 수준입니다. _beginthread() 또는 CreateThread()를 사용한다고 말하고 싶습니다. 중요 섹션, 뮤텍스, 세마포 및 이벤트를 사용하십시오. 그것은 여전히 ​​많은 무거운 짐을 싣기는하지만 적어도 다른 사람의 벌레를 땀을 흘리지는 않습니다. 좋은 API가 올 것이지만, 실행 가능한 것으로부터 2 년이 걸릴 것입니다. –