Мультитредові мікропроцесори

Автор работы: Пользователь скрыл имя, 11 Июня 2013 в 18:24, курсовая работа

Краткое описание

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

Содержание

ВСТУП…………………………………………… 5

РОЗДІЛ І АНАЛІТИЧНИЙ ОГЛЯД ПРЕДМЕТНОЇ ОБЛАСТІ..….... 7
1.1 Основи мультитредової архітектури ……..………………………....... 7
1.2 Переваги мультитредової архітектури 11
1.3 Виявлення тредів 13
1.3 Специфіка мультитредових моделей розпаралелювання 14

РОЗДІЛ ІІ ТЕОРЕТИЧНА ЧАСТИНА 17
2.1 Мультитредові процесори з тредами, що виявляються шляхом аналізу
потоків управління програми 17
2.2 Мультитредові процесори з тредами, що виявляються шляхом аналізу
потоків даних програми 25

РОЗДІЛ ІІІ ПРАКТИЧНА ЧАСТИНА 29
3.1 Опис технології Hyper-Threading 29
3.2 Особливості реалізації Hyper-Threading у процесорі Pentium 4 на
прикладі виконання коду різного типу 32

ВИСНОВКИ 39

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 42

Прикрепленные файлы: 4 файла

курсова.doc

— 697.00 Кб (Скачать документ)

пристроїв процесора Pentium 4.

Таким чином, якщо дозволити процесору одночасне виконання більш ніж одного потоку, його потужності можна завантажити більш ефективно. Саме в цьому і полягає основна ідея Hyper-Threading. Завдяки технології Hyper-Threading один фізичний процесор сприймається операційною системою і додатками як два логічних процесори. Відповідно, операційна система і додатки припускають, що CPU з технологією Hyper-Threading може одночасно виконувати два потоки і завантажує такий процесор роботою набагато сильніше. Принципи функціонування Hyper-Threading показані на рис. 3.1 і рис. 3.2.


 

 

 

 

 

 

 

 

 

Рис. 3.1.  Принцип функціонування технології Hyper-Threading


 

 

 

 

 

 

 

Рис. 3.2. Розподіл ресурсів процесора з Hyper-Threading

Сам же процесор при цьому підданий лише незначним змінам і використовує для виконання другого потоку свої простоювані ресурси. Тобто, Hyper-Threading - технологія для збільшення коефіцієнта корисної дії процесора, дієва, втім, тільки в багатозадачних і багатопоточних середовищах. Різниця між процесором з технологією Hyper-Threading і двопроцесорною системою схематично показано на рис. 3.3.


 

 

 

 

 

 

Рис. 3.3. Процесор з технологією Hyper-Threading та звичайна двопроцесорна система

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

Були представлені наступні переваги Hyper-threading: покращена підтримка багатопотокового коду, що дозволяє запускати потоки одночасно; поліпшена реакція і час відгуку; збільшена кількість користувачів, що може підтримувати сервер.

За словами Intel, перша реалізація потребувала всього 5-відсоткового збільшення площі кристала, але дозволяла збільшити продуктивність на 15-30%.

Intel стверджує, що надбавка до швидкості складає 30% в порівнянні з ідентичним процесорами Pentium 4 без технології «Simultaneous multithreading». Однак надбавка до продуктивності змінюється від програми до програми: деякі програми взагалі дещо сповільнюються при включеній технології Hyper-threading.

 

3.2 Особливості реалізації технології hyper-threading у процесорі intel Pentium 4 на прикладі виконання коду різного типу

Досліджено особливості  реалізації технології Hyper-Threading на процесорах Intel Pentium 4 (ядра Northwood і Prescott). Показано, що при правильному використанні технології можна отримати до 50% збільшення у швидкості виконання коду програми. Для співставлення наведені співвідношення швидкості виконання однопотокового і двухпоточного коду на одноядерних і двоядерних процесорах.

Для підвищення ступеня завантаження виконавчих пристроїв процесорів Pentium 4 (ядра Northwood, Gallatin і Prescott) фірмою Intel була розроблена і реалізована техно-логія Hyper-Threading. Завдяки їй один фізичний процесор бачиться операційною системою як пара логічних процесорів (рис. 3.4) і здатний паралельно виконувати два незалежних потоки коду.

                        

 

 

