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

2.Формування повідомлень за допомогою упакування і розпакування даних

Для використання даного підходу слід визначити буфер пам’яті достатнього розміру для збірки повідомлення. Дані, що входять до складу повідомлення повинні бути упаковані до буферу з використанням функції:

int MPI_Pack(void *data , int count , MPI_Datatype type , void *buf , int bufsize , int *bufpos , MPI_Comm comm ) ,- data - буфер пам’яті з елементами для упаковки; - count - кількість елементів в буфері; - type - тип даних для елементів, що упаковуються; - buf - буфер пам’яті для упаковки; - bufsize - розмір буфера в пам’яті; - bufpos - позиція для початку запису в буфер (в байтах від початку буфера); - comm - комунікатор для упакованого повідомлення.

Функція MPI_Pack упаковує count елементів з буфера data до буфера упаковки buf, починаючи з позиції bufpos.

Для визначення необхідного розміру буфера для упаковки можна застосувати функцію:

int MPI_Pack_size(int count , MPI_Datatype type , MPI_Comm comm, int *size) ,де - count - кількість елементів в буфері; - type - тип даних для упаковки елементів; - comm - комунікатор для упакованого повідомлення; - size - розрахований розмір буфера.

Після упаковки всіх необхідних даних підготований буфер можна використати в функціях передачі даних з вказівкою типу MPI_PACKED. Після отримання повідомлення з типом MPI_PACKED дані можна розпакувати з використанням функції:

int MPI_Unpack(void *buf , int bufsize , int *bufpos , void *data, int count , MPI_Datatype type , MPI_Comm comm ) ,де - buf - буфер пам’яті з упакованими даними; - bufsize - розмір буфера в байтах; - bufpos - позиція початку даних в буфері (в байтах від початку буфера); - data - буфер пам’яті для розпакованих даних; - count - кількість елементів в буфері; - type - тип даних, що розпаковуються; - comm -комунікатор для упакованого повідомлення.

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

1.Векторно-конвеєрні кс.

Основу конвеєрної обробки становить роздільне виконаннядеякої операції в кілька етапів (за кілька ступенів) з передачеюданих одного етапу наступного. Продуктивність при цьому зростаєзавдяки тому, що одночасно на різних щаблях конвеєравиконуються декілька операцій. Конвейеризації ефективна тільки тоді,коли завантаження конвеєра близька до повної, а швидкість подачі нових операндіввідповідає максимальної продуктивності конвеєра. Якщо відбуваєтьсязатримка, то паралельно буде виконуватися менше операцій і сумарнапродуктивність знизиться. Векторні операції забезпечують ідеальнуможливість повного завантаження обчислювального конвейєра.

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