문제

인텔의 스레딩 빌딩 블록(TBB) 오픈 소스 라이브러리가 정말 흥미로워 보입니다.심지어는 오라일리 북 주제에 대해 많은 사람들이 그것을 사용한다는 소식을 듣지 못했습니다.Unix(Mac, Linux 등) 환경에서 일부 다중 레벨 병렬 애플리케이션(MPI + 스레드)에 사용하고 싶습니다.그만한 가치가 있기 때문에 저는 고성능 컴퓨팅/수치법 종류의 응용 프로그램에 관심이 있습니다.

TBB에 대한 경험이 있는 사람이 있습니까?잘 작동하나요?이식성이 상당히 높은가요(GCC 및 기타 컴파일러 포함)?패러다임이 당신이 작성한 프로그램에 잘 작동합니까?조사해야 할 다른 라이브러리가 있나요?

도움이 되었습니까?

해결책

16코어 시스템으로 이동할 때 사용할 베터 malloc이 필요했기 때문에 이를 코드 베이스에 도입했습니다.8 이하에서는 큰 문제가 되지 않았습니다.그것은 우리에게 잘 작동했습니다.다음에는 세분화된 동시 컨테이너를 사용할 계획입니다.이상적으로는 제품의 실제 내용을 활용할 수 있지만 그러기 위해서는 코드 작성 방법을 다시 생각해 보아야 합니다.나는 TBB의 아이디어를 정말 좋아하지만 코드 기반으로 개조하는 것은 쉽지 않습니다.

TBB를 또 다른 스레딩 라이브러리로 생각할 수 없습니다.그들은 실제로 스레드 위에 위치하여 스레드를 추상화하는 완전히 새로운 모델을 가지고 있습니다.유형 작업 및 파이프라인에 대해 병렬로 작업 방식으로 생각하는 방법을 배웁니다.만약 내가 새로운 프로젝트를 만든다면 아마도 이런 방식으로 모델을 만들려고 할 것입니다.

우리는 Visual Studio에서 작업하는데 잘 작동합니다.원래는 linux/pthread용으로 작성되었으므로 거기에서도 잘 실행됩니다.

다른 팁

저는 수치 계산을 하지 않지만 데이터 마이닝(클러스터링 및 분류 등) 작업을 하며 작업 부하도 비슷할 것입니다.모든 데이터는 정적이며 프로그램 시작 부분에 있습니다.Intel의 TBB를 간략하게 조사한 결과 내 필요에 비해 과잉이라는 사실을 발견했습니다.원시 pthread 기반 코드로 시작한 후 OPENMP로 전환하여 가독성과 성능 간의 올바른 조합을 얻었습니다.

이식성

TBB는 휴대 가능합니다.Intel 및 AMD를 지원합니다(예:x86) 프로세서, IBM PowerPC 및 POWER 프로세서, ARM 프로세서 등이 있습니다.을 살펴보면 빌드 디렉토리, 광범위한 운영 체제(Linux, Windows, Android, MacOS, iOS, FreeBSD, AIX 등)와 컴파일러(GCC, Intel, Clang/LLVM, IBM)를 포함하여 빌드 시스템이 지원하는 모든 구성을 볼 수 있습니다. XL 등).나는 PGI C++ 컴파일러로 TBB를 시도한 적이 없으며 Cray C++ 컴파일러(2017년 현재)에서는 작동하지 않는다는 것을 알고 있습니다.

몇 년 전, 저는 TBB를 IBM Blue Gene 시스템으로 포팅하려는 노력에 참여했습니다.정적 연결은 어려운 문제였지만 이제는 big_iron.inc 시스템 도우미를 빌드합니다.다른 문제는 상대적으로 오래된 GCC 버전(4.1 및 4.4)을 지원하고 PowerPC 원자가 작동하는지 확인하는 것이었습니다.현재 지원되지 않는 아키텍처로의 포팅은 GCC 및 POSIX를 제공하거나 호환되는 플랫폼에서 비교적 간단할 것으로 예상됩니다.

커뮤니티 코드에서의 사용법

나는 TBB를 사용하는 HPC 애플리케이션 프레임워크를 두 개 이상 알고 있습니다.

MOOSE가 TBB를 어떻게 사용하는지 모르겠지만 MADNESS는 작업 대기열과 메모리 할당자로 TBB를 사용합니다.

성능과 다른 스레딩 모델 비교

나는 개인적으로 TBB를 사용해 본 적이 있다. 병렬 연구 커널 프로젝트 내에서 TBB를 OpenMP, OpenCL, Kokkos, RAJA, C++17 Parallel STL 및 기타 모델과 비교했습니다.참조 C++ 하위 디렉터리 자세한 내용은.

다음 그림은 Intel Xeon Phi 7250 프로세서에서 앞서 언급한 모델의 상대적 성능을 보여줍니다(세부 사항은 중요하지 않습니다. 모든 모델이 동일한 설정을 사용했습니다).보시다시피 TBB는 적응형 스케줄링의 오버헤드가 더 관련이 있는 작은 문제 크기를 제외하고는 꽤 잘 수행됩니다.TBB에는 이러한 결과에 영향을 미치는 튜닝 손잡이가 있습니다.

PRK stencil

전체 공개:저는 인텔에서 연구/탐색 업무를 담당하고 있습니다.

