我们正在为Windows平台开发一些东西,我们现在想利用PC中的多核心。
我知道在VS2010中,有并发运行时 。 尽pipe如此,它仍然处于testing阶段。 与此同时,我们确实需要现在发布高质量的代码,对于一个允许以后平滑过渡的API来说,一个好的select是什么。 其他build议?
我知道:
我会推荐英特尔线程构建模块,因为它是大多数其他多线程API的抽象层次。 这也是开源的,所以你可以下载,看看如何做一些东西。 upcomming版本是为了使用Windows并发运行时如果可用。 我还看过英特尔已经提交了TBB以包含在C ++标准中。
pthreads和Win32 API是较低级别的原语,要求您更好地理解多线程环境。 如果你知道你在做什么,这些工具给你最大的控制。
我还没有使用新的c ++线程支持,但他们看起来与pthread相同或更高一些。 Just Software有一些关于如何使用新的c ++线程库的有趣的文章 。
我只读过关于OpenMP,我不确定使用什么样的。
您可能会喜欢阅读Joe Duffy的 “Windows并发编程”一书。
Herb Sutter还在标题Effective Concurrency下发表了许多文章。
希望有所帮助。
我建议在等待的时候使用OpenMP 。 它适用于大多数编译器,比较容易添加到现有的代码中,并稍后用于其他API。
英特尔的线程构建模块库具有与并发运行时相似(高级别)的并行任务系统。 API细节将有所不同,但是您将程序分解为独立运行的小任务的工作将继续进行。
我一直喜欢pthreads。 它很好地映射到我遇到的其他线程模型,我发现编程相对容易(与MPI相比)。
但是,它不像并发运行时那样高。
我也听说过关于OpenMP的一些噪音,但是没有仔细研究过。
简短的回答:聘请一个具有良好的线程经验的程序员。
在多核上使用多线程是很困难的。 经验无可替代。
Visual C ++(任何最新版本)都有用于开发并行软件的工具,但是像数据同步这样的复杂性对于缺乏经验的人来说非常棘手。 并发运行时的东西是试图隐藏的复杂性,让编译器做的工作。 它可能工作得很好,但陪审团仍然没有。 目前,使用现有的工具可以获得良好的结果,但是您需要专业知识。
考虑聘请一个好的承包商,以帮助建立正确的架构,并培训自己的员工加快速度。