2010-06-21 74 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