- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我刚刚在新的 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/
要并行执行一个循环,我正在使用: int testValues[16]={5,2,2,10,4,4,2,100,5,2,4,3,29,4,1,52}; parallel_for (1, 100, 1,
我有 3 次嵌套循环,而与最内层循环相比,两个外部循环只循环了很少的次数。像这样: for (int i = 0; i < I; i++) { for (int j = 0; j <
我正在尝试学习如何使用 TBB,因此我正在修改我发现的示例程序,该程序旨在计算复数数组的幂。最初,它是将一个数组传递到 parallel_for 循环中,但我试图对其进行更改,以便它传递一个 vect
我刚刚在新的 OpenCV 2.4.3 中看到他们添加了一个通用的 parallel_for。所以按照这个 example ,我尝试自己实现。我用我的代码实现了所有功能,但是当我对它的处理进行计时与使
我是 C++ 的新手,因此如果这是一个愚蠢的问题请原谅,但我没有在互联网上找到我正在寻找的很好的例子。 基本上,我使用 parallel_for 循环来查找 2D 数组中的最大值(以及其间的一系列其他
我已经使用opencv人脸检测器编写了多 View 人脸检测代码。我在一个图像上运行五个检测器(针对不同的姿势 Angular 进行训练),然后权重检测图像中的人脸。我已经使用TBB parallel
我正在尝试学习一些关于 TBB 的知识,但我怀疑我无法解决它。 Afaik,TBB 使用线程池,因此它不需要一直创建线程。如果你使用 tbb::parallel_for,它是使用这个线程池还是创建新线
我正在制作一个简单的 native MFC 应用程序,我正在使用并发命名空间来执行一个简单的并行程序(绘制一个 Mandelbrot 集)。到目前为止,该程序非常基础,单击一个按钮并行绘制,另一个按钮
我对并行循环中的局部值和更新全局变量有疑问。 例如,在伪代码中:我在一个很长的 vector 中搜索最大值。我可以像这样循环执行: int max; for(i ...) { if (max
我一直在研究并行循环 (C++11) 并使用 MS visual studio 2013 对其进行测试。我很清楚它们(尤其是 lambdas),它们非常酷。 但我担心的是我必须调用一个函数来执行简单的
我有一段代码,我正在使用 tbb::parallel_for 对一个循环进行多线程处理,该循环由主线程调用。在那个循环中,我需要主线程来更新 UI 以反射(reflect)进度。据我观察,tbb::p
我想使用 TBB parallel_for 我已将其添加到我的代码中进行测试 #include #include #include std::vector> commands; auto n =
我最初有一个单线程循环,它遍历图像的所有像素,并且可以对数据进行各种操作。 我使用的库规定从图像中检索像素必须一次一行完成。为此,我 malloc 一个内存块,它可以容纳一行像素(BMM_Color_
摆脱 parallel_for 的最有效方法是什么?为了摆脱标准的 for 循环,我们执行以下操作: for(int i = 0; i < 100; i+) { bool bValue = D
我有一个数据集,我想以 interval_size 大小的间隔使用 tbb::parallel_for。我的仿函数消耗的每个区间都应该是 interval_size,最后一个部分区间除外,当 inte
我刚刚学会了如何并行使用一个函数。以下代码行计算索引的平方值并将其放入数组(称为平方)中的该索引处。 parallel_for 函数在 Visual Studio 2010 中可用,作为标题下并发命名
我使用 OpenMP (OMP) 并行化 for 循环。但是,OMP 似乎会将我的 for 循环划分为相等的间隔大小,例如 for( int i = 0; i < n; ++i ) { ... }
如何限制使用的线程数 Concurrency::parallel_for(0, 100, 1, [&](int k) 我看到了调度程序/任务的想法,我没有在并行内部使用它,因为有很多逻辑,我需要传递参
我有一个像这样的模板可变函数需要与 TBB 并行化 parallel_for功能 template void func(T1 t1, T2 t2, std::size_t n, T3... t3) 我
我有一个 for 循环,我想将其转换为 parallel_for fnc 调用。我的代码满足此转换成功的所有条件(在 Parallel_Programming_with_Microsoft_Visua
我是一名优秀的程序员,十分优秀!