- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在tbb::parallel_for_each
中深入运行task_group
。 task_group
被取消,这似乎导致tbb::parallel_for_each
在不满足其后置条件的情况下退出。这是最小的测试用例:
tbb::task_group g;
std::vector<int> x { 0, 0, 0, 0 };
std::atomic<std::size_t> counter {0};
g.run([&x, &counter]() {
std::cout << "in run()\n" << std::flush;
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::cout << "in run(): slept\n" << std::flush;
assert(tbb::task::self().is_cancelled());
tbb::parallel_for_each(x, [&counter](int& y) {
std::cout << "in run(): in parallel_for_each\n" << std::flush;
++y;
++counter;
});
assert(counter == x.size());
});
std::cout << "canceling\n" << std::flush;
g.cancel();
std::cout << "canceled " << g.is_canceling() << " " << tbb::task::self().is_cancelled() << std::endl;
assert(g.is_canceling());
std::cout << "canceled " << g.is_canceling() << " " << tbb::task::self().is_cancelled() << std::endl;
g.wait();
std::cout << "canceled " << g.is_canceling() << " " << tbb::task::self().is_cancelled() << std::endl;
tbb::task_group
调用
run
。它计算循环执行的迭代次数。然后
cancel()
任务组。输出是
canceling
in run()
canceled 1 0
canceled 1 0
in run(): slept
Assertion failed: (counter == x.size()), function operator(), file test.cpp
tbb::parallel_for_each
的调用没有异常(exception)地退出了,但是它的后置条件(执行循环)没有被满足!
tbb::task::self().is_cancelled()
之后检查tbb::parallel_for_each
? tbb::parallel_for_each
是否不应该引发异常(或至少返回bool
)? tbb::task_group_context root(tbb::task_group_context::isolated);
tbb::parallel_for_each(x, [&counter](int& y) {
std::cout << "in run(): in parallel_for_each\n" << std::flush;
++y;
++counter;
}, root);
tbb::parallel_for_each
来完成其工作。
最佳答案
在任务组中,对tbb::parallel_for_each
的调用从属于任务组的上下文。
取消该任务组将取消它以及所有下级任务组。我找不到在文档“下级任务组”中定义的位置,但它似乎是“任务树”中该组下的组。
取消的tbb::parallel_for_each
不能保证其所有迭代都已完成。没有违反发布条件。
您取消了任务组,该任务组取消了从属tbb::parallel_for_each
的隐式任务组,因此它不执行任何操作。
隔离的上下文可防止取消传播到每个任务组的并行操作中。您可以通过在调用root
之前取消parallel_for_each
来在该代码中复制效果。
关于c++ - tbb::parallel_for_each取消时未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59846340/
我正在尝试使用 C++ AMP,但出于某种原因,最简单的代码无法编译。这: concurrency::extent e(2,2); concurrency::parallel_for_each(gri
我非常是 AMP C++ 的新手。如果我在“parallel_for_each”函数中使用“memcpy”,一切正常,但我知道这不是最佳做法。我尝试使用“copy_to”,但它引发了异常。下面是一个简
我一直在研究并行循环 (C++11) 并使用 MS visual studio 2013 对其进行测试。我很清楚它们(尤其是 lambdas),它们非常酷。 但我担心的是我必须调用一个函数来执行简单的
我有一个很大的项目 vector ,这些项目是根据它们的一个字段排序的,例如一个成本属性,我想对这些项目中的每一个进行一些处理以找到不同属性的最大值......这里的约束是如果该项目的成本超过,我们不
我认为,由于 std::bind 无法推断返回类型的问题,我当前的尝试无法编译。实际的错误信息是 1>Source.cpp(24): error C2783: 'enable_if::value,st
这是我用于 TBB 代码的原子计数器类。 #include template struct AtomicCounter { private: std::atomic value; std::ato
我正在转换算法以利用 C++ AMP 提供的巨大加速。我所处的阶段是将 for 循环放入已知的 parallel_for_each 循环中。 通常这应该是一项简单的任务,但它看起来比我最初想象的要复杂
如果我有一个 concurrency::array_view 在 concurrency::parallel_for_each 循环中运行,我的理解是我可以在 CPU 上继续其他任务,同时循环正在执行
最近我写了一个这样的函数: #include "amp.h" #define DLLExport __declspec(dllexport) using namespace concurrency;
我目前正在编写一个库,我希望能够允许用户定义一个函数(声明为restrict(amp))并允许他们传递这个函数在 concurrency::parallel_for_each 循环中使用我的库函数之一
parallel_for_each 的形式是: Concurrency::parallel_for_each(start_iterator, end_iterator, function_object
尝试以下代码时: Concurrency::concurrent_vector results_temp; std::set temp; Concurr
使用 Visual Studio 2010 SP1 所以我有一个 std::for_each 使用 boost::filesystem 库迭代大量文件。因为这些迭代不会相互混淆,所以我试图让多线程处理
我用c++ amp计算了这个值。环境:VS2015,Win8。 当运行 parallel_for_each 函数时,值为 NaN。原因是 concurrency::fast_math::tanh 函数
我是一名优秀的程序员,十分优秀!