问题标签 [tbb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
520 浏览

c++ - 使用 C++ API 进行多线程

我正在尝试使用 OpenMP 并行我的程序,有时我觉得我走到了死胡同。

我想在我在类中定义(和初始化)的函数成员中共享变量。如果我理解正确,则不可能对类#pragma omp parallel shared(foo)的数据成员(例如intboost::multi_arraystd::vector)进行处理。例如:在类中的向量数据成员上使用 push_back()。更新 a 的值boost::multi_array

我的问题是 OpenMP 是否适合它,或者我应该使用 boost::thread 还是 tbb?或其他...什么支持 C++ API

回复

0 投票
2 回答
1176 浏览

c++ - 学习英特尔的 TBB

谁能推荐关于英特尔线程库以及如何使用它的好书?

0 投票
1 回答
1480 浏览

c++ - C++ 中的 TBB concurrent_bounded 队列和同步

我正在使用 TBB concurrent_bounded_queue,因为这个类允许我们使用 pop,如果没有可用的元素,它会被阻止。队列的默认大小是多少?我也读过一本书,而不是使用 concurrent_bounded_queue 使用 parallel_while 或管道,这些将如何帮助我们代替 concurrent_bounded 队列?谁能举例说明如何使用paralle_while或管道在两个线程之间同步共享数据?

谢谢!

0 投票
1 回答
3660 浏览

c++ - 英特尔 TBB 并行化开销

为什么英特尔线程构建模块 (TBB)parallel_for的开销如此之大?根据第 3.2.2 节Automatic ChunkingTutorial.pdf大约半毫秒。这是教程中的一个尝试:

注意:通常一个循环需要至少一百万个时钟周期才能使 parallel_for 提高其性能。例如,在 2 GHz 处理器上花费至少 500 微秒的循环可能会受益于 parallel_for。

从我目前所读到的内容来看,TBB 在内部使用线程池(工作线程池)模式,它通过最初只产生工作线程一次(花费数百微秒)来防止这种糟糕的开销。

那么什么是花时间呢?使用互斥锁的数据同步不是那么慢吗?此外,TBB 不使用无数据结构进行同步吗?

0 投票
1 回答
748 浏览

c++ - 避免线程本地存储开销(使 ffmpeg YADIF 可扩展)

我正在尝试创建一个小的 ffmpeg “hack”,它可以并行执行 yadif 过滤器。

我想我已经找到了一个解决方案,但是它只能有一个并发实例。这是因为“scalable_yadif_context”是函数“scalable_yadif_filter_line1”的局部变量,它替换了原始的yadif“filter_line”函数。我可以使“scalable_yadif_context”线程成为本地线程,但是由于经常调用此函数,因此开销会很大。

关于如何解决这个问题的任何想法?

我创建了一个极其丑陋的解决方案,最多可用于 18 个并发实例。

0 投票
4 回答
2672 浏览

c++ - 关于 C++ 中的条件变量

我正在以下位置浏览条件变量文章

http://software.intel.com/en-us/blogs/2010/10/01/condition-variable-support-in-intel-threading-building-blocks/

我的理解是我们使用条件变量来等待事件。我有以下问题

  1. 为什么我们在使用条件变量时在这里使用互斥锁?
  2. 在while循环中的消费者()函数中,我们正在使用互斥锁并在条件下等待,如果消费者已经使用了互斥锁,生产者函数如何锁定它,它如何通知它不是死锁?
  3. unique_lock 与 scoped_lock 有何不同?

感谢您帮助澄清我的问题。

0 投票
1 回答
425 浏览

c++ - 使用 C++ 中的 TBB 使用静态函数生成线程

我想在 C++ 中使用 TBB 线程并想使用“tbb_thread”API。

例如,我在类中有静态函数,如下所示

我想使用 tbb_thread API 来生成一个带有“ThreadRoutineFunction”的线程,该线程在上面的类中定义。我如何使用 tbb_thread API 来实现这一点。请注意,我必须将指针传递给线程例程函数。谁能给我一个简单的例子如何做到这一点?

0 投票
3 回答
3217 浏览

multithreading - OpenCL、待定、OpenMP

我在 OpenMP、TBB 和 OpenCL 中实现了一些正常的循环应用程序。在所有这些应用程序中,当我只在 CPU 上运行 OpeCL 而没有在内核中进行特定优化时,OpeCL 的性能也比其他应用程序好得多。OpenMP 和 TBB 也提供了良好的性能,但远低于 OpenCL,这可能是什么原因,因为它们都是 CPU 专用框架,并且应该至少提供与 OpenMP/TBB 相等的性能。

我的第二个担忧是,当涉及到 OpenMP 和 TBB 时,OpenMP 在我的实现中总是比 TBB 性能更好,因为我不是那么专家,所以我没有调整它以获得非常好的优化。OpenMP 在性能上通常比 TBB 更好是有原因的吗?因为我认为他们都甚至 OpenCL 也在低级别使用相同类型的线程池......任何专家意见?谢谢

0 投票
2 回答
15000 浏览

boost - 英特尔 TBB 与 Boost

在我的新应用程序中,我可以灵活地决定将库用于多线程。到目前为止,我使用的是 pthread。现在想探索跨平台库。我在 TBB 和 Boost 上归零。我不明白 TBB 比 Boost 有什么好处。我试图找出 TBB 相对于 Boost 的优势:TBB Excerpts for wiki “相反,该库通过允许将操作视为“任务”来抽象对多个处理器的访问,这些操作由库的运行动态分配给各个内核- “

但是线程库甚至需要担心线程分配给内核。这不是操作系统的工作吗?那么使用 TBB 而不是 Boost 的真正好处是什么?

0 投票
3 回答
33273 浏览

visual-studio-2010 - C++ tbb_debug.dll 丢失

我是openCV的新手,我尝试遵循一些教程。一切正常,直到我包括在内:opencv2/imgproc/imgproc.hpp 并使用了 filter2D 函数。启动程序时出现以下错误:

“程序无法启动,因为您的计算机中缺少 tbb_debug.dll。”

在互联网上,我发现此错误与 32 位和 64 位版本的 dll 有关。

我正在使用 64 位版本的 windows 并在 VS2010 中创建了一个 32 位控制台应用程序,该应用程序使用了 32 位版本的 openCV dll。当我启动程序“dependency walker”时,我可以看到我的程序使用了所有系统 dll 的 64 位版本(在 C:\windows\system32....)。只有opencv的dll是32位的。

依赖步行者的截图:

在此处输入图像描述 谢谢