多线程C ++ 11中的多个短任务会减慢该过程吗?

时间:2018-10-17 19:26:52

标签: multithreading c++11

当涉及多线程时,我并没有真正的经验。我有一个面部标志检测器,可以检测面部组件周围的68个标志。对于每个周围的地标HoG特征,都需要提取它并附加到以前的地标特征上,以在将其传递给回归器之前创建一个巨型矢量。

当前,所有功能都将依次提取,而我正尝试以并行方式提取它们,以加快流程。

在我的系统上,以SERIAL提取所有地标周围的要素大约需要2.5毫秒。当我尝试使用68个线程对其进行并行化时,提取所有地标周围的特征大约需要8.5ms。因此,它实际上减慢了进程的速度,我猜测这可能是由于线程初始化时间所致。

以下是串行的原始代码

for(int i = 0; i < 68; i++){   // for each landmark

    fx = shape[i];       // x position
    fy = shape[i + 68];  // y position

    extract_features(image, fx, fy, &features[i]);
}

现在这是我要做的并行化处理

vector<std::thread> threads;

for(int i = 0; i < 68; i++){   // for each landmark

    fx = shape[i];       // x position
    fy = shape[i + 68];  // y position

    threads.emplace_back( 
        [image, fx, fy, &] () { extract_features(image, fx, fy, &features[i]); } 
    );  
}

for(int x  = 0; x < 68; x++)
    threads[x].join();

我应该做错了什么,这会减慢进程,而不是加快进程。我最好的猜测是,按照我自己的方式初始化线程比任务本身更耗时。如果是这样,有没有办法我可以初始化线程并仅在for循环中运行它们?

非常感谢您的帮助,以指导我找到适合该项目的方法。

谢谢

0 个答案:

没有答案