高性能计算--TBB

TBB简介

  TBB(Thread Building Blocks)是Intel发布的一个库,全称为Threading Building Blocks。如果你感觉很陌生,很正常,因为我也感觉很陌生,初次接触是在CGAL的示例中看到的,所以就了解下,TBB 曾获得过 17 届 Jolt Productivity Awards,看样子还是蛮厉害的。但是作为用户,我更关注的还是TBB的效率如何(因为是高性能计算,所以比较关注性能)以及是否容易入门并有效的提高自己算法的计算速度。
  在多核的计算机平台上开发或优化并行化的程序,能否更合理的利用系统资源是至关重要的,如线程的管理,缓存的使用等是否处于最佳状态。而TBB很好的解决了上述问题(重点还是在于使用者):

  • TBB提供C++模板库,用过只需要关注任务本身,而不必关注线程
  • 抽象层只提供了很少的接口,但性能依旧强大
  • 不受平台与编译器的制约,Linux或windows,Gcc或vs都可以
  • 接口层次明确,可以用最简单的,也可以用相对底层的

TBB库包含的内容

  TBB共包含了6个模块:Algorithms、Containers、Memory Allocation、Synchronization、Timing、Task Scheduling。其结构图为(盗取网上的,不要太介意):

高性能计算--TBB_第1张图片

TBB函数的使用

  关于TBB的资料太少了,着实找不出几个,结合使用过程,留个记录也便于后续学习研究。

tbb::parallel_for

for的并行化处理,对使用方式有些要求,使用方式为:

parallel_for(first, last, step, f)

表示一个循环的并行操作,相当于标准C/C++代码:

for(int i = first; i < last; i = i + step) 
{
    f(i);
}

在使用该函数时,需要注意以下几点:

  • 索引类型必须为整形
  • 步长为正
  • 循环不能形成回环

对于该函数,最大的目的就是并行化for循环,所以,在以目的为导向的实施过程中,会自动的忽略一些不常用的功能。例子:

#include 
#include 

void f(int i)
{
    std::cout << i << std::endl;
}

int main()
{
    tbb::parallel_for(0, 100, 1, f);
    //for(int i = 0; i < 100; i++) std::cout << i << std::endl;
    system("pause");
    return 0;
}

看完上面的例子,应该会有一点体会了吧,在某DN上也看过很多代码,但是太繁琐,需要理解,不如上述的直观。从我的视角看,该函数的执行需要实现将循环体写到一个函数中才可以,上述只是一个最简单的cout演示,若要修改数据,只能声明一个全局变量,该应用尚不能满足应用标准,后期会追加示例。

你可能感兴趣的:(c++,c,人工智能)