2013-11-27 11 views
0

我正在寫一個程序與一些模擬動物在NxN單元格世界中的位置的組夥伴。我們已經將它作爲一個串行程序來完成,現在我正在使用OpenMPI將其更改爲分佈式。我們決定通過流程均勻分配世界各地。進程ID作爲網格大小,進程數量和線路ID的函數的數學表達式

實施例:在一個8×8的世界(N = 8),3個處理(P = 3):

pid=0 handles lines 0, 1 and 2; 
pid=1 handles lines 3, 4 and 5; 
pid=2 handles lines 6 and 7. 

我需要的是一個數學表達式(不是C函數!),讓我PID作爲N(在世界上的行數),第(進程數)和i(線指數)的函數的[PID = F(N,p,I)]

Using previous example: 
f(8, 3, 0) = 0; 
f(8, 3, 1) = 0; 
f(8, 3, 2) = 0; 
f(8, 3, 3) = 1; 
f(8, 3, 4) = 1; 
f(8, 3, 5) = 1; 
f(8, 3, 6) = 2; 
f(8, 3, 7) = 2; 

我不想功能,因爲如果我有一個1000000x1000000的世界,大約有1000000^2個動物,那麼這個功能將被稱爲每個動物一次。我認爲一個「簡單」的數學表達式會更快,但我很難推斷它。

預先感謝

回答

0

那麼,答案是在球場上的音符...

PID = MAX(地板(I /吊頂(N/P)),地板((I-(N%P))/樓層(N/P)));

謝謝大家。

0

你的意思是如果p = 3,則s(大小)= N/p和對於任何i在N:

pid = roundUp(i/N*s) 

是嗎?

+0

Thansk,但這是不正確的。首先,大小不僅是N/P。在這個例子中,我展示了N/P = 2,並且有兩個進程每個都有3行。 –

+0

大小是N/P的roundUp,在這個例子中是3,在你的例子中它的大小是{3,3,2} –

+0

(繼續第一條評論)其次,'roundUp(I/N)'總是1,因爲我在[0; N-1] –