Windows下的C/C++并行API

3
我们正在为Windows平台开发一些东西,希望能利用现今PC中的多个核心。我知道在VS2010中有并发运行时,但它仍处于测试版。目前我们需要发布高质量的代码,有没有其他API可以提供良好的过渡方案?还有其他建议吗?
5个回答

2

我建议在等待时使用OpenMP。它适用于大多数编译器,相对容易添加到现有代码中,并且稍后可以与其他API一起使用。


2
我知道以下内容:
  • Intel线程构建块库(开源)
  • C++0x线程库支持(跨平台,将来有可能实现)
  • Just Software的C++0x线程库实现 - 允许您在VS 2008中提前使用新的C++线程库。
  • OpenMP - 大多数C++编译器都内置了它,包括VS 2008。
  • pthreads for win32 - POSIX线程,因此对于任何POSIX兼容的操作系统都是跨平台的。
  • WIN32线程API
我建议使用Intel Thread Building Blocks,因为它比大多数其他多线程API更高级抽象。它也是开源的,所以你可以下载并查看一些东西是如何完成的。即将推出的版本意味着如果可用,将使用Windows Concurrency Runtime。我还读到Intel已经提交了TBB以纳入C++标准。 pthreads和Win32 API是较低级别的基元,需要您更好地理解多线程环境。如果您知道自己在做什么,这些工具会给您最大的控制权。
我还没有使用过新的c++线程支持,但它们看起来与pthread相同或略高。Just Software有一些有趣的文章,介绍如何使用新的c++线程库。
我只是听说过OpenMP,不确定如何使用。
你可能会喜欢阅读乔·达菲《Windows并发编程》一书。 Herb Sutter也在标题为“Effective Concurrency”下发布了许多文章。
希望这能帮到你。

1

英特尔的线程构建块库具有类似于并发运行时的并行任务系统(在高层次上)。API细节可能会有所不同,但将程序分解为独立运行的小任务所需的工作将保持不变。


您可以在http://www.threadingbuildingblocks.org/了解有关Thread Building Block库的更多信息。请注意,它是一个C++库,因此如果您想从C代码中使用它,您可能需要选择pthreads或OpenMP。 - garethm

1

我一直喜欢使用pthread,它很好地映射到我遇到的其他线程模型,并且相对容易编程(与MPI相比)。

然而,它不像并发运行时那样高级。

我也听说过OpenMP,但还没有深入了解。


您可以在http://sourceware.org/pthreads-win32/了解有关Windows下的pthread更多信息。 - garethm

1

简短回答:雇佣一位有良好线程经验的程序员。

在多核上使用多线程是很困难的。没有经验是无法替代的。

Visual C++(任何最新版本)都有开发并行软件的工具,但是存在数据同步等复杂性问题,对于缺乏经验的人来说非常棘手。并发运行时是试图隐藏复杂性并让编译器完成工作的尝试。它可能非常有效,但仍有待评估。目前,您可以使用现有工具获得良好的结果,但需要专业知识。

考虑雇佣一位优秀的承包商来帮助确定架构并培训您自己的员工。


嗨!非常抱歉给您留下了第一次进行多线程的错误印象。我的问题更多是关于使用哪个API/架构来“未来证明”。我们是承包商。 - moogs
在这种情况下,我的回答是还没有“未来可靠”的解决方案。VS10可能会成为其中之一,但前提是它已经成熟了。使用beta版的风险非常大。下一个C++标准将具有一些并行处理功能,但仍然有点低级。我建议使用_beginthread()或CreateThread()。使用关键部分、互斥量、信号量和事件。这仍然需要很多工作,但至少你不用担心别人的错误。一个好的API将会出现,但它可能需要两年才能成熟。 - Michael J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接