2009-09-25 64 views
0

我有一個關於並行化的問題:有關並行化任務的問題

我有兩個數據集。數據集1有m行和k列,數據集2有n行和k列。(m> n)我的程序從文件中讀取這些數據集並將它們存儲在內存中。任務是獲取Dataset1的每個實例(我們稱之爲查詢實例)並與Dataset2的所有實例進行比較。

現在我的問題是:

  • (選項1)我應該分割Dataset2到分區的X數量以及每個查詢分配給工作線程的x數量的分區(這意味着,與比較(數據集2中的查詢實例)數據集1 或
  • (選項2)我應該從數據集1中獲取x個實例,將x個工作線程同時分配給查詢數據集2。

哪一個會更有效率? //順便說一下,我目前使用PThreads庫。

+0

只是要清楚,你基本上是問是否分割更大或更小的數據集? – phoebus 2009-09-25 08:24:16

+0

沒有不完全。我的問題是,要麼分區數據集2(小數據集)並行處理這些分區,要麼同時查詢大數據集的每個實例的小數據集。只需要分區或不分區。 – systemsfault 2009-09-25 08:34:01

回答

1

我會去的選項1,即分區數據集2.

理由:

數據集1可能是太大,不適合在高速緩存中,無論如何,這就是爲什麼你一次席捲並比較數據集2中的所有條目的每個條目。

現在,我們假設數據集2也太大以至於無法完全適應單個處理器的緩存,但是如果分區爲x分區,則它足夠大以適應緩存,每個處理器的緩存都包含其中一個分區。在這種情況下,如果使用選項1,每個處理器的緩存將足夠大以包含其中一個分區。如果使用選項2,則每個處理器都需要處理整個數據集2,該數據集太大而不適合其緩存,因此會發生抖動。

如果數據集2足夠小以便完全適應緩存,那麼它可能在很大程度上與您選擇的選項無關。