Рис. 3.4. Фізичний процесор включає в

         своєму складі два логічних

Як стверджують офіційні керівництва та презентації фірми Intel, при паралельному виконанні декількох потоків коду технологія Hyper-Threading здатна забезпечити до 40% збільшення у швидкості в порівнянні з послідовним виконанням. Синтетичні тести в цілому підтверджують зазначену інформацію, показуючи 28-42% збільшення у швидкості від паралельного виконання, однак спостерігаються деякі розбіжності з документацією:

  1. У документації затверджується, що найбільший виграш може бути отриманий у разі, якщо різні потоки коду використовують різні виконавчі пристрої, а проте на практиці виконання однотипних потоків, що використовують одні й ті ж виконавчі пристрої, призводить до тих самих 28-42% виграшу.
  2. При інтенсивних не вирівняних зверненнях до пам'яті в паралельно виконуваних потоках спостерігається близько 1% падіння продуктивності на процесорах з ядрами Northwood і порядку семиразового падіння продуктивності на процесорах з ядрами Prescott, що пояснюється негативною стороною функціонування погано документованого механізму replay.

Отримані результати показують, що для ефективного використання потенціалу технології Hyper-Threading необхідно  її більш детальне вивчення. Далі аналізується виграш від використання технології Hyper-Threading на прикладі виконання операції складання з використанням різних наборів команд (Int ALU, FPU, MMX, SSE), тобто (залежним і незалежним) варіантами коду. У даному випадку під залежним кодом розуміється код виду

add eax, eax

add eax, eax

add eax, eax

add eax, eax

add eax, eax

де команди виконуються послідовно (не перекриваються у часі), тому що є залежності RAW (Read After Write) від результату виконання попередньої команди. У даному коді теоретично повинен спостерігатися найбільший приріст швидкості при паралельному виконанні, тому що виконавчі пристрої найменш завантажені. Під незалежним кодом розуміється код виду

add eax, eax

add ebx, ebx

add edx, edx

add esi, esi

add edi, edi

де ідучі підряд команди не залежать один від одного і можуть виконуватися паралельно в часі. Можна вважати, що даним лінійним ділянкою коду (або йому подібних) досягається повне завантаження виконавчих пристроїв, тому що в архітектурі процесора Pentium 4 два виконавчих пристрої (alu0 port 0 і alu1 port 1) можуть виконувати команди цілочисельного складання. Для інших виконавчих пристроїв (FPU, MMX, SSE) можливе паралельне виконання тільки однієї команди складання. У деяких випадках виконання команд може бути конвеєризований (FPU), але це не міняє суті. При паралельному виконанні потоків незалежного коду теоретично повинен спостерігатися найменший виграш від використання технології Hyper-Threading, тому що виконавчі пристрої повністю завантажені.

Для перевірки викладених гіпотез була розроблена програма (рис. 3.5), в якій реалізовані всі можливі варіанти коду (літера i відповідає незалежному (independent) коду, буква d - залежному (dependent)).

Риc. 3.5. Зовнішній вигляд програми для тестування

Асемблерний код підпрограм наведений у таблиці 3.1.

Підпро-грама

       

 

ALU

FPU

MMX

SSE

 

add eax, eax

fadd st(0), st(2)

paddw mm1, mm0

addps xmm1, xmm0

 

add ebx, ebx

fxch st(1)

paddw mm2, mm0

addps xmm2, xmm0

незалежний

add edx, edx

fadd st(0), st(3)

paddw mm3, mm0

addps xmm3, xmm0

 

add esi, esi

fxch st(1)

paddw mm4, mm0

addps xmm4, xmm0

(independent)

add edi, edi

 

paddw mm5, mm0 paddw mm6, mm0 paddw mm7, mm0

addps xmm5, xmm0 addps xmm6, xmm0 addps xmm7, xmm0

 

add eax, eax

fadd st(0), st(1)

paddw mm7, mm0

addps xmm7, xmm0

 

add eax, eax

fadd st(0), st(2)

paddw mm7, mm1

addps xmm7, xmm1

