2

我正准备编写一个光子模拟包,它将在 128 节点 Linux 和 Windows 集群上运行,并带有一个基于 Windows 的客户端,用于设计作业(类似于 CAD)并将它们提交到集群。

其中大部分都是很好的基础,但我很好奇 C# 在实数运算能力方面如何与 C++ 相提并论。我对这两种语言都非常熟悉,但我发现 C# 与 .NET 或 Mono 的卓越对象模型和框架支持非常诱人。但是,我不能用这个应用程序为了开发者的偏好而牺牲太多的处理能力。

有没有人有这方面的经验?有没有可用的硬基准?我假设最终的机器代码将使用相同的技术进行优化,无论它来自 C# 还是 C++ 源代码,特别是因为这通常发生在 pcode/IL 级别。

4

3 回答 3

2

C# 和本机 C++ 采用的优化技术大不相同。C# 编译器发出 IL,它只是略微优化,然后在第一次执行时将其 JIT 化为二进制代码。大多数优化工作发生在 JIT 编译器内部。

这有利有弊。JIT 有时间预算,这限制了它可以在优化上花费多少精力。但它也对实际运行的硬件有深入的了解,因此它可以(理论上)透明地使用更新的 CPU 操作码和性能数据的详细知识,例如管道危险数据库。

在实践中,我不知道后者有多重要。我确实知道,如果 Mono 发现自己在带有 SSE(也许是 SSE2)的 CPU 上运行,至少 Mono 会自动并行化一些循环,这对您的场景来说可能很重要。

于 2010-06-21T22:09:38.513 回答
1

我快速搜索了一下,发现了这个:

http://www.drdobbs.com/184401976;jsessionid=232QX0GU3C3KXQE1GHOSKH4ATMY32JVN

编辑:请记住(在阅读文章时)这是 5 年前完成的,因此性能可能会更好!

于 2010-06-21T22:08:42.463 回答