parallel_for ppl.h并不比顺序c ++快

时间:2016-10-03 14:42:12

标签: c++ parallel-processing ppl

我有这样的代码(伪代码,因为我无法显示我的程序):

concurrent_vector a, b, c;
concurrent_unordered_map mapForResult;

for(i=0; i<sequenceCount; i++){
  variables temp_a, temp_b, temp_c;
  database->read(&a, &b, &c);
}

parallel_for(0, sequenceCount, [](int i){
  var aa = a[i];
  var bb = b[i];
  var cc = c[i];

  resultOfFunction = MakeFunction(aa, bb, cc);

  mapForResults.insert(resultOfFunction);
}, static_partitioner());

它正在运行,但它比顺序版慢得多。有什么想法吗?这是我第一次使用ppl.h,所以我不知道所有提示和技巧。

1 个答案:

答案 0 :(得分:0)

程序的每个并行版本都需要比单线程版本更多的指令。在设置线程和管理对共享数据的访问方面,这是一个不可避免的开销。这通常是有限的开销,当您有足够的可用内核时,额外的指令不会转化为额外的时间。简单地说,如果你有300%的额外核心,10%的开销并不是什么大问题。

在这种情况下,MakeFunction可能非常小。这意味着你确实会有很多开销,而你的额外内核会花费他们所有的时间来争夺mapForResults