Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРО(теорія).doc
Скачиваний:
3
Добавлен:
20.09.2019
Размер:
461.31 Кб
Скачать

Екзаменаційний білет №13

13.1 Структура cc-numa-систем

Поняття когерентності кешів описує той факт, що всі центральні процесори отримують|одержують| однакові значення одних і тих же змінних у будь-який момент часу. Дійсно, оскільки кеш-пам'ять належить окремому комп'ютеру, а не всій багатопроцесорній системі в цілому|загалом|, дані, що потрапляють|попадають| в кеш одного комп'ютера, можуть бути недоступні іншому. Щоб|аби| цього уникнути, слід провести синхронізацію інформації, що зберігається в кеш-пам'яті процесорів.

Для забезпечення когерентності кешів існує декілька можливостей|спроможностей|:

  • використовувати механізм відстежування шинних запитів (snoopy| bus| protocol|), в якому кеші відстежують змінні, що передаються до будь-якого з центральних процесорів і при необхідності модифікують власні копії таких змінних;

  • виділяти спеціальну частину|частку| пам'яті, що відповідає за відстежування достовірності всіх використовуваних копій змінних.

Найбільш відомими системами архітектури cc-NUMA| є|з'являються,являються|: HP| 9000 V-class| в SCA-конфигурациях|, SGI| Origin3000|, Sun| HPC| 15000, IBM/Sequent NUMA-Q| 2000. На сьогодні максимальне число процесорів в cc-NUMA-системах| може перевищувати 1000 (серія Origin3000|). Зазвичай|звично| вся система працює під управлінням єдиною ОС, як в SMP|. Можливі також варіанти динамічного «підрозділу» системи, коли окремі «розділи» системи працюють під управлінням різних ОС. При роботі з|із| NUMA-системами|, так само, як з|із| SMP|, використовують так звану парадигму програмування із|із| загальною|спільною| пам'яттю (shared| memory| paradigm|).

13.2 Одночасне виконання передачі і прийому.

Одной из часто выполняемых форм информационного взаимодействия в параллельных программах является обмен данными между процессами, когда для продолжения вычислений процессам необходимо отправить данные одним процессам и, в то же время, получить сообщения от других процессов. Простейший вариант этой ситуации состоит, например, в обмене данными между двумя процессами. Реализация таких обменов при помощи обычных парных операций передачи данных неэффективна и достаточно трудоемка. Кроме того, такая реализация должна гарантировать отсутствие тупиковых ситуаций, которые могут возникать, например, когда два процесса начинают передавать сообщения друг другу с использованием блокирующих функций передачи данных.

Достижение эффективного и гарантированного одновременного выполнения операций передачи и приема данных может быть обеспечено при помощи функции MPI:

int MPI_Sendrecv(void *sbuf,int scount,MPI_Datatype stype,int dest, int void *rbuf,int rcount,MPI_Datatype rtype,int source,int MPI_Comm comm, MPI_Status *status),

где

- sbuf, scount, stype, dest, stag - параметры передаваемого сообщения,

- rbuf, rcount, rtype, source, rtag - параметры принимаемого сообщения,

- comm - коммуникатор, в рамках которого выполняется передача данных,

- status – структура данных с информацией о результате выполнения операции.

Как следует из описания, функция MPI_Sendrecv передает сообщение, описываемое параметрами (sbuf, scount, stype, dest, stag), процессу с рангом dest и принимает сообщение в буфер, определяемый параметрами (rbuf, rcount, rtype, source, rtag), от процесса с рангом source.

В функции MPI_Sendrecv для передачи и приема сообщений применяются разные буфера. В случае же, когда сообщения имеют одинаковый тип, в MPI имеется возможность использования единого буфера:

int MPI_Sendrecv_replace (void *buf, int count, MPI_Datatype type, int dest, int stag, int source, int rtag, MPI_Comm comm, MPI_Status* status).

Пример использование функций для одновременного выполнения операций передачи и приема приведен в разделе 8 при разработке параллельных программ матричного умножения.