SlideShare a Scribd company logo
1 of 55
Download to read offline
ˠ˱́˱˼˼˶˼̍˾̌˶˳̌̈˹̂˼˹̃˶˼̍˾̌˶̃˶̆˾˿˼˿˴˹˹ 
˟̂˶˾̍3DUDOOHORPSXWLQJ7HFKQRORJLHV37
˜˶˻̇˹̐ˑ́̆˹̃˶˻̃̄́˱ 
˳̌̈˹̂˼˹̃˶˼̍˾̌̆̂˹̂̃˶˽ 
̂˿˲̊˶˺̀˱˽̐̃̍̏ 
ˠ˱˸˾˹˻˿˳ˑ˼˶˻̂˶˺ˑ˼˶˻̂˱˾˵́˿˳˹̈ 
˛˱̅˶˵́˱˳̌̈˹̂˼˹̃˶˼̍˾̌̆̂˹̂̃˶˽ˢ˹˲˔ˤˣ˙ 
ˢ˱˺̃˻̄́̂˱KWWSFSFWVLEVXWLVUXaDSD]QLNRYWHDFKLQJ 
˓˿̀́˿̂̌KWWSVSLD]]DFRPVLEVXWLVUXIDOOSFWKRPH
ˢ˿˵˶́˷˱˾˹˶˼˶˻̇˹˹ 
▫ Многоядерные процессоры и 
многопроцессорные вычислительные 
системы (ВС). 
▫ SMP/NUMA-системы. 
▫ Аппаратная многопоточность (SMT, 
HyperTreading) 
▫ Показатели эффективности ВС. 
▫ Цели и задачи создания многопоточных 
программ 
▫ Процессы и потоки
ˑ́̆˹̃˶˻̃̄́˱˽˾˿˴˿̀́˿̇˶̂̂˿́˾̌̆˳̌̈˹̂˼˹̃˶˼̍˾̌̆̂˹̂̃˶˽ 
Одноядерный 
процессор 
Параллелизм 
уровня инструкций 
(ILP) 
Одноядерный процессор 
c поддержкой аппаратной 
многопоточности 
(Intel HyperThreading, 
параллелизм уровня 
инструкций) 
Многопроцессорные 
SMP/NUMA-системы 
Параллелизм уровня 
потоков (TLP) 
Многоядерные 
процессоры 
Параллелизм уровня 
потоков (TLP) 
Многоядерные процессоры 
с поддержкой аппаратной 
многопоточности 
Параллелизм уровня потоков 
(TLP) 
Современные 
SMP/NUMA-системы 
Параллелизм уровня 
потоков (TLP) 
1 2 3 
4 5 6
ˑ́̆˹̃˶˻̃̄́˱ 
˽˾˿˴˿̀́˿̇˶̂̂˿́˾̌̆̂˹̂̃˶˽ 
̂˿˲̊˶˺̀˱˽̐̃̍̏
ˑ́̆˹̃˶˻̃̄́˱̐˵́˱̀́˿̇˶̂̂˿́˱,QWHO 
Логический 
процессор 
Architectural State 
Backend 
Вычислительное 
ядро (Execution 
Engine) 
Кэш- 
память 
(Cache) 
Frontend 
(Fetch, Decode) 
▪ Логический процессор 
(Logical processor) 
представлен архитектурным 
состоянием 
и контроллером прерываний 
(Interrupt controller, APIC) 
▪ Архитектурное состояние 
(Architectural state, AS) включает: 
❑ регистры общего назначения 
(RAX, RBX, …) 
❑ сегментные регистры 
(CS, DS, …), 
❑ управляющие регистры (RFLAGS, 
RIP, GDTR, …) 
❑ X87 FPU-регистры, 
MMX/XMM/YMM-регистры 
❑ MSR-регистры, Time stamp 
counter 
ILP 
Processor 
chip 
❑ Intel64 and IA-32 Architectures 
Software Developer Manuals // 
http://www.intel. 
com/content/dam/www/public/us/en/docu 
ments/manuals/64-ia-32-architectures-software- 
developer-manual-325462.pdf 
▪ Логический процессор – это 
то, что “видит” операционная 
система
ˑ́̆˹̃˶˻̃̄́˱̐˵́˱̀́˿̇˶̂̂˿́˱,QWHO 
▪ Логический процессор 
использует ресурсы 
вычислительного ядра 
(Execution engine) 
▪ Frontend реализует выборку, 
декодирование инструкций, 
поддерживает очередь для 
передачи инструкций в 
Backend 
Логический 
процессор 
Architectural State 
Frontend 
ILP 
(Fetch, Decode) 
Backend 
Вычислительное 
ядро (Execution 
Engine) 
Processor 
chip 
Кэш- 
память 
(Cache) 
▪ Backend – это вычислительное ядро, менеджер, 
распределяющий инструкции 
по исполняющим устройствам ALU, FPU, Load/Store 
▪ Backend реализует параллельное выполнение инструкций 
(Instruction level parallelism – ILP)
ˠ˱́˱˼˼˶˼˹˸˽̄́˿˳˾̐˹˾̂̃́̄˻̇˹˺,QVWUXFWLRQOHYHOSDUDOOHOLVPt,/3
▪ Архитектурные решения для обеспечения параллельного 
выполнения инструкций 
▫ Суперскалярный конвейер (Superscalar pipeline) – исполняющие 
модули конвейера присутствуют в нескольких экземплярах (несколько 
ALU, FPU, Load/Store-модулей) 
▫ Внеочередное исполнение команд (Out-of-order execution) – 
переупорядочивание команд для максимально загрузки ALU, FPU, 
Load/Store (минимизация зависимости по данным между 
инструкциями, выполнение инструкций по готовности их данных) 
▫ SIMD-инструкции – модули ALU, FPU, Load/Store поддерживают 
операции над векторами (инструкции SSE, AVX, AltiVec, NEON SIMD) 
▫ VLIW-архитектура (Very Long Instruction Word) – процессор с широким 
командным словом оперирует с инструкциями, содержащими в себе 
несколько команд, которые можно выполнять параллельно на 
ALU/FPU/Load-Store 
(Intel Itanium, Transmeta Efficeon, Texas Instruments TMS320C6x, ЗАО 
“МЦСТ” Эльбрус)
,QWHO1HKDOHPRUH3LSHOLQH 
Intel 64 CISC macro-instructions 
Instruction Fetch  
PreDecode 
Instruction Queue (IQ) 
Decode 
Rename/Allocate 
Retirement Unit 
(Re-Order 
Buffer) 
Scheduler 
Reservation 
Stations 
Execution Units 
Intel 64 CISC 
macro-instr. 
Execution 
Engine 
(out-of-order) 
ITLB Instruction Cache (32KiB) 
L2 TLB 
L2 Cache 
(256 KiB, 8-way) 
DTLB Data Cache (32KiB) 
L3 
Cache 
Front-End 
Pipeline 
(in-order) 
Nehalem RISC 
micro-operations
,QWHO1HKDOHPRUH3LSHOLQH 
16 
ITLB L1 I-cache (32 KiB, 4-way) 
byte/cycle 
Instruction 
Fetch Unit 
(IFU) 
Pre Decode, 
Prefetch Buffer, 
Instruction Length 
Decoder 
Instruction Queue (IQ) 
(18 entry – 18 instruction max.) 
Instruction Decoding Unit (IDU) 
3 simple + 1 complex 
Simple Complex 
Simple Simple micro-cod 
Decoded Instruction Queue (DIQ, 28 uops. max) 
Loop Stream Detection, Micro-Fusion, Macro- 
Fusion 
Intel64 CISC 
macro-instr. 
Nehalem 
RISC 
micro-operations 
4 micro-ops. 
/cycle 
Unified L2- 
Cache 
6 instr./cycle 
Branch 
Prediction 
Unit (BPU) 
5 instructions/cycle 
4 uops./cycle
,QWHO1HKDOHPRUH3LSHOLQH 
16 
ITLB L1 I-cache (32 KiB, 4-way) 
byte/cycle 
Instruction 
Fetch Unit 
(IFU) 
Pre Decode, 
Prefetch Buffer, 
Instruction Length 
Decoder 
Instruction Queue (IQ) 
(18 entry – 18 instruction max.) 
Instruction Decoding Unit (IDU) 
3 simple + 1 complex 
Simple Complex 
Simple Simple micro-cod 
Decoded Instruction Queue (DIQ, 28 uops. max) 
Loop Stream Detection, Micro-Fusion, Macro- 
Fusion 
Intel64 CISC 
macro-instr. 
Nehalem 
RISC 
micro-operations 
4 micro-ops. 
/cycle 
Unified L2- 
Cache 
6 instr./cycle 
Branch 
Prediction 
Unit (BPU) 
5 instructions/cycle 
4 uops./cycle 
IFU на каждом такте 
выбирает 
из кэша L1 (через ITLB) 
16 байт инструкций и 
передает их на 
предекодирование в Pre 
Decode 
Pre Decode определяет 
длину инструкций, их 
префиксы и типы 
(условный/безусловный 
переход, …) 
и передает информацию 
в Instruction Queue 
1 2
,QWHO1HKDOHPRUH3LSHOLQH 
▪ IDU преобразует Intel64-инструкции в RISC-микрооперации (uops, 
сложные инструкции ITLB преобразуются L1 I-cache в несколько (32 KiB, микроопераций) 
4-way) 
16 
▪ IDU передает микрооперации в очередь DIQ, где выполняется byte/cycle 
поиск 
циклов 
Instruction 
Fetch Unit 
(LSD, для предотвращения их повторного декодирования), слияние 
микроопераций 
(IFU) 
(для увеличения пропускной способности FEP) и другие оптимизации 
▪ Поток RISC-микроопераций передается в исполняющее ядро 
Pre Decode, 
Prefetch Buffer, 
Instruction Length 
Decoder 
Instruction Queue (IQ) 
(18 entry – 18 instruction max.) 
Instruction Decoding Unit (IDU) 
3 simple + 1 complex 
Simple Complex 
Simple Simple micro-cod 
Decoded Instruction Queue (DIQ, 28 uops. max) 
Loop Stream Detection, Micro-Fusion, Macro- 
Fusion 
Intel64 CISC 
macro-instr. 
Nehalem 
RISC 
micro-operations 
4 micro-ops. 
/cycle 
Unified L2- 
Cache 
6 instr./cycle 
Branch 
Prediction 
Unit (BPU) 
5 instructions/cycle 
4 uops./cycle 
3
,QWHO1HKDOHP([HFXWLRQRUH 
Frontend Pipeline (DIQ) 
4 micro-ops./cycle 
Register Renaming, Resource Allocation (RRRA) 
Retirement Unit (RU), 
ReOrder Buffer (ROB, 128 
uops) 
Unified Reservation Station (dynamic scheduler, 36 micro-ops) 
Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 
Int. ALU, 
Shift 
FMUL, FDIV 
SSE Int. 
ALU, Int. 
Shuffles 
Int. ALU, 
LEA 
FP Add 
Complex 
Int. 
SSE Int. Mul 
Load 
Store 
Address 
Store Data 
Int. ALU, 
Shift 
Branch 
FP Shuffle 
SSE Int. 
ALU, Int. 
Shuffles 
Memory Order Buffer (MOB) 
▪ 6 micro-ops./cycle Data TLB 
L2 TLB 
L1 Data Cache (32 KiB) L2 
Cache
,QWHO1HKDOHP([HFXWLRQRUH 
Frontend Pipeline (DIQ) 
4 micro-ops./cycle 
Register Renaming, Resource Allocation (RRRA) 
Retirement Unit (RU), 
ReOrder Buffer (ROB, 128 
uops) 
Resource Allocation – выделяет 
для поступающих 
микроопераций блоки 
в Re-Order Buffer, Reservation 
Station, привязывает 
микрооперации к порту выдачи 
(dispatch port) 
Register Renaming – 
переименовывает 
архитектурные регистры (RAX, 
RBX, …), используемые в 
микрооперации в 
микроархитектурные регистры 
для предотвращения конфликтов 
данных 
(Data hazards) 
Unified Reservation Station (dynamic scheduler, 36 micro-ops) 
Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 
Int. ALU, 
Shift 
FMUL, FDIV 
SSE Int. 
ALU, Int. 
Shuffles 
Int. ALU, 
LEA 
FP Add 
Complex 
Int. 
SSE Int. Mul 
Load 
Store 
Address 
Store Data 
Int. ALU, 
Shift 
Branch 
FP Shuffle 
SSE Int. 
ALU, Int. 
Shuffles 
Memory Order Buffer (MOB) 
▪ 6 micro-ops./cycle Data TLB 
L2 TLB 
L1 Data Cache (32 KiB) L2 
Cache 
4
,QWHO1HKDOHP([HFXWLRQRUH 
Frontend Pipeline (DIQ) 
4 micro-ops./cycle 
Register Renaming, Resource Allocation (RRRA) 
Retirement Unit (RU), 
ReOrder Buffer (ROB, 128 
uops) 
Unified Reservation Station (dynamic scheduler, 36 micro-ops) 
Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 
▪ URS – пул Int. из ALU, 
36 микроопераций Int. ALU, 
Load 
+ динамический Store 
планировщик 
Int. ALU, 
Store Data 
Shift 
LEA 
Address 
Shift 
▪ Если операнды микрооперации готовы, она направляется на одно их 
исполняющих FMUL, FDIV 
устройств FP Add 
– выполнение по готовности данных Branch 
(максимум 6 
микроопераций/такт Complex 
– 6 портов) 
SSE Int. 
▪ URS реализует ALU, Int. 
разрешения Int. 
некоторых конфликтов данных – передает 
результат Shuffles 
выполненной SSE Int. операции Mul 
напрямую на вход другой (если требуется, 
FP Shuffle 
SSE Int. 
ALU, Int. 
Shuffles 
Memory Order Buffer (MOB) 
▪ 6 micro-ops./cycle Data TLB 
L2 TLB 
L1 Data Cache (32 KiB) L2 
Cache 
forwarding, bypass) 
5
,QWHO1HKDOHP([HFXWLRQRUH 
Frontend Pipeline (DIQ) 
4 micro-ops./cycle 
Register Renaming, Resource Allocation (RRRA) 
Retirement Unit (RU), 
ReOrder Buffer (ROB, 128 
uops) 
▪ ROB – хранит микрооперации с 
их состояниями в исходном 
порядке (in-order) 
▪ RU – отслеживает, чтобы запись 
результатов 
в архитектурные регистры 
выполнялась 
в прямой последовательности 
Unified Reservation Station (dynamic scheduler, 36 micro-ops) 
Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 
Int. ALU, 
Shift 
FMUL, FDIV 
SSE Int. 
ALU, Int. 
Shuffles 
Int. ALU, 
LEA 
FP Add 
Complex 
Int. 
SSE Int. Mul 
Load 
Store 
Address 
Store Data 
Int. ALU, 
Shift 
(исходной программы) 
▪ Выполнение Intel64-Branch 
инструкции 
считается завершенным, если 
FP Shuffle 
а) все её микрооперации 
SSE Int. 
выполнены, 
ALU, Int. 
б) все более ранние Shuffles 
операции 
завершены 
Memory Order Buffer (MOB) 
▪ 6 micro-ops./cycle Data TLB 
L2 TLB 
L1 Data Cache (32 KiB) L2 
Cache 
6
˟˵˾˿˳́˶˽˶˾˾˱̐˽˾˿˴˿̀˿̃˿̈˾˿̂̃̍6LPXOWDQHRXV0XOWLWKUHDGLQJ
▪ Одновременная многопоточность 
(Simultaneous multithreading – SMT, hardware 
multithreading) — технология, позволяющая выполнять 
инструкции из нескольких потоков выполнения (программ) 
на одном суперскалярном конвейере 
▪ Потоки разделяют один суперскалярный конвейер 
процессора 
(ALU, FPU, Load/Store) 
▪ SMT позволяет повысить эффективность использования 
модулей суперскалярного процессора (ALU, FPU, Load/Store) 
за счет наличия большего количества инструкций из разных 
потоков выполнения 
(ниже вероятность зависимости по данным) 
Thread 1 Thread 2 
Superscalar 
pipeline 
▪ Примеры реализации: 
❑ IBM ACS-360 (1968 г.), DEC Alpha 21464 (1999 г., 4-way SMT) 
❑ Intel Pentium 4 (2002 г., Intel Hyper-Threading, 2-way SMT) 
❑ Intel Xeon Phi (4-way SMT), Fujitsu Sparc64 VI (2-way SMT), IBM POWER8 
Разделение ресурсов 
ALU, FPU, Load/Store 
(8-way SMT)
,QWHO+SHU7KUHDGLQJ7HFKQRORJ 
ILP 
Логический 
процессор 
Architectural State 
http://www.intel.ru/content/www/ru/ru/architecture-and-technology/ 
hyper-threading/hyper-threading-technology. 
html 
Логический 
процессор 
Architectural State 
Backend 
Вычислительное 
ядро (Execution 
Engine) 
Кеш-память 
(Cache) 
Frontend 
(Fetch, Decode) 
Chip 
▪ Architectural state + 
Interrupt controller = 
Logical processor 
▪ 2 потока разделяют 
суперскалярный конвейер 
▪ Ускорение (Speedup) ~ 30 % 
▪ Architectural state = { 
❑ Регистры общего назначения 
(RAX, RBX, RCX, …) 
❑ Сегментные регистры (CS, DS, 
…), 
❑ Управляющие регистры 
(RFLAGS, RIP, GDTR) 
❑ X87 FPU-регистры, 
MMX/XMM/YMM-регистры 
❑ MSR-регистры, Time stamp 
counter 
}
˝˾˿˴˿̀́˿̇˶̂̂˿́˾̌˶603̂˹̂̃˶˽̌ 
Cache 
CPU 1 
Shared memory (RAM) 
Cache 
CPU 2 
Cache 
CPU N 
I/O 
Bus 
Arbiter 
System bus 
▪ Процессоры SMP-системы имеют одинаковое время доступа к 
разделяемой памяти (симметричный доступ) 
▪ Системная шина (System bus) – это узкое место, ограничивающее 
масштабируемость вычислительного узла
˝˾˿˴˿̀́˿̇˶̂̂˿́˾̌˶180$̂˹̂̃˶˽̌$0'
▪ NUMA (Non-Uniform Memory Architecture) – это архитектура вычислительной 
системы 
с неоднородным доступом к разделяемой памяти 
▪ Процессоры сгруппированы в NUMA-узлы со своей локальной памятью 
▪ Доступ к локальной памяти NUMA-узла занимает меньше времени по сравнению 
с временем доступом к памяти удаленных процессоров 
Remote access 
(slow) 
Local access 
(fast) 
▪ 4-х процессорная NUMA-система 
▪ Каждый процессор имеет 
интегрированный контроллер 
и несколько банков памяти 
▪ Процессоры соединены шиной 
Hyper-Transport 
(системы на базе процессоров AMD) 
▪ Доступ к удаленной памяти 
занимает больше времени 
(для Hyper-Transport ~ на 30%, 2006)
˝˾˿˴˿̀́˿̇˶̂̂˿́˾̌˶180$̂˹̂̃˶˽̌,QWHO
▪ 4-х процессорная 
NUMA-система 
▪ Каждый процессор 
имеет интегрированный 
контроллер и несколько 
банков памяти 
▪ Процессоры соединены 
шиной Intel QuickPath 
Interconnect (QPI) – 
решения на базе 
процессоров Intel 
CPU 0 CPU 1 
Memory Memory 
Intel Nehalem based systems with QPI 
2-way Xeon 5600 (Westmere) 6-core, 2 IOH
ˠ˿˼˹̃˹˻˱̄̀́˱˳˼˶˾˹̐̀˱˽̐̃˹180$̂˹̂̃˶˽̌ 
▪ Политики управления памятью можно задавать 
в настройках BIOS/UEFI: 
▪ NUMA Mode – в системе присутствует 
несколько 
NUMA-узлов, у каждого узла имеется своя 
локальная память (local), операционная система 
учитывает топологию системы при выделении 
памяти 
▪ Node Interleave – память циклически 
выделяется со всех NUMA-узлов (чередование), 
операционная система “видит” NUMA-систему 
как SMP-машину 
Memory latency and bandwidth accessing local, 
remote memory for a PowerEdge R610 server 
(Dual Intel Xeon X5550 Nehalem, 6 x 4GB 1333 
MHz RDIMMS)
˝˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌0XOWLFRUHSURFHVVRUV
Логический процессор 
Architectural State 
Backend 
Вычислительное ядро 
(Execution Engine) 
Core 0 Core 1 
Кэш- 
память 
(Cache) 
Frontend 
(Fetch, Decode) 
ILP 
Сhip 
Логический процессор 
Architectural State 
Backend 
Вычислительное ядро 
(Execution Engine) 
Кэш- 
память 
(Cache) 
Frontend 
(Fetch, Decode) 
ILP 
TLP 
▪ Процессорные ядра размещены на одном чипе (Processor chip) 
▪ Ядра процессора могу разделять некоторые ресурсы 
(например, кэш-память) 
▪ Многоядерный процессор реализует параллелизм уровня потоков 
(Thread level parallelism – TLP)
˝˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌̂̀˿˵˵˶́˷˻˿˺607 
Логический 
процессор 
Architectural State 
Backend 
Вычислительное ядро 
(Execution Engine) 
Кэш- 
память 
(Cache) 
Frontend 
(Fetch, Decode) 
ILP 
Логический 
процессор 
Architectural 
State 
Backend 
Вычислительное ядро 
(Execution Engine) 
Кэш- 
память 
(Cache) 
Frontend 
(Fetch, Decode) 
ILP 
TLP 
Логический 
процессор 
Architectural State 
Логический 
процессор 
Architectural 
State 
▪ Многоядерный процессор может поддерживать одновременную многопоточность 
(Simultaneous multithreading – SMT, Intel Hyper-threading, Fujitsu Vertical 
Multithreading) 
▪ Каждое ядро может выполнять несколько потоков на своем суперскалярном 
конвейере (2-way SMT, 4-way SMT, 8-way SMT) 
▪ Операционная система представляет каждый SMT-поток как логический процессор
˝˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌̂̀˿˵˵˶́˷˻˿˺607 
Thread 0 Thread Level Parallelism + Thread 1 
Логический 
процессор 
Architectural State 
Backend 
Вычислительное ядро 
(Execution Engine) 
Кэш- 
память 
(Cache) 
Frontend 
(Fetch, Decode) 
ILP 
Логический 
процессор 
Architectural 
State 
Backend 
Вычислительное ядро 
(Execution Engine) 
Кэш- 
память 
(Cache) 
Frontend 
(Fetch, Decode) 
ILP 
TLP 
Логический 
процессор 
Architectural State 
Логический 
процессор 
Architectural 
State 
Instruction Level Parallelism 
▪ Операционная система видит 4 логических процессора 
▪ Потоки 0 и 1 выполняются на суперскалярных конвейерах разных ядер 
▪ Задействован параллелизм уровня потоков (TLP) и инструкций (ILP)
ˢ˽˱́̃̅˿˾̌ 
Apple iPhone 5S 
▪ Dual-core Apple A7 (CPU A7 + GPU M7) 
(CPU A7 1.3 GHz, 64-bit ARMv8-A) 
▪ SIMD: 128-bit wide NEON 
▪ L1 cache: 
per core 64 KB L1i, 64 KB L1d 
▪ L2 cache: shared 1 MB 
▪ L3 cache: 4 MB 
▪ Technology process: 28 nm (manufactured 
by Samsung) 
https://www.apple.com/ru/iphone-5s/specs/
ˢ˽˱́̃̅˿˾̌ 
Samsung Galaxy S4 (GT-I9505) 
▪ Quad-core Qualcomm Snapdragon 600 
(1.9 GHz with LTE, ARMv7, CPU Krai 300) 
▪ Конвейер (Pipeline): 11 stage integer pipeline 
(3-way decode, 4-way out-of-order speculative issue superscalar) 
▪ SIMD: 128-bit wide NEON 
▪ L0 cache: 4 KB + 4 KB direct mapped 
▪ L1 cache: 16 KB + 16 KB 4-way set associative 
▪ L2 cache: 2 MB 8-way set associative 
▪ Technology process: 28 nm 
http://www.samsung.com/ru/business/business-products/mobile-devices/smartphone/GT-I9505ZRFSER
ˢ̀˶̇˹˱˼˹˸˹́˿˳˱˾˾̌˶̄̂˻˿́˹̃˶˼˹,QWHO;HRQ3KL 
▪ Intel Xeon Phi (Intel MIC): 64 cores Intel P54C 
(Pentium) 
▪ Pipeline: in-order, 4-way SMT, 512-bit SIMD 
▪ Кольцевая шина (1024 бит, ring bus) для связи 
ядер 
и контроллера памяти GDDR5 
▪ Устанавливается в PCI Express слот 
The Tianhe-2 Xeon Phi drawer in action 
http://www.theregister.co. 
uk/Print/2013/06/10/inside_chinas_tianhe2_massiv 
e_hybrid_supercomputer/ 
http://www.intel.ru/content/www/ru/ru/processors/xeon/xeon-phi-detail. 
html 
SMP-система 
256 логических 
процессоров
ˢ̀˶̇˹˱˼˹˸˹́˿˳˱˾˾̌˶̄̂˻˿́˹̃˶˼˹*UDSKLFV3URFHVVLQJ8QLW 
▪ Graphics Processing Unit (GPU) – графический процессор, 
специализированный многопроцессорный ускоритель с общей памятью 
▪ Большая часть площади чипа занята элементарными ALU/FPU/Load/Store 
модулями 
▪ Устройство управления (Control unit) относительно простое по сравнению 
с CPU 
NVIDIA GeForce GTX 780 
(Kepler, 2304 cores, 
GDDR5 3 GB) 
AMD Radeon HD 8970 
(2048 cores, GDDR5 3 GB)
ˢ̀˶̇˹˱˼˹˸˹́˿˳˱˾˾̌˶˽˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌ 
Sony Playstation 3 
IBM Cell 
(2-way SMT PowerPC 
core + 6 SPE) 
Microsoft XBox 360 
IBM Xenon 
(3 cores with 2-way 
SMT) 
Tilera TILEPro64 
(64 cores, VLIW, 
mesh) 
Cisco Routers 
MIPS 
Multi-core 
processors
ˢ̀˶̇˹˱˼˹˸˹́˿˳˱˾˾̌˶˽˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌ 
▪ Как (на чем) разрабатывать программы для такого 
количества 
многоядерных архитектур? 
▪ Как быть с переносимостью кода программ между 
платформами? 
▪ Как быть с переносимостью производительности 
программ? 
▪ Все ли алгоритмы эффективно распараллеливаются? 
Concurrency is the next major revolution 
in how we write software 
-- Herb Sutter 
Herb Sutter. The Free Lunch Is Over: 
A Fundamental Turn Toward Concurrency in Software // 
http://www.gotw.ca/publications/concurrency-ddj.htm
˝˿˵˶˼̍˱́̆˹̃˶˻̃̄́̌˓ˢ 
̂˿˲̊˶˺̀˱˽̐̃̍̏
˞˱˹˳˾˱̐˽˿˵˶˼̍˓ˢ̂˿˲̊˶˺̀˱˽̐̃̍̏ 
Память 
ЭП ЭП ЭП ЭП 
Процессоры соединены непосредственно с памятью, все 
взаимодействия через чтение/запись из памяти 
Предполагается, что модель согласованности памяти 
соответствует порядку операций в программе: записи и 
чтения происходят так, как это выполняется в программе
˞˱˹˳˾˱̐˽˿˵˶˼̍˓ˢ̂˿˲̊˶˺̀˱˽̐̃̍̏ 
Память 
ЭП ЭП ЭП ЭП 
▪ процессоры выполняют процессы 
▪ процессы не синхронизованы 
▪ методы для синхронизации процессов 
▪ процессы обмениваются информацией через общую 
память 
▪ методы для разделения памяти между процессами
ˡ˶˱˼̍˾̌˶˱́̆˹̃˶˻̃̄́̌̂˿˲̊˶˺̀˱˽̐̃̍̏ 
Память 
кэш 
ЭП ЭП ЭП ЭП 
Кэш: небольшая, быстрая память, расположенная 
близко к процессору. Сохраняет из основной памяти 
блоки, которые затем используются при 
вычислениях. 
Буфер между процессором и основной памятью.
ˡ˶˱˼̍˾̌˶˱́̆˹̃˶˻̃̄́̌̂˿˲̊˶˺̀˱˽̐̃̍̏ 
Память 
кэш 
ЭП ЭП ЭП ЭП 
Тип памяти Ёмкость Время доступа 
Основная память гигабайты  100 циклов 
Кэш килобайты, мегабайты 1-20 циклов 
Регистры 0-1 циклов
˝˾˿˴˿̄́˿˳˾˶˳˾˱̐̂˹̂̃˶˽˱˻̎̉˱ 
Память 
кэш 
кэш 
Д И 
Уровень 3 
Уровень 2 
Уровень 1 
ЭП ЭП ЭП ЭП 
2-3 уровня + специализированные кэши, TLB, кэш инструкций и т.д.
180$̂˹̂̃˶˽̌ 
Память 
Память 
кэш 
кэш 
Д И 
Уровень 3 
Уровень 2 
Уровень 1 
ЭП ЭП ЭП ЭП 
Кэш решает проблему “узкого места”. При этом изменения в 
кэше могут реально применяться в произвольном порядке.
ˑ˲̂̃́˱˻̇˹̐̀˱˽̐̃˹ 
П Память 
кэш 
Однопроцессорная 
ЭВМ: система памяти и 
процессор позволяют 
обеспечить абстракцию 
памяти. 
Память 
кэш 
кэш 
Д И 
Уровень 3 
Уровень 2 
Уровень 1 
ЭП ЭП ЭП ЭП 
ЭП 
ВС с общей памятью: 
трудно обеспечить 
абстракцию единой 
однородной памяти.
ˑ˲̂̃́˱˻̇˹̐̀˱˽̐̃˹̀́˿˲˼˶˽̌ 
Память 
Память 
кэш 
кэш 
Д И 
Уровень 3 
Уровень 2 
Уровень 1 
ЭП ЭП ЭП ЭП 
▪ Что случится, если один и тот же адрес находится в разных 
кэшах? 
▪ Что происходит при изменении записи в один из кэшей одним из 
процессоров? 
▪ Несколько процессоров записывают или читают из одного 
адреса?
ˑ˲̂̃́˱˻̇˹̐̀˱˽̐̃˹̀́˿˲˼˶˽̌ 
Память 
кэш 
Д И 
кэш 
Д И Д И Д И 
ЭП ЭП ЭП ЭП
ˑ˲̂̃́˱˻̇˹̐̀˱˽̐̃˹̀́˿˲˼˶˽̌ 
Память 
Память 
кэш 
кэш 
Д И 
Уровень 3 
Уровень 2 
Уровень 1 
ЭП ЭП ЭП ЭП 
▪ Что случится, если один и тот же адрес находится в разных 
кэшах? 
Проблема когерентности кэша 
▪ Что происходит при изменении записи в один из кэшей одним из 
процессоров? 
▪ Несколько процессоров записывают или читают из одного 
адреса?
ˠ́˿̇˶̂̂̌˹̀˿̃˿˻˹
ˠ́˿̇˶̂̂̌˹̀˿̃˿˻˹˿̀˶́˱̇˹˿˾˾˿˺̂˹̂̃˶˽̌ 
Инструкции 
(Instructions) 
Инициализированные 
данные (Initialized data) 
ELF/PE 
executable file 
Исполняемый 
файл (Image) на 
носителе 
информации 
Memory (RAM) 
Инструкции 
(Instructions) 
Инициализированные 
данные (Initialized data) 
Неинициализированные 
данные (Uninitialized data) 
Данные библиотек 
(Library data) 
Куча (Heap, Virtual Memory) 
Инструкции 
библиотек 
(Library instructions) 
Stack 
Registers 
Поток 0 
(Thread 0) 
▪ Процесс 
(Process) – 
запущенный 
исполняемый 
файл (образ, 
image) 
▪ После запуска 
процесс владеет 
одним потоком 
выполнения 
(thread)
˝˾˿˴˿̀˿̃˿̈˾̌˺̀́˿̇˶̂̂ 
Memory (RAM) 
Инструкции 
(Instructions) 
Инициализированные 
данные (Initialized data) 
Неинициализированные 
данные (Uninitialized data) 
Данные библиотек 
(Library data) 
Куча (Heap, Virtual Memory) 
Инструкции библиотек 
(Library instructions) 
Stack 
Registers 
Поток 0 
(Thread 0) 
Stack 
Registers 
Поток 1 
(Thread 1) 
Stack 
Registers 
Поток 2 
(Thread 2) 
Stack 
Registers 
Поток 3 
(Thread 3) 
Stack 
Registers 
Поток 4 
(Thread 4) 
Stack 
Registers 
Поток 5 
(Thread 5) 
▪ Поток (тред, нить) - независимый поток инструкций, выполнение которых 
планируется ОС. 
▪ Поток - наименьшая единица, которую можно планировать независимо.
˝˾˿˴˿̀˿̃˿̈˾̌˺̀́˿̇˶̂̂ 
Memory (RAM) 
Инструкции 
(Instructions) 
Инициализированные 
данные (Initialized data) 
Неинициализированные 
данные (Uninitialized data) 
Данные библиотек 
(Library data) 
Куча (Heap, Virtual Memory) 
Инструкции библиотек 
(Library instructions) 
Stack 
Registers 
Поток 0 
(Thread 0) 
Stack 
Registers 
Поток 1 
(Thread 1) 
Stack 
Registers 
Поток 2 
(Thread 2) 
Stack 
Registers 
Поток 3 
(Thread 3) 
Stack 
Registers 
Поток 4 
(Thread 4) 
Stack 
Registers 
Поток 5 
(Thread 5) 
▪ Каждый поток имеет свой стек и контекст (context) – память для хранения 
значения архитектурных регистров при переключении контекстов (context 
switching) операционной системой 
▪ Куча процесса (heap), инструкции, статические данные (инициализированные) 
являются общими для всех потоков
RQFXUUHQFƧ3DUDOOHOLVP 
▪ Concurrency (одновременность) – 
два и более потоков выполняются 
разделяя одно процессорное ядро 
▪ Операционная система реализует 
режим разделения времени ядра 
процессора (time sharing) 
▪ Ускорение вычислений отсутствует 
▪ Зачем? 
▪ Обеспечение отзывчивости 
интерфейса, совмещение 
ввода-вывода и вычислений, ... 
18 февраля 2014 г. 
▪ Parallelism (параллелизм) – 
каждый поток выполняется на 
отдельном ядре процессора 
(нет конкуренции за 
вычислительные ресурсы) 
▪ Вычисления выполняются 
быстрее
RQFXUUHQFƧ3DUDOOHOLVP 
Суперскалярный 
процессор 
Мультипроцессор Hyperthreading
˟˲˸˿́˲˹˲˼˹˿̃˶˻˹ 
326,;7KUHDGV
326,;7KUHDGV3WKUHDGV

More Related Content

What's hot

ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Mikhail Kurnosov
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Mikhail Kurnosov
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Mikhail Kurnosov
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Mikhail Kurnosov
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Mikhail Kurnosov
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Mikhail Kurnosov
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusMikhail Kurnosov
 
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Mikhail Kurnosov
 
Лекция 9. Программирование GPU
Лекция 9. Программирование GPUЛекция 9. Программирование GPU
Лекция 9. Программирование GPUMikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияAlexey Paznikov
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Mikhail Kurnosov
 

What's hot (20)

ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk Plus
 
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
 
Лекция 9. Программирование GPU
Лекция 9. Программирование GPUЛекция 9. Программирование GPU
Лекция 9. Программирование GPU
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
 

Similar to ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью

Лекция 1. Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1. Архитектурно-ориентированная оптимизация программного обеспечения (...Лекция 1. Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1. Архитектурно-ориентированная оптимизация программного обеспечения (...Mikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системpianist2317
 
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Mikhail Kurnosov
 
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Mikhail Kurnosov
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipARCCN
 
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...Mikhail Kurnosov
 
prezlec_Історія.ppt
prezlec_Історія.pptprezlec_Історія.ppt
prezlec_Історія.pptssusere2bc36
 
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)Ontico
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютерыnastena07051995
 
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Ontico
 
Маршрутизатор ASR1000
Маршрутизатор ASR1000Маршрутизатор ASR1000
Маршрутизатор ASR1000Cisco Russia
 
033
033033
033JIuc
 
Обзор современных микроконтроллеров и их архитектур
Обзор современных микроконтроллеров и их архитектурОбзор современных микроконтроллеров и их архитектур
Обзор современных микроконтроллеров и их архитектурIoT Community
 

Similar to ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью (20)

Лекция 1. Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1. Архитектурно-ориентированная оптимизация программного обеспечения (...Лекция 1. Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1. Архитектурно-ориентированная оптимизация программного обеспечения (...
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Лекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и системЛекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и систем
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и систем
 
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
 
3
33
3
 
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
 
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
Лекция 1: Архитектурно-ориентированная оптимизация программного обеспечения (...
 
prezlec_Історія.ppt
prezlec_Історія.pptprezlec_Історія.ppt
prezlec_Історія.ppt
 
supercluster
superclustersupercluster
supercluster
 
[DD] 10. Memory
[DD] 10. Memory[DD] 10. Memory
[DD] 10. Memory
 
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютеры
 
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
 
Маршрутизатор ASR1000
Маршрутизатор ASR1000Маршрутизатор ASR1000
Маршрутизатор ASR1000
 
033
033033
033
 
Обзор современных микроконтроллеров и их архитектур
Обзор современных микроконтроллеров и их архитектурОбзор современных микроконтроллеров и их архитектур
Обзор современных микроконтроллеров и их архитектур
 
sau
sausau
sau
 

More from Alexey Paznikov

Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Alexey Paznikov
 
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Alexey Paznikov
 
Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIAlexey Paznikov
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Alexey Paznikov
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаAlexey Paznikov
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsAlexey Paznikov
 
ПВТ - осень 2014 - лекция 1а - Описание курса
ПВТ - осень 2014 - лекция 1а - Описание курсаПВТ - осень 2014 - лекция 1а - Описание курса
ПВТ - осень 2014 - лекция 1а - Описание курсаAlexey Paznikov
 
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...Alexey Paznikov
 
ТФРВС - весна 2014 - лекция 11
ТФРВС - весна 2014 - лекция 11ТФРВС - весна 2014 - лекция 11
ТФРВС - весна 2014 - лекция 11Alexey Paznikov
 

More from Alexey Paznikov (20)

Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
 
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
 
Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPI
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курса
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
 
ПВТ - осень 2014 - лекция 1а - Описание курса
ПВТ - осень 2014 - лекция 1а - Описание курсаПВТ - осень 2014 - лекция 1а - Описание курса
ПВТ - осень 2014 - лекция 1а - Описание курса
 
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
 
ТФРВС - весна 2014 - лекция 11
ТФРВС - весна 2014 - лекция 11ТФРВС - весна 2014 - лекция 11
ТФРВС - весна 2014 - лекция 11
 

ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью

  • 2. ˜˶˻̇˹̐ˑ́̆˹̃˶˻̃̄́˱ ˳̌̈˹̂˼˹̃˶˼̍˾̌̆̂˹̂̃˶˽ ̂˿˲̊˶˺̀˱˽̐̃̍̏ ˠ˱˸˾˹˻˿˳ˑ˼˶˻̂˶˺ˑ˼˶˻̂˱˾˵́˿˳˹̈ ˛˱̅˶˵́˱˳̌̈˹̂˼˹̃˶˼̍˾̌̆̂˹̂̃˶˽ˢ˹˲˔ˤˣ˙ ˢ˱˺̃˻̄́̂˱KWWSFSFWVLEVXWLVUXaDSD]QLNRYWHDFKLQJ ˓˿̀́˿̂̌KWWSVSLD]]DFRPVLEVXWLVUXIDOOSFWKRPH
  • 3. ˢ˿˵˶́˷˱˾˹˶˼˶˻̇˹˹ ▫ Многоядерные процессоры и многопроцессорные вычислительные системы (ВС). ▫ SMP/NUMA-системы. ▫ Аппаратная многопоточность (SMT, HyperTreading) ▫ Показатели эффективности ВС. ▫ Цели и задачи создания многопоточных программ ▫ Процессы и потоки
  • 4. ˑ́̆˹̃˶˻̃̄́˱˽˾˿˴˿̀́˿̇˶̂̂˿́˾̌̆˳̌̈˹̂˼˹̃˶˼̍˾̌̆̂˹̂̃˶˽ Одноядерный процессор Параллелизм уровня инструкций (ILP) Одноядерный процессор c поддержкой аппаратной многопоточности (Intel HyperThreading, параллелизм уровня инструкций) Многопроцессорные SMP/NUMA-системы Параллелизм уровня потоков (TLP) Многоядерные процессоры Параллелизм уровня потоков (TLP) Многоядерные процессоры с поддержкой аппаратной многопоточности Параллелизм уровня потоков (TLP) Современные SMP/NUMA-системы Параллелизм уровня потоков (TLP) 1 2 3 4 5 6
  • 6. ˑ́̆˹̃˶˻̃̄́˱̐˵́˱̀́˿̇˶̂̂˿́˱,QWHO Логический процессор Architectural State Backend Вычислительное ядро (Execution Engine) Кэш- память (Cache) Frontend (Fetch, Decode) ▪ Логический процессор (Logical processor) представлен архитектурным состоянием и контроллером прерываний (Interrupt controller, APIC) ▪ Архитектурное состояние (Architectural state, AS) включает: ❑ регистры общего назначения (RAX, RBX, …) ❑ сегментные регистры (CS, DS, …), ❑ управляющие регистры (RFLAGS, RIP, GDTR, …) ❑ X87 FPU-регистры, MMX/XMM/YMM-регистры ❑ MSR-регистры, Time stamp counter ILP Processor chip ❑ Intel64 and IA-32 Architectures Software Developer Manuals // http://www.intel. com/content/dam/www/public/us/en/docu ments/manuals/64-ia-32-architectures-software- developer-manual-325462.pdf ▪ Логический процессор – это то, что “видит” операционная система
  • 7. ˑ́̆˹̃˶˻̃̄́˱̐˵́˱̀́˿̇˶̂̂˿́˱,QWHO ▪ Логический процессор использует ресурсы вычислительного ядра (Execution engine) ▪ Frontend реализует выборку, декодирование инструкций, поддерживает очередь для передачи инструкций в Backend Логический процессор Architectural State Frontend ILP (Fetch, Decode) Backend Вычислительное ядро (Execution Engine) Processor chip Кэш- память (Cache) ▪ Backend – это вычислительное ядро, менеджер, распределяющий инструкции по исполняющим устройствам ALU, FPU, Load/Store ▪ Backend реализует параллельное выполнение инструкций (Instruction level parallelism – ILP)
  • 9. ▪ Архитектурные решения для обеспечения параллельного выполнения инструкций ▫ Суперскалярный конвейер (Superscalar pipeline) – исполняющие модули конвейера присутствуют в нескольких экземплярах (несколько ALU, FPU, Load/Store-модулей) ▫ Внеочередное исполнение команд (Out-of-order execution) – переупорядочивание команд для максимально загрузки ALU, FPU, Load/Store (минимизация зависимости по данным между инструкциями, выполнение инструкций по готовности их данных) ▫ SIMD-инструкции – модули ALU, FPU, Load/Store поддерживают операции над векторами (инструкции SSE, AVX, AltiVec, NEON SIMD) ▫ VLIW-архитектура (Very Long Instruction Word) – процессор с широким командным словом оперирует с инструкциями, содержащими в себе несколько команд, которые можно выполнять параллельно на ALU/FPU/Load-Store (Intel Itanium, Transmeta Efficeon, Texas Instruments TMS320C6x, ЗАО “МЦСТ” Эльбрус)
  • 10. ,QWHO1HKDOHPRUH3LSHOLQH Intel 64 CISC macro-instructions Instruction Fetch PreDecode Instruction Queue (IQ) Decode Rename/Allocate Retirement Unit (Re-Order Buffer) Scheduler Reservation Stations Execution Units Intel 64 CISC macro-instr. Execution Engine (out-of-order) ITLB Instruction Cache (32KiB) L2 TLB L2 Cache (256 KiB, 8-way) DTLB Data Cache (32KiB) L3 Cache Front-End Pipeline (in-order) Nehalem RISC micro-operations
  • 11. ,QWHO1HKDOHPRUH3LSHOLQH 16 ITLB L1 I-cache (32 KiB, 4-way) byte/cycle Instruction Fetch Unit (IFU) Pre Decode, Prefetch Buffer, Instruction Length Decoder Instruction Queue (IQ) (18 entry – 18 instruction max.) Instruction Decoding Unit (IDU) 3 simple + 1 complex Simple Complex Simple Simple micro-cod Decoded Instruction Queue (DIQ, 28 uops. max) Loop Stream Detection, Micro-Fusion, Macro- Fusion Intel64 CISC macro-instr. Nehalem RISC micro-operations 4 micro-ops. /cycle Unified L2- Cache 6 instr./cycle Branch Prediction Unit (BPU) 5 instructions/cycle 4 uops./cycle
  • 12. ,QWHO1HKDOHPRUH3LSHOLQH 16 ITLB L1 I-cache (32 KiB, 4-way) byte/cycle Instruction Fetch Unit (IFU) Pre Decode, Prefetch Buffer, Instruction Length Decoder Instruction Queue (IQ) (18 entry – 18 instruction max.) Instruction Decoding Unit (IDU) 3 simple + 1 complex Simple Complex Simple Simple micro-cod Decoded Instruction Queue (DIQ, 28 uops. max) Loop Stream Detection, Micro-Fusion, Macro- Fusion Intel64 CISC macro-instr. Nehalem RISC micro-operations 4 micro-ops. /cycle Unified L2- Cache 6 instr./cycle Branch Prediction Unit (BPU) 5 instructions/cycle 4 uops./cycle IFU на каждом такте выбирает из кэша L1 (через ITLB) 16 байт инструкций и передает их на предекодирование в Pre Decode Pre Decode определяет длину инструкций, их префиксы и типы (условный/безусловный переход, …) и передает информацию в Instruction Queue 1 2
  • 13. ,QWHO1HKDOHPRUH3LSHOLQH ▪ IDU преобразует Intel64-инструкции в RISC-микрооперации (uops, сложные инструкции ITLB преобразуются L1 I-cache в несколько (32 KiB, микроопераций) 4-way) 16 ▪ IDU передает микрооперации в очередь DIQ, где выполняется byte/cycle поиск циклов Instruction Fetch Unit (LSD, для предотвращения их повторного декодирования), слияние микроопераций (IFU) (для увеличения пропускной способности FEP) и другие оптимизации ▪ Поток RISC-микроопераций передается в исполняющее ядро Pre Decode, Prefetch Buffer, Instruction Length Decoder Instruction Queue (IQ) (18 entry – 18 instruction max.) Instruction Decoding Unit (IDU) 3 simple + 1 complex Simple Complex Simple Simple micro-cod Decoded Instruction Queue (DIQ, 28 uops. max) Loop Stream Detection, Micro-Fusion, Macro- Fusion Intel64 CISC macro-instr. Nehalem RISC micro-operations 4 micro-ops. /cycle Unified L2- Cache 6 instr./cycle Branch Prediction Unit (BPU) 5 instructions/cycle 4 uops./cycle 3
  • 14. ,QWHO1HKDOHP([HFXWLRQRUH Frontend Pipeline (DIQ) 4 micro-ops./cycle Register Renaming, Resource Allocation (RRRA) Retirement Unit (RU), ReOrder Buffer (ROB, 128 uops) Unified Reservation Station (dynamic scheduler, 36 micro-ops) Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 Int. ALU, Shift FMUL, FDIV SSE Int. ALU, Int. Shuffles Int. ALU, LEA FP Add Complex Int. SSE Int. Mul Load Store Address Store Data Int. ALU, Shift Branch FP Shuffle SSE Int. ALU, Int. Shuffles Memory Order Buffer (MOB) ▪ 6 micro-ops./cycle Data TLB L2 TLB L1 Data Cache (32 KiB) L2 Cache
  • 15. ,QWHO1HKDOHP([HFXWLRQRUH Frontend Pipeline (DIQ) 4 micro-ops./cycle Register Renaming, Resource Allocation (RRRA) Retirement Unit (RU), ReOrder Buffer (ROB, 128 uops) Resource Allocation – выделяет для поступающих микроопераций блоки в Re-Order Buffer, Reservation Station, привязывает микрооперации к порту выдачи (dispatch port) Register Renaming – переименовывает архитектурные регистры (RAX, RBX, …), используемые в микрооперации в микроархитектурные регистры для предотвращения конфликтов данных (Data hazards) Unified Reservation Station (dynamic scheduler, 36 micro-ops) Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 Int. ALU, Shift FMUL, FDIV SSE Int. ALU, Int. Shuffles Int. ALU, LEA FP Add Complex Int. SSE Int. Mul Load Store Address Store Data Int. ALU, Shift Branch FP Shuffle SSE Int. ALU, Int. Shuffles Memory Order Buffer (MOB) ▪ 6 micro-ops./cycle Data TLB L2 TLB L1 Data Cache (32 KiB) L2 Cache 4
  • 16. ,QWHO1HKDOHP([HFXWLRQRUH Frontend Pipeline (DIQ) 4 micro-ops./cycle Register Renaming, Resource Allocation (RRRA) Retirement Unit (RU), ReOrder Buffer (ROB, 128 uops) Unified Reservation Station (dynamic scheduler, 36 micro-ops) Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 ▪ URS – пул Int. из ALU, 36 микроопераций Int. ALU, Load + динамический Store планировщик Int. ALU, Store Data Shift LEA Address Shift ▪ Если операнды микрооперации готовы, она направляется на одно их исполняющих FMUL, FDIV устройств FP Add – выполнение по готовности данных Branch (максимум 6 микроопераций/такт Complex – 6 портов) SSE Int. ▪ URS реализует ALU, Int. разрешения Int. некоторых конфликтов данных – передает результат Shuffles выполненной SSE Int. операции Mul напрямую на вход другой (если требуется, FP Shuffle SSE Int. ALU, Int. Shuffles Memory Order Buffer (MOB) ▪ 6 micro-ops./cycle Data TLB L2 TLB L1 Data Cache (32 KiB) L2 Cache forwarding, bypass) 5
  • 17. ,QWHO1HKDOHP([HFXWLRQRUH Frontend Pipeline (DIQ) 4 micro-ops./cycle Register Renaming, Resource Allocation (RRRA) Retirement Unit (RU), ReOrder Buffer (ROB, 128 uops) ▪ ROB – хранит микрооперации с их состояниями в исходном порядке (in-order) ▪ RU – отслеживает, чтобы запись результатов в архитектурные регистры выполнялась в прямой последовательности Unified Reservation Station (dynamic scheduler, 36 micro-ops) Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 Int. ALU, Shift FMUL, FDIV SSE Int. ALU, Int. Shuffles Int. ALU, LEA FP Add Complex Int. SSE Int. Mul Load Store Address Store Data Int. ALU, Shift (исходной программы) ▪ Выполнение Intel64-Branch инструкции считается завершенным, если FP Shuffle а) все её микрооперации SSE Int. выполнены, ALU, Int. б) все более ранние Shuffles операции завершены Memory Order Buffer (MOB) ▪ 6 micro-ops./cycle Data TLB L2 TLB L1 Data Cache (32 KiB) L2 Cache 6
  • 19. ▪ Одновременная многопоточность (Simultaneous multithreading – SMT, hardware multithreading) — технология, позволяющая выполнять инструкции из нескольких потоков выполнения (программ) на одном суперскалярном конвейере ▪ Потоки разделяют один суперскалярный конвейер процессора (ALU, FPU, Load/Store) ▪ SMT позволяет повысить эффективность использования модулей суперскалярного процессора (ALU, FPU, Load/Store) за счет наличия большего количества инструкций из разных потоков выполнения (ниже вероятность зависимости по данным) Thread 1 Thread 2 Superscalar pipeline ▪ Примеры реализации: ❑ IBM ACS-360 (1968 г.), DEC Alpha 21464 (1999 г., 4-way SMT) ❑ Intel Pentium 4 (2002 г., Intel Hyper-Threading, 2-way SMT) ❑ Intel Xeon Phi (4-way SMT), Fujitsu Sparc64 VI (2-way SMT), IBM POWER8 Разделение ресурсов ALU, FPU, Load/Store (8-way SMT)
  • 20. ,QWHO+SHU7KUHDGLQJ7HFKQRORJ ILP Логический процессор Architectural State http://www.intel.ru/content/www/ru/ru/architecture-and-technology/ hyper-threading/hyper-threading-technology. html Логический процессор Architectural State Backend Вычислительное ядро (Execution Engine) Кеш-память (Cache) Frontend (Fetch, Decode) Chip ▪ Architectural state + Interrupt controller = Logical processor ▪ 2 потока разделяют суперскалярный конвейер ▪ Ускорение (Speedup) ~ 30 % ▪ Architectural state = { ❑ Регистры общего назначения (RAX, RBX, RCX, …) ❑ Сегментные регистры (CS, DS, …), ❑ Управляющие регистры (RFLAGS, RIP, GDTR) ❑ X87 FPU-регистры, MMX/XMM/YMM-регистры ❑ MSR-регистры, Time stamp counter }
  • 21. ˝˾˿˴˿̀́˿̇˶̂̂˿́˾̌˶603̂˹̂̃˶˽̌ Cache CPU 1 Shared memory (RAM) Cache CPU 2 Cache CPU N I/O Bus Arbiter System bus ▪ Процессоры SMP-системы имеют одинаковое время доступа к разделяемой памяти (симметричный доступ) ▪ Системная шина (System bus) – это узкое место, ограничивающее масштабируемость вычислительного узла
  • 23. ▪ NUMA (Non-Uniform Memory Architecture) – это архитектура вычислительной системы с неоднородным доступом к разделяемой памяти ▪ Процессоры сгруппированы в NUMA-узлы со своей локальной памятью ▪ Доступ к локальной памяти NUMA-узла занимает меньше времени по сравнению с временем доступом к памяти удаленных процессоров Remote access (slow) Local access (fast) ▪ 4-х процессорная NUMA-система ▪ Каждый процессор имеет интегрированный контроллер и несколько банков памяти ▪ Процессоры соединены шиной Hyper-Transport (системы на базе процессоров AMD) ▪ Доступ к удаленной памяти занимает больше времени (для Hyper-Transport ~ на 30%, 2006)
  • 25. ▪ 4-х процессорная NUMA-система ▪ Каждый процессор имеет интегрированный контроллер и несколько банков памяти ▪ Процессоры соединены шиной Intel QuickPath Interconnect (QPI) – решения на базе процессоров Intel CPU 0 CPU 1 Memory Memory Intel Nehalem based systems with QPI 2-way Xeon 5600 (Westmere) 6-core, 2 IOH
  • 26. ˠ˿˼˹̃˹˻˱̄̀́˱˳˼˶˾˹̐̀˱˽̐̃˹180$̂˹̂̃˶˽̌ ▪ Политики управления памятью можно задавать в настройках BIOS/UEFI: ▪ NUMA Mode – в системе присутствует несколько NUMA-узлов, у каждого узла имеется своя локальная память (local), операционная система учитывает топологию системы при выделении памяти ▪ Node Interleave – память циклически выделяется со всех NUMA-узлов (чередование), операционная система “видит” NUMA-систему как SMP-машину Memory latency and bandwidth accessing local, remote memory for a PowerEdge R610 server (Dual Intel Xeon X5550 Nehalem, 6 x 4GB 1333 MHz RDIMMS)
  • 28. Логический процессор Architectural State Backend Вычислительное ядро (Execution Engine) Core 0 Core 1 Кэш- память (Cache) Frontend (Fetch, Decode) ILP Сhip Логический процессор Architectural State Backend Вычислительное ядро (Execution Engine) Кэш- память (Cache) Frontend (Fetch, Decode) ILP TLP ▪ Процессорные ядра размещены на одном чипе (Processor chip) ▪ Ядра процессора могу разделять некоторые ресурсы (например, кэш-память) ▪ Многоядерный процессор реализует параллелизм уровня потоков (Thread level parallelism – TLP)
  • 29. ˝˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌̂̀˿˵˵˶́˷˻˿˺607 Логический процессор Architectural State Backend Вычислительное ядро (Execution Engine) Кэш- память (Cache) Frontend (Fetch, Decode) ILP Логический процессор Architectural State Backend Вычислительное ядро (Execution Engine) Кэш- память (Cache) Frontend (Fetch, Decode) ILP TLP Логический процессор Architectural State Логический процессор Architectural State ▪ Многоядерный процессор может поддерживать одновременную многопоточность (Simultaneous multithreading – SMT, Intel Hyper-threading, Fujitsu Vertical Multithreading) ▪ Каждое ядро может выполнять несколько потоков на своем суперскалярном конвейере (2-way SMT, 4-way SMT, 8-way SMT) ▪ Операционная система представляет каждый SMT-поток как логический процессор
  • 30. ˝˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌̂̀˿˵˵˶́˷˻˿˺607 Thread 0 Thread Level Parallelism + Thread 1 Логический процессор Architectural State Backend Вычислительное ядро (Execution Engine) Кэш- память (Cache) Frontend (Fetch, Decode) ILP Логический процессор Architectural State Backend Вычислительное ядро (Execution Engine) Кэш- память (Cache) Frontend (Fetch, Decode) ILP TLP Логический процессор Architectural State Логический процессор Architectural State Instruction Level Parallelism ▪ Операционная система видит 4 логических процессора ▪ Потоки 0 и 1 выполняются на суперскалярных конвейерах разных ядер ▪ Задействован параллелизм уровня потоков (TLP) и инструкций (ILP)
  • 31. ˢ˽˱́̃̅˿˾̌ Apple iPhone 5S ▪ Dual-core Apple A7 (CPU A7 + GPU M7) (CPU A7 1.3 GHz, 64-bit ARMv8-A) ▪ SIMD: 128-bit wide NEON ▪ L1 cache: per core 64 KB L1i, 64 KB L1d ▪ L2 cache: shared 1 MB ▪ L3 cache: 4 MB ▪ Technology process: 28 nm (manufactured by Samsung) https://www.apple.com/ru/iphone-5s/specs/
  • 32. ˢ˽˱́̃̅˿˾̌ Samsung Galaxy S4 (GT-I9505) ▪ Quad-core Qualcomm Snapdragon 600 (1.9 GHz with LTE, ARMv7, CPU Krai 300) ▪ Конвейер (Pipeline): 11 stage integer pipeline (3-way decode, 4-way out-of-order speculative issue superscalar) ▪ SIMD: 128-bit wide NEON ▪ L0 cache: 4 KB + 4 KB direct mapped ▪ L1 cache: 16 KB + 16 KB 4-way set associative ▪ L2 cache: 2 MB 8-way set associative ▪ Technology process: 28 nm http://www.samsung.com/ru/business/business-products/mobile-devices/smartphone/GT-I9505ZRFSER
  • 33. ˢ̀˶̇˹˱˼˹˸˹́˿˳˱˾˾̌˶̄̂˻˿́˹̃˶˼˹,QWHO;HRQ3KL ▪ Intel Xeon Phi (Intel MIC): 64 cores Intel P54C (Pentium) ▪ Pipeline: in-order, 4-way SMT, 512-bit SIMD ▪ Кольцевая шина (1024 бит, ring bus) для связи ядер и контроллера памяти GDDR5 ▪ Устанавливается в PCI Express слот The Tianhe-2 Xeon Phi drawer in action http://www.theregister.co. uk/Print/2013/06/10/inside_chinas_tianhe2_massiv e_hybrid_supercomputer/ http://www.intel.ru/content/www/ru/ru/processors/xeon/xeon-phi-detail. html SMP-система 256 логических процессоров
  • 34. ˢ̀˶̇˹˱˼˹˸˹́˿˳˱˾˾̌˶̄̂˻˿́˹̃˶˼˹*UDSKLFV3URFHVVLQJ8QLW ▪ Graphics Processing Unit (GPU) – графический процессор, специализированный многопроцессорный ускоритель с общей памятью ▪ Большая часть площади чипа занята элементарными ALU/FPU/Load/Store модулями ▪ Устройство управления (Control unit) относительно простое по сравнению с CPU NVIDIA GeForce GTX 780 (Kepler, 2304 cores, GDDR5 3 GB) AMD Radeon HD 8970 (2048 cores, GDDR5 3 GB)
  • 35. ˢ̀˶̇˹˱˼˹˸˹́˿˳˱˾˾̌˶˽˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌ Sony Playstation 3 IBM Cell (2-way SMT PowerPC core + 6 SPE) Microsoft XBox 360 IBM Xenon (3 cores with 2-way SMT) Tilera TILEPro64 (64 cores, VLIW, mesh) Cisco Routers MIPS Multi-core processors
  • 36. ˢ̀˶̇˹˱˼˹˸˹́˿˳˱˾˾̌˶˽˾˿˴˿̐˵˶́˾̌˶̀́˿̇˶̂̂˿́̌ ▪ Как (на чем) разрабатывать программы для такого количества многоядерных архитектур? ▪ Как быть с переносимостью кода программ между платформами? ▪ Как быть с переносимостью производительности программ? ▪ Все ли алгоритмы эффективно распараллеливаются? Concurrency is the next major revolution in how we write software -- Herb Sutter Herb Sutter. The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software // http://www.gotw.ca/publications/concurrency-ddj.htm
  • 38. ˞˱˹˳˾˱̐˽˿˵˶˼̍˓ˢ̂˿˲̊˶˺̀˱˽̐̃̍̏ Память ЭП ЭП ЭП ЭП Процессоры соединены непосредственно с памятью, все взаимодействия через чтение/запись из памяти Предполагается, что модель согласованности памяти соответствует порядку операций в программе: записи и чтения происходят так, как это выполняется в программе
  • 39. ˞˱˹˳˾˱̐˽˿˵˶˼̍˓ˢ̂˿˲̊˶˺̀˱˽̐̃̍̏ Память ЭП ЭП ЭП ЭП ▪ процессоры выполняют процессы ▪ процессы не синхронизованы ▪ методы для синхронизации процессов ▪ процессы обмениваются информацией через общую память ▪ методы для разделения памяти между процессами
  • 40. ˡ˶˱˼̍˾̌˶˱́̆˹̃˶˻̃̄́̌̂˿˲̊˶˺̀˱˽̐̃̍̏ Память кэш ЭП ЭП ЭП ЭП Кэш: небольшая, быстрая память, расположенная близко к процессору. Сохраняет из основной памяти блоки, которые затем используются при вычислениях. Буфер между процессором и основной памятью.
  • 41. ˡ˶˱˼̍˾̌˶˱́̆˹̃˶˻̃̄́̌̂˿˲̊˶˺̀˱˽̐̃̍̏ Память кэш ЭП ЭП ЭП ЭП Тип памяти Ёмкость Время доступа Основная память гигабайты 100 циклов Кэш килобайты, мегабайты 1-20 циклов Регистры 0-1 циклов
  • 42. ˝˾˿˴˿̄́˿˳˾˶˳˾˱̐̂˹̂̃˶˽˱˻̎̉˱ Память кэш кэш Д И Уровень 3 Уровень 2 Уровень 1 ЭП ЭП ЭП ЭП 2-3 уровня + специализированные кэши, TLB, кэш инструкций и т.д.
  • 43. 180$̂˹̂̃˶˽̌ Память Память кэш кэш Д И Уровень 3 Уровень 2 Уровень 1 ЭП ЭП ЭП ЭП Кэш решает проблему “узкого места”. При этом изменения в кэше могут реально применяться в произвольном порядке.
  • 44. ˑ˲̂̃́˱˻̇˹̐̀˱˽̐̃˹ П Память кэш Однопроцессорная ЭВМ: система памяти и процессор позволяют обеспечить абстракцию памяти. Память кэш кэш Д И Уровень 3 Уровень 2 Уровень 1 ЭП ЭП ЭП ЭП ЭП ВС с общей памятью: трудно обеспечить абстракцию единой однородной памяти.
  • 45. ˑ˲̂̃́˱˻̇˹̐̀˱˽̐̃˹̀́˿˲˼˶˽̌ Память Память кэш кэш Д И Уровень 3 Уровень 2 Уровень 1 ЭП ЭП ЭП ЭП ▪ Что случится, если один и тот же адрес находится в разных кэшах? ▪ Что происходит при изменении записи в один из кэшей одним из процессоров? ▪ Несколько процессоров записывают или читают из одного адреса?
  • 46. ˑ˲̂̃́˱˻̇˹̐̀˱˽̐̃˹̀́˿˲˼˶˽̌ Память кэш Д И кэш Д И Д И Д И ЭП ЭП ЭП ЭП
  • 47. ˑ˲̂̃́˱˻̇˹̐̀˱˽̐̃˹̀́˿˲˼˶˽̌ Память Память кэш кэш Д И Уровень 3 Уровень 2 Уровень 1 ЭП ЭП ЭП ЭП ▪ Что случится, если один и тот же адрес находится в разных кэшах? Проблема когерентности кэша ▪ Что происходит при изменении записи в один из кэшей одним из процессоров? ▪ Несколько процессоров записывают или читают из одного адреса?
  • 49. ˠ́˿̇˶̂̂̌˹̀˿̃˿˻˹˿̀˶́˱̇˹˿˾˾˿˺̂˹̂̃˶˽̌ Инструкции (Instructions) Инициализированные данные (Initialized data) ELF/PE executable file Исполняемый файл (Image) на носителе информации Memory (RAM) Инструкции (Instructions) Инициализированные данные (Initialized data) Неинициализированные данные (Uninitialized data) Данные библиотек (Library data) Куча (Heap, Virtual Memory) Инструкции библиотек (Library instructions) Stack Registers Поток 0 (Thread 0) ▪ Процесс (Process) – запущенный исполняемый файл (образ, image) ▪ После запуска процесс владеет одним потоком выполнения (thread)
  • 50. ˝˾˿˴˿̀˿̃˿̈˾̌˺̀́˿̇˶̂̂ Memory (RAM) Инструкции (Instructions) Инициализированные данные (Initialized data) Неинициализированные данные (Uninitialized data) Данные библиотек (Library data) Куча (Heap, Virtual Memory) Инструкции библиотек (Library instructions) Stack Registers Поток 0 (Thread 0) Stack Registers Поток 1 (Thread 1) Stack Registers Поток 2 (Thread 2) Stack Registers Поток 3 (Thread 3) Stack Registers Поток 4 (Thread 4) Stack Registers Поток 5 (Thread 5) ▪ Поток (тред, нить) - независимый поток инструкций, выполнение которых планируется ОС. ▪ Поток - наименьшая единица, которую можно планировать независимо.
  • 51. ˝˾˿˴˿̀˿̃˿̈˾̌˺̀́˿̇˶̂̂ Memory (RAM) Инструкции (Instructions) Инициализированные данные (Initialized data) Неинициализированные данные (Uninitialized data) Данные библиотек (Library data) Куча (Heap, Virtual Memory) Инструкции библиотек (Library instructions) Stack Registers Поток 0 (Thread 0) Stack Registers Поток 1 (Thread 1) Stack Registers Поток 2 (Thread 2) Stack Registers Поток 3 (Thread 3) Stack Registers Поток 4 (Thread 4) Stack Registers Поток 5 (Thread 5) ▪ Каждый поток имеет свой стек и контекст (context) – память для хранения значения архитектурных регистров при переключении контекстов (context switching) операционной системой ▪ Куча процесса (heap), инструкции, статические данные (инициализированные) являются общими для всех потоков
  • 52. RQFXUUHQFƧ3DUDOOHOLVP ▪ Concurrency (одновременность) – два и более потоков выполняются разделяя одно процессорное ядро ▪ Операционная система реализует режим разделения времени ядра процессора (time sharing) ▪ Ускорение вычислений отсутствует ▪ Зачем? ▪ Обеспечение отзывчивости интерфейса, совмещение ввода-вывода и вычислений, ... 18 февраля 2014 г. ▪ Parallelism (параллелизм) – каждый поток выполняется на отдельном ядре процессора (нет конкуренции за вычислительные ресурсы) ▪ Вычисления выполняются быстрее
  • 53. RQFXUUHQFƧ3DUDOOHOLVP Суперскалярный процессор Мультипроцессор Hyperthreading
  • 56. ▪ Pthreads - интерфейс для потоков семейства стандартов POSIX ▫ в основе - системные вызовы для создания и синхронизации потоков ▫ поддерживаются UNIX-подобные операционные системы ▫ IEEE POSIX 1003.1c ▪ Pthreads поддерживает: ▫ реализация параллелизма ▫ синхронизация потоков ▫ нет явной поддержки коммуникаций между потоками: поскольку общая память неявная, а указатель на общие данные передаётся в поток
  • 58. Сигнатура: int pthread_create(pthread_t *, const pthread_attr_t *, void * (*)(void *), void *); Пример вызова: errcode = pthread_create(thread_id, thread_attr, thread_func, fun_arg); thread_id - идентификатор потока (для завершения, синхронизации и т.д.) thread_attr - параметры потока (например, минимальный размер стека) thread_func - функция для запуска (принимает и возвращает указатель void*) errcode - код ошибки, ≠ 0, если операция завершилась неудачно
  • 59. 3WKUHDGV̀́˹˽˶́ void* hello(void *foo) { printf(“Hello, world!n”); return NULL; } int main() { pthread_t threads[n]; int ti; for (ti = 0; ti n; ti++) { pthread_create(threads[ti], NULL, hello, NULL); } for (ti = 0; ti n; ti++) { pthread_join(threads[ti], NULL); } }
  • 61. struct bounds { int threadnum; int begin; int end; }; enum { nthreads = 4 }; void *func(void *arg) { struct bounds *mybounds; mybounds = (struct bounds *) arg; printf(hello, i am %d thread, my bounds: %d and %dn, mybounds-threadnum, mybounds-begin, mybounds-end); pthread_exit(NULL); }
  • 63. int main() { struct bounds bounds_arg[nthreads]; pthread_t tid[nthreads]; int ti, rc; for (ti = 0; ti nthreads; ti++) { bounds_arg[ti].threadnum = ti; bounds_arg[ti].begin = ti * 10 + 1; bounds_arg[ti].end = (ti + 1) * 10; rc = pthread_create(tid[ti], NULL, func, bounds_arg[ti]); if (rc != 0) { fprintf(stderr, pthread_create failed); } } for (ti = 0; ti nthreads; ti++) pthread_join(tid[ti], NULL); return 0; }
  • 64. 3WKUHDG̅̄˾˻̇˹˹ ▪ pthread_join(pthread_t *thread, void *result); - дождаться завершения выполнения потока, результирующее значение поместить в *result ▪ pthread_yield(); - сообщить планировщику, что поток собирается “уступить” свой квант времени ▪ pthread_exit(void *value); - выйти из потока и передать значение потоку, в котором данный поток был вызван ▪ pthread_self(); - позволяет потоку получить свой собственный идентификатор pthread_t ▪ pthread_detach(thread) - для завершения данного потока больше не требуется вызов функции pthread_join
  • 65. ˠ˼˱˾˹́˿˳˱˾˹˶̀˿̃˿˻˿˳ главный тред тред А тред B тред С тред D тред E время ▪ когда после создания тред должен запускаться ▫ планирование в ОС не позволяет учитывать данное конкретное приложение и число тредов в нём ▪ программист может “помогать” планированию ▫ создать N потоков и назначить их на N процессорных ядер ▪ можно настроить пользовательское планирование потоков для данной программы