залежний

add eax, eax

 

paddw mm7, mm2

addps xmm7, xmm2

 

add eax, eax

 

paddw mm7, mm3

addps xmm7, xmm3

(dependent)

add eax, eax

 

paddw mm7, mm4 paddw mm7, mm5 paddw mm7, mm6

addps xmm7, xmm4 addps xmm7, xmm5 addps xmm7, xmm6


Табл. 3.1. Код підпрограм, що виконується циклічно і імітують навантаження різних виконавчих пристроїв процесора

 

Різні потоки коду запускаються попарно, при цьому визначається виграш від паралельного виконання в порівнянні з послідовним. Виграш відображається як у вигляді надбавки у швидкості у відсотках, так і в графічному вигляді. Число в дужках позначає кількість проведених тестів, підсумковий результат виходить шляхом усереднення результатів окремих тестів. Для компенсації впливу архітектури процесора на тривалість виконання фрагментів коду перед початком тестування проводиться калібрувальний прогін тестів (нижня ліва частина форми програми) і коригується кількість ітерацій виконання тестових фрагментів (масштабний коефіцієнт праворуч від символу множення). Результати тестування наведені на табл. 3.2 та 3.3.

 

 

dALU

iALU

dFPU

iFPU

dMMX

iMMX

dSSE

iSSE

dALU

+2,4% (222)

+ 1,9% (222)

+ 18,9% (222)

+21,3% (222)

+22,9% (222)

+26,3% (222)

+26,4% (222)

+ 18,0% (222)

iALU

+ 1,1% (222)

+2,4% (222)

+ 19,4% (222)

+22,8% (222)

+23,0% (222)

+25,2% (222)

+25,2% (222)

+ 16,5% (222)

dFPU

+21,3% (222)

+21,8% (222)

+39,0%(222)

+47,2% (222)

+29,8% (222)

+37,9% (222)

+ 16,0% (222)

+38,2% (222)

iFPU

+23,5% (222)

+25,8% (222)

+47,6%(222)

+49,5% (222)

+26,1% (222)

+39,8% (222)

+29,8% (222)

+39,4% (222)

dMMX

+6,8% (222)

+24,6% (222)

+29,6% (222)

+25,9% (222)

-0,1% (222)

+24,9% (222)

+24,9% (222)

+24,0% (222)

iMMX

+27,3% (222)

+27,3% (222)

+37,8%(222)

+39,2% (222)

+24,8% (222)

+49,7%  (222)

+49,7%(222)

+48,6%(222)

dSSE

+27,0% (222)

+27,0% (222)

+ 15,8% (222)

+29,2% (222)

+24,8% (222)

+49,7 (222)

-0,1% (222)

+23,6% (222)

iSSE

+24,1% (222)

+23,6% (222)

+39,8% (222)

+39,7% (222)

+24,8% (222)

+49,6% (222)

+24,9% (222)

+48,7% (222)


Табл. 3.2. Результати виконання програми на Pentium 4 Northwood 3,06 ГГц

(CPUID = 0F29h)

 

 

dALU

iALU

dFPU

iFPU

dMMX

iMMX

dSSE

iSSE

dALU

+4,7% (50)

+ 24,8% (50)

+ 27,7% (50)

+ 24,3% (50)

+30,2% (50)

+ 31,4% (50)

+31,3% (50)

+ 30,3% (50)

iALU

+ 24,0% (50)

+ 39,6%(50)

+ 36,5% (50)

+ 37,8% (50)

+40,9% (50)

+40,6% (50)

+40,2% (50)

+ 39,9% (50)

dFPU

+ 27,7% (50)

+ 36,8% (50)

+49,3% (50)

+48,4% (50)

+31,5% (50)

+47,1% (50)

+ 11,1% (50)

+ 39,3% (50)

iFPU

+ 22,4% (50)

+ 37,4% (50)

+48,4% (50)

+49,9% (50)

+26,6% (50)

+48,5% (50)

+32,7% (50)

+ 39,8% (50)

dMMX

+ 32,0% (50)

+41,2%(50)

+ 31,6% (50)

+ 29,0% (50)

0,0% (50)

+ 23,9% (50)

