Автор работы: Пользователь скрыл имя, 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
пристроїв процесора 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% збільшення у швидкості від паралельного виконання, однак спостерігаються деякі розбіжності з документацією:
Отримані результати показують, що для ефективного використання потенціалу технології 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) |