gpt4 book ai didi

c++ - 如何为 parallel_invoke 设置进度条?

转载 作者:太空宇宙 更新时间:2023-11-04 14:04:02 24 4
gpt4 key购买 nike

我要的是如何获取进度数据。我可以随心所欲地实现酒吧。而且我使用的是 Visual C++ 2010,所以我可以使用 MFC。

现在,我正在编写多线程程序。自 VC++ 2010 以来,Microsoft 已经提供了 PPL 库。并行模式库 (PPL) 提供了在数据集合上并发执行工作的算法。实现多线程app很方便,但是遇到进度条问题。

如何为 parallel_invoke 设置进度条?

演示代码如下:

// parallel-invoke-structure.cpp 
// compile with: /EHsc
#include <ppl.h>
#include <string>
#include <iostream>

using namespace concurrency;
using namespace std;

// Returns the result of adding a value to itself.
template <typename T>
T twice(const T& t) {
return t + t;
}

int wmain()
{
// Define several values.
int n = 54;
double d = 5.6;
wstring s = L"Hello";

// Call the twice function on each value concurrently.
parallel_invoke(
[&n] { n = twice(n); },
[&d] { d = twice(d); },
[&s] { s = twice(s); }
);

// Print the values to the console.
wcout << n << L' ' << d << L' ' << s << endl;
}

最佳答案

也许这是题外话,但我建议您查看 Cilk而不是 PPL。

这里是 a course at MIT (来自 Cilk 的主要创建者之一)概述了它的优点、缺点和具体用法。它非常易于使用,并且声称其性能比 PPL 高得多(以防您担心这一点)。

至于您关于进度条的具体问题,得出百分比是首要任务。如果你使用计时器来映射哪些工作花费了你多少(根据挂钟时间),你可以使用它(通过每个 worker 的回调来注册完成的工作)来驱动百分比。一旦你降低了百分比,将它连接到一个栏(在 shell 中)或 GUI 进度条就很简单了。

根据工作进程的工作量(它们的粒度),您可能需要考虑不同的 instrumentation 方法。 .如果你看this wikipedia page ,它将概述多种类型的分析(统计、基于事件等)。

最后一点:我发现进度条很难正确设置。任何人都可以移动酒吧。但是,要让它准确地代表需要多少时间的真实指示,就需要深入了解哪些因素会影响您的表现。与任何计算机程序一样,您的性能会根据运行它的系统(cpu 架构、IO 带宽、网络带宽)而改变。因此,即使您在盒子上可以预测它,您客户的盒子也可能会截然不同——如此之大以至于您的进度条不再产生良好的指示。

希望对您有所帮助...

关于c++ - 如何为 parallel_invoke 设置进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17806261/

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