Пиша програма с някои приятели от групата, коитосимулира позициите на животните в света на NxN клетки. Правихме го като серийна програма и сега го променям на разпределен, използвайки OpenMPI. Решихме да разпределяме световните линии равномерно по процеси.
Пример: в 8x8 свят (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 (брой редове в света), p (брой процеси) и 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;
Не искам функция, защото, ако имам a1000000x1000000 в света, с приблизително 1000000 ^ 2 животни, тази функция ще бъде наречена веднъж на животно. Мисля, че "простият" математически израз е по-бърз, но имам проблеми да го извадя.
Благодаря предварително
Отговори:
0 за отговор № 1Искате да кажете, че ако p = 3, тогава s (размер) = N / p, и за всяко i в N:
pid = roundUp(i/N*s)
това ли е?
0 за отговор № 2
Е, отговорът беше в бележките за курса ...
pid = max (под (i / таван (N / p)), под ((i- (N% p)) / под (N / p)));
Благодаря на всички ви.