опарно складає елементи двох таких векторів, завантажуючи їх з двох векторних регістрів в підсумовуюче пристрій з конвеєрною структурою. В результаті з підсумовує пристрої виходить інший вектор, який або поміщається у векторний регістр, або відразу використовується в якості операнда при виконанні іншої операції з векторами. p> Матричні процесори в даний час не випускаються, але принцип, на якому вони засновані, як і раніше актуальне. Аналогічна ідея застосовується в наборах ММХ-і SSE-команд процесорів Pentium 4, і вона успішно вирішує завдання прискореного виконання мультимедійних програм. У цьому відношенні комп'ютер ILLIAC IV можна вважати одним з прабатьків процесора
Pentium 4. <В
6.3 Внутріпроцессорная багатопоточність
Для всіх сучасних конвеєризований процесорів характерна одна і та ж проблема - якщо при запиті до пам'яті слово не виявляється в кешах першого і другого рівнів, на завантаження цього слова в кеш пішов тривалий час, протягом якого конвеєр простоює. Одна з методик вирішення цієї проблеми називається внутріпроцессорной багатопоточність (on-chip multithreading). Вона дозволяє процесору одночасно керувати кількома програмними потоками і тим самим маскувати простої. Коротенько принцип можна викласти так: якщо програмний потік 1 блокується, процесор може забезпечити повне завантаження апаратури, запустивши програмний потік 2. p> Основоположна ідея проста, реалізується вона різними способами. Перший з них, званий мілкомодульних багатопоточність (fine-grained multithreading), стосовно до процесору, здатному викликати одну команду за такт, ілюструє малюнок 6.2. На малюнку 6.2 а-в зображено три програмні потоку (А, В, С), відповідних 12 машинним циклам. У ході першого циклу потік А виконує команду A1. Оскільки ця команда завершується за один цикл, при настанні другого циклу запускається команда А2. Її звернення в кеш першого рівня виявляється невдалим, тому до отримання потрібного слова з кешу другого рівня проходить два циклу. Виконання потоку триває в циклі 5. Як показано на малюнку, потоки В і С також регулярно простоюють. У рамках такого рішення виклик наступної команди до завершення попередньої не здійснюється. Точніше, за наявності складного лічильника звернень в деяких випадках це припустимо, але таку можливість ми для простоти виключаємо. p> При мілкомодульних багатопоточності простий маскується шляхом виконання потоків "по колу ", тобто в суміжних циклах запускаються різні потоки (малюнок 6.2 г). До моменту настання циклу 4 звернення до пам'яті, ініційоване командою A1, завер шается, тому навіть якщо команді A2 потрібен результат команди A1, вона запускається. У такому випадку максимальна тривалість простою складає два цикли, тобто за наявності трьох програмних потоків простоювати операція все одно завершується вчасно. При простої в 4 циклу для безперервної роботи знадобилося б 4 програмних потоку і т. д.
Оскільки різні програмні потоки ніяк один з одним не пов'язані, кожному з них потрібен свій набір регістрів. Він повинен бути вказаний для кожної спричиненої команди, і тоді апаратне забезпечення буде знати, до якого набору регістрів при необхідності потрібно звертатися. Отже, максимальне число одночасно виконуваних програмних потоків визначається в період розробки мікросхеми. p> Зверненнями до пам'яті причини простою не обмежуються. Іноді для виконання наступної команди потрібно результат попередньої команди, який ще не обчислений. В інших випадках команда викликана бути не може, так як вона слідує за умовним переходом, напрямок якого ще невідомо. Загальне правило формулюється так: якщо в конвеєрі k ступенів, але по колу можна запустити, щонайменше, k програмних потоків, то в одному потоці в будь-який окремо взятий момент не може виконуватися більш однієї команди, тому конфлікти між ними виключені. У такій ситуації процесор може працювати на повній швидкості, без простою. p> Природно, далеко не завжди число доступних потоків дорівнює числу ступенів конвеєра, тому деякі розробники воліють методику, звану крупномодульних багатопоточність (Coarse-grained multithreading), яку ілюструє малюнок 6.2, д. У даному випадку програмний потік А продовжує виконуватися послідовно, аж до простою. При цьому втрачається один цикл. Далі відбувається перемикання на першу команду програмного потоку B (B1). Так як ця команда відразу переходить у стан простою, в циклі 6 виконується вже команда C1. Так як кожен раз при просте команди втрачається один цикл, за своєю ефективністю крупномодульних багатопоточність, здавалося б, поступається мілкомодульних, однак у неї є одна істотну перевагу - за рахунок меншого числа програмних потоків значно скорочується витрата ресурсів процесора. При недостатньому кількості активних потоків ця методика оптимальна. p> Судячи з нашого опису, при крупномодульних багатопоточності просто виконується перемикання між потоками, однак це - не єдиний передбачений даною методикою варіант дій. Є м...