【发布时间】:2010-11-05 09:46:30
【问题描述】:
我们正在为 Windows 平台开发一些东西,我们希望利用当今 PC 中存在的多个内核。
我知道在 VS2010 中有Concurrency Runtime。不过,它仍处于测试阶段。与此同时,我们现在确实需要发布高质量的代码,对于允许以后平滑过渡的 API 来说,什么是一个不错的选择。其他建议?
【问题讨论】:
标签: c windows api parallel-processing
我们正在为 Windows 平台开发一些东西,我们希望利用当今 PC 中存在的多个内核。
我知道在 VS2010 中有Concurrency Runtime。不过,它仍处于测试阶段。与此同时,我们现在确实需要发布高质量的代码,对于允许以后平滑过渡的 API 来说,什么是一个不错的选择。其他建议?
【问题讨论】:
标签: c windows api parallel-processing
英特尔的线程构建块库有一个并行任务系统,它与并发运行时(在高层次上)类似。 API 细节会有所不同,但您将程序分解为独立运行的小任务的工作将继续存在。
【讨论】:
我一直很喜欢 pthread。它可以很好地映射到我遇到的其他线程模型,并且我发现它相对易于编程(与 MPI 相比)。
但是,它没有并发运行时那么高级。
我也听说过一些关于 OpenMP 的噪音,但还没有调查过。
【讨论】:
我建议在等待时使用OpenMP。它适用于大多数编译器,相对容易添加到现有代码中,并在以后与其他 API 一起使用。
【讨论】:
我知道:
我会推荐英特尔线程构建模块,因为它比大多数其他多线程 API 的抽象级别更高。它也是开源的,因此您可以下载并查看其中一些内容是如何完成的。即将发布的版本旨在使用 Windows 并发运行时(如果可用)。我还了解到英特尔已提交 TBB 以纳入 C++ 标准。
pthreads 和 Win32 API 是较低级别的原语,需要您更好地理解多线程环境。如果您知道自己在做什么,这些工具可为您提供最大的控制权。
我还没有使用新的 c++ 线程支持,但它们看起来与 pthread 处于同一水平或更高一点。 Just Software 有一些有趣的articles 介绍如何使用新的 c++ 线程库。
我只阅读过有关 OpenMP 的文章,但我不确定它的用途。
您可能想阅读Joe Duffy's Concurrent Programming on Windows 的书。
Herb Sutter 也以有效并发为题发表了大量文章。
希望对您有所帮助。
【讨论】:
简短回答:聘请具有良好线程经验的程序员。
在多核上使用多线程很难。经验是无可替代的。
Visual C++(任何最新版本)具有开发并行软件的工具,但存在数据同步等复杂性,这对于没有经验的人来说非常棘手。并发运行时的东西试图隐藏复杂性并让编译器完成工作。它可能工作得很好,但陪审团仍然没有。目前,您可以使用现有工具获得良好的结果,但您需要专业知识。
考虑聘请一位优秀的承包商来帮助构建正确的架构并培训您自己的员工跟上进度。
【讨论】: