Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BILET11-15.doc
Скачиваний:
1
Добавлен:
21.09.2019
Размер:
166.91 Кб
Скачать

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|).

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).

БІЛЕТ №14

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]