我正在寫一個程序與一些模擬動物在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個動物,那麼這個功能將被稱爲每個動物一次。我認爲一個「簡單」的數學表達式會更快,但我很難推斷它。
預先感謝
Thansk,但這是不正確的。首先,大小不僅是N/P。在這個例子中,我展示了N/P = 2,並且有兩個進程每個都有3行。 –
大小是N/P的roundUp,在這個例子中是3,在你的例子中它的大小是{3,3,2} –
(繼續第一條評論)其次,'roundUp(I/N)'總是1,因爲我在[0; N-1] –