【发布时间】:2011-09-17 07:09:26
【问题描述】:
我是这种编程的新手,需要你的观点。
我必须构建一个应用程序,但我无法让它足够快地计算。我已经尝试过 Intel TBB,而且很好用,但是我没有使用过其他库。
在多处理器编程中,我正在阅读有关多线程的 OpenMP 和 Boost,但我不知道它们的优缺点。
在 C++ 中,与多处理器编程相比,多线程编程何时具有优势,反之亦然?哪一个最适合繁重的计算或启动许多任务...?当我们构建使用它们设计的应用程序时,它们的优缺点是什么?最后,哪个库最适合使用?
【问题讨论】:
-
在多处理器机器中使用像 boost 这样的线程库将利用可用的内核。您还可以在一个处理器上拥有多个线程,这些线程可以与 Pentium 4 中的超线程等技术交错。您的意思是多进程和分布式系统还是多线程?您实际上可以同时执行这两种操作,但线程的本质是获得并行性,而与处理器无关。据我所知,FYI boost 是基于 posix 线程的,我发现它很容易使用。此外,新的 C++0x 标准将包括该语言原生的线程支持。
-
您如何看待 Boost 和 Intel TBB?它比英特尔 TBB 快吗?或者如果我有英特尔处理器,我应该选择英特尔?
-
英特尔 TBB 在某些领域具有优势,它提供了优化的并行原语,如并行 for 循环等,有助于在英特尔处理器上创建并行分散-聚集式算法,以及其他并行计算。 Boost threads 主要是一个跨平台的线程包,可以在多种硬件和操作系统平台上运行。但是,如果您需要某些并行计算原语,Boost 线程不会直接提供,您必须自己编写代码。因此,您可以将 TBB 视为比 Boost 更高级别的抽象。
-
从未使用过英特尔 TBB,所以不能说,但您的性能主要取决于您的实施。我为跨平台性质选择了 boost,以便异步任务服务器可以分布在 linux 或 windows 机器上。我更喜欢 boost::thread 而不是 Windows 线程,或者 QThread 这是我使用过的唯一其他线程。 TBB wiki 文章使它听起来比 boost 更高级别,因此最初可能更容易实现,具体取决于您正在寻找的线程控制级别:en.wikipedia.org/wiki/Intel_Threading_Building_Blocks
-
一个重要的区别:当线程崩溃时,进程停止。当一个线程挂起时,要么进程停止,要么你杀死它,你必须担心内存的状态。这意味着多处理可以更加健壮。例如,对于服务器来说,至少有一个与实际执行的进程分开的监控/启动进程是“正常的”。
标签: c++ multithreading parallel-processing multiprocessing