+ 15,0% (50)

+ 29,8% (50)

iMMX

+ 23,5% (50)

+40,7%(50)

+47,1% (50)

+48,5% (50)

+24,9% (50)

+49,9% (50)

+24,8% (50)

+40,2% (50)

dSSE

+ 31,3% (50)

+ 39,9%(50)

+ 11,0% (50)

+ 32,6% (50)

+8,4% (50)

+ 19,6% (50)

-0,1% (50)

+ 27,4% (50)

iSSE

+ 28,7% (50)

+ 39,7%(50)

+ 37,9% (50)

+ 39,8% (50)

+29,1% (50)

+ 39,7% (50)

+29,5% (50)

+49,2% (50)


Табл. 3.3. Результати виконання програми на Pentium 4 Prescott 3,20 ГГц

(CPUID = 0F34h)

 

 

Аналіз отриманих результатів  дозволяє зробити наступні висновки:

1. Висунуті вище гіпотези  про повну/неповному завантаженні виконавчих блоків не підтверджуються результатами експерименту. Паралельне виконання потоків незалежного коду (iMMX + iMMX, iSSE + iSSE) призводить до 49-50% виграшу в швидкості, в той час як паралельне виконання потоків залежного коду (dMMX + dMMX, dSSE + dSSE) не призводить до якого-небудь виграшу: спостерігається програш порядку 0,1%. Це пояснюється особливостями функціонування механізму replay. Оскільки код реальних додатків є більшою мірою залежним, практичний виграш повинен бути значно нижчим за максимально теоретичний.

2. У цілому потоки з незалежним кодом отримують більший виграш у швидкості, ніж потоки з залежним кодом. Однак це справедливо не завжди.

3. Паралельне виконання потоків з кодом для співпроцесора (FPU + FPU) дає хороший виграш (39,0-49,9%), що швидше за все пояснюється конвеєрної організацією цього блоку.

4. Виграш при виконанні потоків коду на ALU досить малий на процесорах з ядром Northwood (1,1-2,4%), у той час як на процесорах з ядром Prescott він більш значний (4,7-39,6%).

5. На процесорах з  ядром Prescott в основному спостерігається більший виграш у швидкості від використання технології Hyper-Threading в порівнянні з процесорами Northwood, що узгоджується з даними з офіційної документації фірми Intel. Однак це справедливо не завжди.

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

 

 

 

dALU

iALU

dFPU

iFPU

dMMX

iMMX

dSSE

iSSE

dALU

-0,1% (37)

-0,6% (37)

0,0% (37)

-0,3% (37)

-0,3% (37)

+0,1% (37)

+0,2% (37)

-0,6% (37)

iALU

+0,3% (37)

-0,4% (37)

-0,1% (37)

-0,1% (37)

-0,1% (37)

+0,0% (37)

+0,0% (37)

-0,3% (37)

dFPU

-0,4% (37)

-0,3% (37)

+0,0% (37)

-0,3% (37)

-0,2% (37)

-0,2% (37)

-0,2% (37)

-0,4% (37)

iFPU

+0,0% (37)

-0,3% (37)

-0,1% (37)

-0,3% (37)

-0,1% (37)

-0,3% (37)

-0,1% (37)

-0,4% (37)

dMMX

-0,3% (37)

-0,2% (37)

-0,1% (37)

-0,7% (37)

-0,3% (37)

-0,3% (37)

-0,2% (37)

-0,2% (37)

iMMX

-0,3% (37)

-0,1% (37)

-0,5% (37)

0,0% (37)

-0,3% (37)

-0,1% (37)

-0,2% (37)

-0,1% (37)

dSSE

0,0% (37)

+0,1% (37)

-0,4% (37)

-0,2% (37)

-0,2% (37)

-0,1% (37)

-0,2% (37)

-0,2% (37)

iSSE

+0,1% (37)

-0,3% (37)

-0,3% (37)

-0,1% (37)

-0,1% (37)

+0,0% (37)

-0,7% (37)

-0,3% (37)

Титульна стор_нка.doc

— 74.50 Кб (Просмотреть файл, Скачать документ)

Информация о работе Мультитредові мікропроцесори