/ / Математически израз за идентификатор на процес като функция от размера на решетката, броя на процесите и идентификатора на реда - c, математика, mpi

Математически израз за идентификатор на процеса като функция от размера на мрежата, брой процеси и ред id - c, математика, mpi

Пиша програма с някои приятели от групата, коитосимулира позициите на животните в света на 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)));

Благодаря на всички ви.