2

我有一个 C# 原型,它是大量数据并行的,并且我使用 .NETv4 中的 Parallel.For 构造实现了非常成功的数量级加速。现在我需要用本机代码编写程序,我想知道我的选择是什么。我更喜欢在各种操作系统和编译器之间具有某种可移植性的东西,但是如果迫在眉睫,我可以使用 Windows/VC++ 的东西。

我看过 OpenMP,它看起来很有趣,但我不知道这是否被其他程序员视为一个好的解决方案。我也喜欢我可以查看的其他便携式库的建议。

4

4 回答 4

2

如果您对从 Parallel.For 获得的并行度水平感到满意,那么 OpenMP 对您来说可能是一个相当不错的解决方案——它做的事情大致相同。标准库中算法的并行实现也正在进行工作和研究。大量使用标准算法的代码可以通过更少的工作从中获益。

其中一些是使用 OpenMP 完成的,而另一些则是使用手写代码来(尝试)提供更大的好处。从长远来看,我们可能会看到更多后者,但就目前而言,OpenMP 路线可能更实用一些。

于 2010-06-04T22:35:53.013 回答
1

您应该查看英特尔的线程构建模块。Visual Studio 2010 还提供了本机并发运行时。.NET 4.0 库和 ConcRT 的设计非常相似,如果不相同的话。

于 2010-06-04T22:38:24.113 回答
1

如果您在 .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 循环相同。任务模型略有不同,但应该很简单。

于 2010-06-04T23:22:54.847 回答
0

如果您想要通用的东西,例如在各种操作系统和环境中可移植,那么很难不考虑 Java。而且它们与 C# 非常相似,因此转换非常容易。

除非你想拔出你的忍者手术刀并想让你的代码非常高效,否则我会说 java over VC++ 或 C++。

于 2010-06-04T22:15:19.287 回答