2010-06-21 53 views
2

我正在准备编写一个光子模拟软件包,该软件包将运行在128节点的Linux和Windows群集上,并使用基于Windows的客户端来设计作业(类似于CAD)并将它们提交给群集。C#适用于群集计算繁重的应用程序吗?

其中大部分内容都很好,但我很好奇C#如何在实数运算能力方面达到C++的水平。我对这两种语言都很满意,但是我发现C#与.NET或Mono的优越对象模型和框架支持令人难以置信的诱人。但是,在这个应用程序中,为了开发人员的偏好,我无法牺牲处理能力。

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

+0

为什么要将高级(管理/调度)与使用相同语言的低级(数量加工)设施结合起来呢?如果在计算过程中使用c,不希望编译器的汇编或汇编效率更高。如果您想要更好的工具来管理应用程序的高阶组织和管理,请使用C#(.NET或Mono)或Python。 – 2010-06-21 22:03:59

+0

@Evan当然,C给了一个好的程序员,会产生很好的结果,并且它具有跳过C#中几个抽象层次的优点。但是,我想保留应用程序在一种语言出于几个原因。可维护性*非常重要。与基于Web的报告工具的集成将非常棒 - 使用C#保留内容可以轻松地在任何其他上下文中重用为群集节点应用程序编写的库。永远不要低估坚持单一平台的好处。 – 2010-06-22 16:57:45

+0

好吧,我只想指出,通常的做法是使用更高级别的语言作为“胶水”语言,以获得方便**和**表现(赢得胜利)。在Python中嵌入C/C++是科学计算领域的常见做法,因为在Python中使用C/C++代码非常简单,您仍然可以在需要的地方利用性能。请参阅http://docs.python.org/release/2.5.2/ext/simpleExample.html。我只提供它作为评论而不是答案,因为尽管它不符合你的要求,但这不是一个坏的选择。 – 2010-06-22 20:30:43

回答

2

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

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

实际上,我不知道后者有多重要。我知道至少Mono会自动并行运行一些循环,如果它发现自己在SSE(SSE2,也许是?)的CPU上运行,这对您的情况可能是一个大问题。

+0

有道理。任何想到用NGen预编译程序集会产生什么效果?我不确定它是否会执行任何额外的优化级别。 – 2010-06-21 22:18:43

1

我做了快速搜索,发现这一点:

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

编辑:记住,(在阅读文章),这是5年前这样做性能可能是更好的全面!

+0

感谢您的链接。如果与结果数字的链接没有死掉,那会很好。 =) – 2010-06-21 22:21:00

+0

转到“下一页”;) – Goz 2010-06-22 06:29:21

+0

哎呀。 = /我可以有网站。 – 2010-06-22 16:53:19

1
+0

+1为参考。谢谢! – 2010-06-22 17:09:45