我有一个 C# 原型,它是大量数据并行的,并且我使用 .NETv4 中的 Parallel.For 构造实现了非常成功的数量级加速。现在我需要用本机代码编写程序,我想知道我的选择是什么。我更喜欢在各种操作系统和编译器之间具有某种可移植性的东西,但是如果迫在眉睫,我可以使用 Windows/VC++ 的东西。
我看过 OpenMP,它看起来很有趣,但我不知道这是否被其他程序员视为一个好的解决方案。我也喜欢我可以查看的其他便携式库的建议。
我有一个 C# 原型,它是大量数据并行的,并且我使用 .NETv4 中的 Parallel.For 构造实现了非常成功的数量级加速。现在我需要用本机代码编写程序,我想知道我的选择是什么。我更喜欢在各种操作系统和编译器之间具有某种可移植性的东西,但是如果迫在眉睫,我可以使用 Windows/VC++ 的东西。
我看过 OpenMP,它看起来很有趣,但我不知道这是否被其他程序员视为一个好的解决方案。我也喜欢我可以查看的其他便携式库的建议。
您应该查看英特尔的线程构建模块。Visual Studio 2010 还提供了本机并发运行时。.NET 4.0 库和 ConcRT 的设计非常相似,如果不相同的话。
如果您在 .Net 4.0 中使用 Parallel.For,您还应该查看 VS2010 for C++ 中的并行模式库;许多事情都是相似的,它是基于库的。
如果您需要在 Windows 之外的其他平台上运行,PPL 也在英特尔的 Thread Building Blocks 中实现,该模块具有开源版本。
关于与 .Net 4.0 的相似/差异的其他评论,PPL 中的并行循环(parallel_for、parallel_for_each、parallel_invoke)实际上与 .Net 4.0 循环相同。任务模型略有不同,但应该很简单。
如果您想要通用的东西,例如在各种操作系统和环境中可移植,那么很难不考虑 Java。而且它们与 C# 非常相似,因此转换非常容易。
除非你想拔出你的忍者手术刀并想让你的代码非常高效,否则我会说 java over VC++ 或 C++。