2016-08-21 43 views
0

不均勻的工作量我有一個數組分發使用MPI

A(1:n_max) 

,我想,以評估一些F(A(j)段)與MPI散射。然而,f(A(1))的評估耗時0.35s,f(A(n_max))的評估耗時15s。我對如何解決它有不同的想法,但我不確定哪一個是最好的:

  1. 一些主/從工作負荷分配。

    沿此線:http://www.hpc.cam.ac.uk/using-clusters/compiling-and-development/parallel-programming-mpi-example

  2. 我重新排列A和重塑(移調(整形(A)),這將轉

    陣列([0,1,2,3,4, 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 ,30,31,32,33, 34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50, 51,52,53 ,54,55,56,57,58,59,60,61,62,63,64,65, 78,79,80,81,82,83,84, 85,86,87,88,89,90,91,92,93,94,95,96,97,98])

array([[ 0, 33, 66, 1, 34, 67, 2, 35, 68, 3, 36, 69, 4, 37, 70, 5, 38, 
     71, 6, 39, 72, 7, 40, 73, 8, 41, 74, 9, 42, 75, 10, 43, 76, 11, 
     44, 77, 12, 45, 78, 13, 46, 79, 14, 47, 80, 15, 48, 81, 16, 49, 82, 
     17, 50, 83, 18, 51, 84, 19, 52, 85, 20, 53, 86, 21, 54, 87, 22, 55, 
     88, 23, 56, 89, 24, 57, 90, 25, 58, 91, 26, 59, 92, 27, 60, 93, 28, 
     61, 94, 29, 62, 95, 30, 63, 96, 31, 64, 97, 32, 65, 98]]) 

然後我可以分發使用分散和聚集。問題是,一個進程將不得不運行f(A(0)),f(A(33))和f(A(66)),而另一個運行f(A(32)),f A(65))和f(A(98))。

不幸的是,運行時間在上升單調,但不是線性。

  • 我希望一些自己的想法
  • 的你有什麼建議?

    回答

    1

    如果執行的順序是重要的(例如高速緩存),你可以在不同大小的連續的組,但幾乎相等的工作負載陣列分割,並將它們與MPI_SCATTERV分發。 如果數組末尾很重(在工作負載的情況下),也可以拆分數組並使用相同的方法兩次。

    如果執行的順序並不重要,你必須重新排序並沒有採取太多的時間,我寧願你的第二個方法。

    如果你總是這樣一個數組,你應該想想第一個解決方案,但僅發送間隔的限制,而不是時間間隔內的所有數字。如果您在通信中使用帶寬限制,這尤其有意義。