2010-09-03 44 views
2

我不確定這樣的問題是否合適,但建議我在這裏問一下,所以在這裏。C#開源軟件將受益於並行化?

對於大學這個學期的學科,我們的任務是採取一些現有的代碼並將其並行化。我們已經有了一些開放性的結果,但開源是我們獲得現有代碼的唯一途徑。我可以編寫一些代碼然後對其進行並行化處理,但現有的代碼(也許是我可以做出真正貢獻的代碼)將是最好的,以避免我的工作量增加一倍,而且收益甚微。我希望能夠使用C#並使用新的Task並行庫,但我正在努力尋找一些C#開源項目,這些項目在計算上足夠昂貴,無法使用並行化(並且還沒有它)。

有沒有人有一些建議在哪裏看?或者是C#只是沒有足夠的那樣的東西作爲開源(應該也許嘗試C++?)

回答

4

我不知道他們是否已經使用並行任務,但好的候選人是圖像處理程序,如paint.netpinta

+0

不幸的是,你將不得不找到一箇舊版本的Paint.NET,因爲最新版本是封閉源代碼。 – Timwi 2010-09-03 13:12:44

+0

@Timwi - 我不知道他們去封閉源:( – Oded 2010-09-03 13:13:20

+0

)感謝Oded,我確實想給Paint.NET一個去,但注意到它是封閉的源碼,但pinta可能是值得的一槍,但我會採取看, – RodH257 2010-09-03 15:04:36

1

查看Alglib,特別是open source C# edition。它將包含很多矩陣和陣列操作,它們將非常適合TPL。

0

Project Bouncycastle在C#和java中實現了幾種加密算法。也許其中一些並不像它們可能的那樣平行。

1

我不知道這個項目的範圍(如果它只是一個每週任務或者你的最終項目),但是一個從並行化中受益的過程並不像漢斯的鏈接文章所描述的那樣是「不平行的」。一個問題將受益於正在進行並行,如果:

  1. 到問題的解決方案,可以表示爲一個重複的一系列較小的操作的「總和」,
  2. 較小的操作會相互影響最小,而且
  3. 由於創建和監督多個工作進程的額外開銷,問題的規模足以使並行化的好處大於損失。那往往是線性解決的問題

的例子,但可以從並行化中獲益包括:

  • 排序。像MergeSort這樣的算法足夠原子來並行化;其他像QuickSort不是。
  • 正在搜索。 BinarySearch無法並行化,但如果您搜索無序數據(如文檔中的一個或多個詞語),則線性搜索可以使用「分而治之」優化。
  • 數據轉換工作流程。打開一個文件,讀取其原始數據,將其分割成域字段,將這些域字段轉換爲真正的域對象,驗證它們並保存它們。每個數據文件通常完全獨立於所有其他文件,並且轉換過程(讀取文件和保存文件之間的所有內容)往往是一個瓶頸,因爲有更多的處理器投入使用。
  • 約束滿足問題。給定一系列定義問題空間中多個變量的關係和約束的業務規則,找到一組滿足所有約束條件的變量,或者確定沒有變量。常見的應用包括運輸路線調度和業務流程優化。這是一個不斷髮展的計算算法領域,具有相當高的學術興趣,因此您可能會發現已發佈的可以多線程處理的基本CSP算法的公共域代碼。它可能被形容爲並行,因爲最着名的解決方案是「智能暴力」,但是,可以獨立評估一個可能的解決方案,因此每個解決方案都可以提供給工作線程。

定義爲「尷尬平行」的過程通常是規模足夠大,但原子性和重複性的任何問題,並行處理是唯一可行的解​​決方案。維基漢斯的鏈接提到常見的應用;一般來說,它們通常歸結爲對相當大的數據域中的每個元素應用相對簡單的計算。