TBB (Threading Building Blocks) 库简介

TBB(Threading Building Blocks)是一个由英特尔开发的C++并行编程库,专为多核处理器优化设计。它提供了高级抽象,使并行程序开发变得更简单和高效。

TBB的核心特性

  1. 任务并行模型:TBB使用任务而非线程作为并行的基本单位,自动管理工作分配

  2. 工作窃取调度:高效的负载均衡算法,当某些线程完成任务后可以"窃取"其他线程队列中的任务

  3. 并行算法:提供常用的并行模式实现

    #include <tbb/parallel_for.h>
    
    void processData(std::vector<Data>& data) {
      tbb::parallel_for(0, data.size(), [&](size_t i) {
        // 处理data[i]
        processItem(data[i]);
      });
    }
    
  4. 并发容器:线程安全的集合类

    #include <tbb/concurrent_vector.h>
    #include <tbb/concurrent_hash_map.h>
    
    tbb::concurrent_vector<Result> results;
    // 多个线程可以安全地同时向向量添加元素
    
  5. 流水线处理:支持多阶段数据处理流水线

    tbb::parallel_pipeline(
      max_tokens,
      tbb::make_filter<void, Data*>(tbb::filter::serial, inputFunc) &
      tbb::make_filter<Data*, ProcessedData*>(tbb::filter::parallel, processFunc) &
      tbb::make_filter<ProcessedData*, void>(tbb::filter::serial, outputFunc)
    );
    

与标准库的关系

  • TBB早于C++11标准库的线程支持
  • 比标准库提供更丰富的高级并行构造
  • C++17引入的并行算法与TBB概念相似,但TBB更全面

使用TBB的优势

  1. 简化并行代码:抽象掉手动线程管理的复杂性
  2. 自动负载均衡:通过工作窃取算法实现
  3. 可扩展性:能自动适应不同的处理器核心数量
  4. 性能优化:针对英特尔CPU进行特别优化,但在所有平台上都表现良好

在项目中集成TBB

  1. 安装:可以通过包管理器安装

    # Ubuntu/Debian
    apt-get install libtbb-dev
    
    # CentOS/RHEL
    yum install tbb-devel
    
    # macOS
    brew install tbb
    
  2. CMake集成:

    find_package(TBB REQUIRED)
    target_link_libraries(your_target PUBLIC TBB::tbb)
    

在人体检索系统中,TBB可以用于高效管理并行检索任务,特别是在需要处理大量数据并保持CPU核心高利用率的场景中。

tbb::parallel_pipeline具体用法