나는 TBB를 잠깐 사용했고, 앞으로는 더 많이 사용할 것 같다.나는 그것을 사용하는 것을 좋아했는데, 가장 중요한 것은 C++의 매크로/확장을 다룰 필요가 없고 언어 내에 남아 있기 때문입니다.또한 꽤 휴대하기 좋습니다.나는 Windows와 Linux 모두에서 그것을 사용했습니다.하지만 한 가지:TBB를 사용하여 스레드로 작업하는 것은 어렵습니다. 작업 측면에서 생각해야 합니다(실제로는 좋은 것입니다).Intel TBB는 기본 잠금 장치 사용을 지원하지 않습니다(이 작업을 지루하게 만듭니다).그러나 전반적으로 이것은 나의 예비 경험입니다.

또한 openMP 3도 살펴보는 것이 좋습니다.

ZThread는 LGPL이므로 오픈 소스 프로젝트에서 작업하지 않는 경우 동적 연결에서 라이브러리를 사용하도록 제한됩니다.

오픈 소스 버전의 TBB(Threading Building Blocks)(새로운 상용 버전인 $299가 있으며 아직 차이점을 알지 못함)는 소위 "런타임 예외"가 포함된 GNU General Public License 버전 2입니다. (이는 자유 소프트웨어를 만드는 경우에만 사용됩니다.)LGPL에 접근하려고 시도하지만 상업적 사용을 가능하게 하고 이를 정적으로 연결하는 다른 런타임 예외를 본 적이 있습니다. 아니다 지금은 경우.

내가 이 글을 쓰는 이유는 라이브러리 라이센스를 조사할 기회를 얻었고 라이브러리 라이센스를 제공하려는 용도에 따라 선택하는 것도 고려해야 하기 때문입니다.


이번 업데이트를 지적해주신 진님, Txs..

나는 TBB를 살펴봤지만 프로젝트에서 사용한 적이 없습니다.나는 (내 목적에 따라) 장점을 보지 못했습니다. Z스레드.간략하고 다소 오래된 개요를 찾을 수 있습니다. 여기.

이는 여러 스레드 디스패치 옵션, 모든 일반적인 동기화 클래스 및 매우 편리한 예외 기반 스레드 "인터럽트" 메커니즘으로 상당히 완성되었습니다.쉽게 확장 가능하고 잘 작성되었으며 문서화되어 있습니다.저는 20개 이상의 프로젝트에서 이 제품을 사용했습니다.
또한 Windows뿐만 아니라 POSIX 스레드를 지원하는 모든 *NIX에서도 잘 작동합니다.

볼만한 가치가 있습니다.

한 프로젝트에서 TBB를 사용합니다.스레드보다 사용하기 쉬운 것 같았습니다.병렬로 실행할 수 있는 작업이 있습니다.작업은 병렬화된 서브루틴에 대한 호출일 뿐입니다.로드 밸런싱은 자동으로 수행됩니다.그렇기 때문에 나는 그것을 더 높은 수준의 병렬화 라이브러리로 받아들입니다.4코어 인텔 프로세서에서 별다른 작업 없이 2.5배의 속도 향상을 달성했습니다.예가 있고 포럼에서 질문에 답변하며 유지 관리되며 무료입니다.

다른 대안(예:C++ 11x 동시성 기능).TBB는 이식 가능하고 확장 가능한 라이브러리(컴파일러 확장 아님)로, TBB가 사용 가능한 CPU 리소스에서 최대한 빠르게 실행되도록 예약하는 경량 작업 형식으로 코드를 작성할 수 있습니다.다른 목적으로 스레딩을 지원하도록 설계되지 않았습니다(예:선매).

저는 이미지 스캔 라인에 대한 for 루프의 기존 이미지 처리 속도를 Parallel_for 루프('그레인' 크기로 최소 2-4개의 스캔 라인)로 가속화하기 위해 TBB를 사용했습니다.이것은 매우 성공적이었습니다.각 루프 본문이 순차적으로 처리된다고 가정하는 대신 임의의 인덱스를 처리하려면 루프 본문을 (재)작성해야 합니다(예:각 루프 반복 사이에 증가되는 포인터).

업데이트할 공유 저장소가 없었기 때문에 이는 매우 사소한 경우였습니다.더욱 강력한 기능(예:파이프라인)은 기존 코드를 크게 재구성하거나 다시 작성해야 하므로 아마도 새 코드에 더 적합할 것입니다.

이 TBB 기반 코드는 이식성이 유지되고, 다른 스레딩 전략을 동시에 사용하여 동일한 프로세스의 다른 곳에서 다른 코드를 방해하지 않으며 나중에 더 높거나 낮은 수준(예:TBB 병렬_for 코드는 TBB 다중 처리 파이프라인의 필터에서 호출될 수 있습니다.

봤어? 후원 도서관이 있는 스레드 API?

오픈 소스 버전의 스레딩 빌딩 블록 (TBB) (새로운 상업용 버전, $ 299, 차이점을 알지 못함)은 소위 "런타임 예외"(즉)가있는 GNU 일반 공개 라이센스 버전 2입니다. 무료 소프트웨어 생성에만 사용하는 것만으로도 LGPL에 접근하려고 시도하지만 Comercial 사용 및 정적 연결을 가능하게하는 다른 런타임 예외를 보았습니다.

이에 따르면 질문 스레딩 빌딩 블록은 상업적 용도로 복사-왼쪽 제한 없이 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top