问题标签 [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.
c++ - 使用 C++ API 进行多线程
我正在尝试使用 OpenMP 并行我的程序,有时我觉得我走到了死胡同。
我想在我在类中定义(和初始化)的函数成员中共享变量。如果我理解正确,则不可能对类#pragma omp parallel shared(foo)
的数据成员(例如int
,boost::multi_array
和std::vector
)进行处理。例如:在类中的向量数据成员上使用 push_back()。更新 a 的值boost::multi_array
。
我的问题是 OpenMP 是否适合它,或者我应该使用 boost::thread 还是 tbb?或其他...什么支持 C++ API
回复
c++ - 学习英特尔的 TBB
谁能推荐关于英特尔线程库以及如何使用它的好书?
c++ - C++ 中的 TBB concurrent_bounded 队列和同步
我正在使用 TBB concurrent_bounded_queue,因为这个类允许我们使用 pop,如果没有可用的元素,它会被阻止。队列的默认大小是多少?我也读过一本书,而不是使用 concurrent_bounded_queue 使用 parallel_while 或管道,这些将如何帮助我们代替 concurrent_bounded 队列?谁能举例说明如何使用paralle_while或管道在两个线程之间同步共享数据?
谢谢!
c++ - 英特尔 TBB 并行化开销
为什么英特尔线程构建模块 (TBB)parallel_for
的开销如此之大?根据第 3.2.2 节Automatic ChunkingTutorial.pdf
大约半毫秒。这是教程中的一个尝试:
注意:通常一个循环需要至少一百万个时钟周期才能使 parallel_for 提高其性能。例如,在 2 GHz 处理器上花费至少 500 微秒的循环可能会受益于 parallel_for。
从我目前所读到的内容来看,TBB 在内部使用线程池(工作线程池)模式,它通过最初只产生工作线程一次(花费数百微秒)来防止这种糟糕的开销。
那么什么是花时间呢?使用互斥锁的数据同步不是那么慢吗?此外,TBB 不使用无锁数据结构进行同步吗?
c++ - 避免线程本地存储开销(使 ffmpeg YADIF 可扩展)
我正在尝试创建一个小的 ffmpeg “hack”,它可以并行执行 yadif 过滤器。
我想我已经找到了一个解决方案,但是它只能有一个并发实例。这是因为“scalable_yadif_context”是函数“scalable_yadif_filter_line1”的局部变量,它替换了原始的yadif“filter_line”函数。我可以使“scalable_yadif_context”线程成为本地线程,但是由于经常调用此函数,因此开销会很大。
关于如何解决这个问题的任何想法?
我创建了一个极其丑陋的解决方案,最多可用于 18 个并发实例。
c++ - 关于 C++ 中的条件变量
我正在以下位置浏览条件变量文章
我的理解是我们使用条件变量来等待事件。我有以下问题
- 为什么我们在使用条件变量时在这里使用互斥锁?
- 在while循环中的消费者()函数中,我们正在使用互斥锁并在条件下等待,如果消费者已经使用了互斥锁,生产者函数如何锁定它,它如何通知它不是死锁?
- unique_lock 与 scoped_lock 有何不同?
感谢您帮助澄清我的问题。
c++ - 使用 C++ 中的 TBB 使用静态函数生成线程
我想在 C++ 中使用 TBB 线程并想使用“tbb_thread”API。
例如,我在类中有静态函数,如下所示
我想使用 tbb_thread API 来生成一个带有“ThreadRoutineFunction”的线程,该线程在上面的类中定义。我如何使用 tbb_thread API 来实现这一点。请注意,我必须将指针传递给线程例程函数。谁能给我一个简单的例子如何做到这一点?
multithreading - OpenCL、待定、OpenMP
我在 OpenMP、TBB 和 OpenCL 中实现了一些正常的循环应用程序。在所有这些应用程序中,当我只在 CPU 上运行 OpeCL 而没有在内核中进行特定优化时,OpeCL 的性能也比其他应用程序好得多。OpenMP 和 TBB 也提供了良好的性能,但远低于 OpenCL,这可能是什么原因,因为它们都是 CPU 专用框架,并且应该至少提供与 OpenMP/TBB 相等的性能。
我的第二个担忧是,当涉及到 OpenMP 和 TBB 时,OpenMP 在我的实现中总是比 TBB 性能更好,因为我不是那么专家,所以我没有调整它以获得非常好的优化。OpenMP 在性能上通常比 TBB 更好是有原因的吗?因为我认为他们都甚至 OpenCL 也在低级别使用相同类型的线程池......任何专家意见?谢谢
boost - 英特尔 TBB 与 Boost
在我的新应用程序中,我可以灵活地决定将库用于多线程。到目前为止,我使用的是 pthread。现在想探索跨平台库。我在 TBB 和 Boost 上归零。我不明白 TBB 比 Boost 有什么好处。我试图找出 TBB 相对于 Boost 的优势:TBB Excerpts for wiki “相反,该库通过允许将操作视为“任务”来抽象对多个处理器的访问,这些操作由库的运行动态分配给各个内核- “
但是线程库甚至需要担心线程分配给内核。这不是操作系统的工作吗?那么使用 TBB 而不是 Boost 的真正好处是什么?
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位的。
依赖步行者的截图:
谢谢