这是我对英特尔 TBB 流图性能进行基准测试的尝试。这是设置:
- 一个广播节点发送
continue_msg
到N
后继节点
( abroadcast_node<continue_msg>
) - 每个后继节点执行需要
t
几秒钟的计算。 - 串行执行时的总计算时间为
Tserial = N * t
- 如果使用所有内核,理想的计算时间是
Tpar(ideal) = N * t / C
,其中C
是内核数。 - 加速比定义为
Tpar(actual) / Tserial
- 我在 16 核 PC 上使用 gcc5 测试了代码。
以下是显示加速作为单个任务(即主体)处理时间的函数的结果:
t = 100 microsecond , speed-up = 14
t = 10 microsecond , speed-up = 7
t = 1 microsecond , speed-up = 1
与轻量级任务(其计算时间不到 1 微秒)一样,并行代码实际上比串行代码慢。
以下是我的问题:
1 ) 这些结果是否符合英特尔 TBB 基准?
2 ) 当有数千个任务每个花费不到 1 微秒的时间时,是否有比流程图更好的范例?