gpt4 book ai didi

OpenCV parallel_for 不使用多个处理器

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:54 28 4
gpt4 key购买 nike

我刚刚在新的 OpenCV 2.4.3 中看到他们添加了一个通用的 parallel_for。所以按照这个 example ,我尝试自己实现。我用我的代码实现了所有功能,但是当我对它的处理进行计时与使用常规“for”命令以典型的串行方式完成的类似循环相比时,结果明显更快,或者通常稍微慢一点!

我想这可能与我对向量的插入或其他东西有关(我是并行处理的一个非常大的菜鸟),所以我设置了一个测试循环来运行一个大数字,但它仍然没有'不工作。

代码:

class Parallel_Test : public cv::ParallelLoopBody
{
private:
double* const mypointer;



public:
Parallel_Test(double* pointer)
: mypointer(pointer){

}
void operator() (const Range& range) const
{
//This constructor needs to be here otherwise it is considered an abstract class.
// qDebug()<<"This should never be called";
}

void operator ()(const cv::BlockedRange& range) const
{

for (int x = range.begin(); x < range.end(); ++x){

mypointer[x]=x;

}


}



};


//TODO Loop pixels in parallel
double t = (double)getTickCount();

//TEST PARALELL LOOPING AT ALL
double data1[1000000];



cv::parallel_for(BlockedRange(0, 1000000), Parallel_Test(data1));

t = ((double)getTickCount() - t)/getTickFrequency();
qDebug() << "Parallel TEST time " << t << endl;


t = (double)getTickCount();

for(int i =0; i<1000000; i++){

data1[i]=i;
}
t = ((double)getTickCount() - t)/getTickFrequency();
qDebug() << "SERIAL Scan time " << t << endl;

输出:

Parallel TEST time  0.00415479 

SERIAL Scan time 0.00204597

最佳答案

哇!我找到了答案! “parallel_for”和“parallel_for_”(带下划线!)完全不同。您需要结尾的下划线才能使其正常工作!否则它只会连续运行你的循环,你将不得不使用 BLOCKEDRANGE 而不是范围!啊!

感谢@Daniil Osokin,尤其是@Vladislav Vinogradov 指出了这一点!

所以你的代码需要看起来像这样: cv::parallel_for_(Range(0, 1000000), Parallel_Test(data1));

更多更新详情:http://answers.opencv.org/question/3730/how-to-use-parallel_for/

关于OpenCV parallel_for 不使用多个处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13736634/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com