Алгоритмы параллельных вычислений и программирование. Бурова И.Г - 197 стр.

UptoLike

if(isprime){ /* поместить результат в таблицу и в ПК */
primes[numPrimes]=value; /* расширить таблицу */
OUT("prime", numPrimes, value);
/* -- погрузить простое в ПК */
numPrimes++;
}
value=value+2;
}
/* завершить рабочие процессы, вывести простые числа */
OUT("stop"); /* погрузить "stop" в ПК */
for (i=0; i<=limit; i++)
printf("%d\n", primes[i]);
/* распечатать массив primes */
}
Замечание. Генерацией новых кандидатов в ПК занимаются
рабочие процессы
.
Головная программа сначала выполняет один процесс:
1) она начинает работу с чтения аргументов командной строки
для определения, сколько нужно простых чисел (limit) и сколько
процессов можно использовать (numWorkers);
2) затем используется примитив EVAL для создания рабочих
процессов;
3) далее используется примитив OUT для помещения в про-
странство кортежей числа-кандидата пять;
4) для получения результатов от рабочих процессов использу-
ется примитив IN (извлекает простые числа из ПК), причем резуль-
таты получаются в порядке возрастания простых чисел;
5) получив простое число программа помещает его и его но-
мер в пространство кортежей, а также дополняет таблицу простых
чисел;
6) работа завершается, когда управляющий процесс real_main
получает limit простых чисел: управляющий процесс сообщает об
остановке, помещая в ПК кортеж "stop";
7) real_main распечатывает таблицу простых чисел primes.
Что делают рабочие процессы?
1) каждый рабочий процесс многократно получает число-
кандидат из ПК;
2) проверяет, простое ли оно;
198