You are on page 1of 38

Mở đầu:

Kiến trúc máy tính hiện đại

Các chương trình lưu trong máy tính and its inherent
bottlenecks
Multi- and manycore chips and nodes
Chip nhiều nhân: Intel Xeon Skylake SP (2017)

 Xeon “Skylake SP” (Bạch kim/Vàng/Bạc/Đồng):


Có thể lên đến 28 nhân chạy với tần số lớn hơn 2+ GHz (+
“Turbo Mode”: 3.8+ GHz)
 Kết nối mạng lưới
 Đa luồng đồng thời
 Tương đương với 56 luồng

WikiChip
 8 tỷ Transistors / 14 nm
 Die size: ~500 mm2 Optional: “Sub-
NUMA Clustering”
(SNC) mode
2015: Broadwell architecture
... ...  Ring instead of mesh
interconnect
 Cluster on Die (analogous to
SNC)
 Up to 24 cores
2-socket server

(c) RRZE 2019 BasicArchitecture 2


Tìm hiểu về kiến trúc của nhân
và chip
Mục đích của việc sử dụng các nhân vi xử lý sử dụng bộ
nhớ cache

Modern CPU core

Sơ đồ chung của máy tính

 Thuật ngữ “Stored


Program Computer”
được chấp nhận
(Turing 1936)
 Được thiết kế giống
nhau trên tất cả model
 Tuy nhiên vẫn còn tồn
tại rất nhiều điểm tắc
nghẽn tiềm ẩn
 Flexible!

(c) RRZE 2019 BasicArchitecture 4


Basic resources on a stored program computer
Instruction execution and data movement

1. Thực thi lệnh


Đây là tài nguyên cơ bản của bộ xử lý.Tất cả nghiên cứu về thiết kế phần
cứng đều tập trung vào việc nâng cao số lệnh được xử lý.

Lệnh là khái niệm của “work” của các nhà thiết kế bộ xử lý. Các lập
trình viên không xem tất cả các lệnh là “work”

Example: Cộng 2 mảng A(:)và B(:) Processor work:


LOAD r1 = A(i)
LOAD r2 = B(i)
ADD r1 = r1 + r2
do i=1, N STORE A(i) = r1
A(i) = A(i) + B(i) INCREMENT i
enddo BRANCH  top if i<N

User work:
N Flops (ADDs)

(c) RRZE 2019 BasicArchitecture 5


Tài nguyên cơ bản của chương trình lưu trữ máy tính
Thực thi lệnh và dịch chuyển dữ liệu

2. Truyền dữ liệu
Truyền dữ liệu là kết quả của việc thực thi lệnh và cũng là tài nguyên thứ
cấp. Băng thông tối đa được quyết định bởi yêu cầu tỷ lệ thực thi lệnh và
giới hạn kỹ thuật( độ rộng bus, tốc độ).

Example: Cộng 2 mảng A(:) và B(:)

Data transfers:
8 byte: LOAD r1 = A(i)
do i=1, N 8 byte: LOAD r2 = B(i)
A(i) = A(i) + B(i) 8 byte: STORE A(i) = r2
enddo Sum: 24 byte

Nút cổ chai là gì?


 Truyền dữ liệu?
 Thực thi lệnh?
(c) RRZE 2019 BasicArchitecture 6
Từ code cấp cao cho đến thực thi thực tế

for(i=0; i<N; ++i)


sum += a[i];

Biên dịch
sum in register xmm1
addsd: Add 2nd argument to 1st
argument and store result in 1st &a[0]
argument ..LABEL:
addsd xmm1, [rdi+rdx*8]
inc rdx
Register increment cmp rax, rdx
jb ..LABEL
Compare register content
sizeof(double)

N in i in
Jump to label if loop register rax
continues register rdx

(c) RRZE 2019 BasicArchitecture 7


Đặc trưng kiến trúc( đơn ) lõi

Đường ống: Siêu vô hướng:


Thực thi lệnh theo Nhiều lệnh trong 1
nhiều bước chu kỳ
Fetch Instruction 4
Fetch
fromInstruction
L1I 3
Fetch
from Instruction
L1I 2
Fetch
from Instruction
L1I 1
Fetch Instruction
from 2
L1I Decode
Fetch Instruction
from Instruction
L1I 2 Decode1
Instruction
Fetch
from Instruction
L1I 2 Decode1
Instruction
Fetchfrom L1I 3 5 Decode1
Instruction
Fetch Instruction
from L1I 3 Decode
Instruction 1 Execute
Fetch
fromInstruction
L1I Decode
Instruction 2 Execute1
Instruction
Fetch
from Instruction
L1I 3 Decode
Instruction 2 Execute1
Instruction
Fetchfrom Instruction
L1I 4 9 Decode
Instruction 2 Execute1
Instruction
Fetch Instruction
from L1I 4 Decode
Instruction 5 Execute
Instruction 1
Fetch Instruction
from Instruction
L1I Decode
Instruction 3 Execute
Instruction 2
Fetch
fromInstruction
L1I 4 Decode3
Instruction Execute
Instruction 2
Fetch from L1I 13 Decode3
Instruction Execute
Instruction 2
from L1I Instruction 9 Instruction 5

1 lệnh nhiều dòng dữ liệu:


Nhiều hoạt động trên 1 lệnh Đa luồng đồng thời:
Nhiều lệnh song song
A[3]

B[3]

C[3]

+
A[2]

B[2]

C[2]

+
A[1]

C[1]
B[1]

+
A[0]

B[0]

C[0]

(c) RRZE 2019 BasicArchitecture 8


Vi xử lý – Đường ống
Đường ống đối với unit số học/functional

 Ý tưởng:
 Chia tiến trình phức tạp thành một vài tiến trình, bước thực hiện đơn giản/
nhanh hơn
 Mỗi bước, tiến trình phải giống nhau. Ví dụ: Thời gian…..
 Phải thực thi đồng thời song song các tiến trình này với nhau

 Lợi ích:
 Một nhân có thể đồng thời thực hiện 5 tiến trình khác nhau
 One instruction finished each cycle after the pipeline is full

 Hạn chế:
 Pipeline must be filled; large number of independent instructions required
 Requires complex instruction scheduling by hardware (out-of-order execution)
or compiler (software pipelining)

 Kỹ thuật đường ống được sử dụng rộng rãi trong kiến trúc máy tính
hiện đại

(c) RRZE 2019 BasicArchitecture 10


5-giai đoạn cấp số nhân trong đường ống:
A(i)=B(i)*C(i) ; i=1,...,N

Kết quả 5 chu kỳ đầu tiên (=latency của đường ống)!


Giai đoạn Wind-up/-down: Giai đoạn không đường ống
(c) RRZE 2019 BasicArchitecture 11
Đường ống : Lệnh đường ống

 Bên cạnh unit số học & functional, lệnh được thực thi dạng
đường ống also, e.g.: one instruction performs at least 3 steps:
Fetch Instruction Decode Execute
from L1I instruction Instruction

Fetch Instruction 1
1 from L1I
2 Fetch Instruction 2 Decode
from L1I Instruction 1
t

Fetch Instruction 3 Decode Execute


3 from L1I Instruction 2 Instruction 1
Fetch Instruction 4 Decode Execute
4 from L1I Instruction 3 Instruction 2

 Branches can stall this pipeline! (Speculative Execution, Predication)
 Each unit is pipelined itself (e.g., Execute = Multiply Pipeline)

(c) RRZE 2019 BasicArchitecture 12


Vi xử ý – Siêu vô hướng và đa luồng
đồng thời
Bộ xử lý siêu vô hướng – Level lệnh song song

 Nhiều unit có thể sử dụng Level lệnh song song Instruction


Level Parallelism (ILP): Dòng lệnh được song song hóa trong
luồng
Fetch Instruction 4
Fetch
from Instruction
L1I 3
Fetch Instruction
from Instruction
L1I 2 4-way
Fetch 1
from L1I 2
Fetch Instruction
from L1I Decode “superscalar” Example:
Fetch
from Instruction
L1I 2 Decode1
Instruction
t Fetch Instruction
from Instruction
L1I 2 Decode1
Instruction
LOAD
Fetchfrom L1I 3 5 Decode1
Instruction
Fetch Instruction Decode Execute STORE
Fetch from L1I 3
Instruction Instruction 1
Decode Execute
from
Fetch L1I
Instruction 3 Instruction
Decode2 Instruction 1
Execute MULT
from
Fetch L1I
Instruction 9 Instruction
Decode2 Instruction 1
Execute
from L1I 4
Fetch Instruction Instruction
Decode 2 Instruction
Execute 1
Fetch from L1I 4
Instruction Instruction
Decode3 5 Instruction
Execute 1 ADD
from
Fetch L1I
Instruction 4 Instruction
Decode3 Instruction 2
Execute
from
Fetch L1I
Instruction 1 3 Instruction
Decode Instruction 2
Execute
from L1I Instruction 3 Instruction 2
from L1I Instruction 9 Instruction 5

 Issuing m concurrent instructions per cycle: m-way superscalar


 Modern processors are 3- to 6-way superscalar &
can perform 2 floating point instructions per cycles

(c) RRZE 2019 BasicArchitecture 14


Xử lý siêu vô hướng –
Thực thi nhiều lệnh đồng thời

Thực thi lệnh STORE


LOAD
(Latency: 4 cy)
(Latency: 2 cy)
ADD
load a[1] (Latency: 3cy)
Cycle 1
Cycle 2 load a[2] …
Cycle 3 load a[3] for(int i=1; i<n; ++i)
Cycle 4 load a[4] a[i] = a[i] + s;
Cycle 5 load a[5] add a[1]=c,a[1]
load a[6] add a[2]=c,a[2]

Cycle 6
Cycle 7 load a[7] add a[3]=c,a[3]
Cycle 8 load a[8] add a[4]=c,a[4] store a[1]
Cycle 9 load a[9] add a[5]=c,a[5] store a[2] “Steady state:”
Cycle 10 load a[10] add a[6]=c,a[6] store a[3]
load
3 instructions/cy
Cycle 11 a[11] add a[7]=c,a[7] store a[4]
Cycle 12 load a[12] add a[8]=c,a[8] store a[5] (“3-way superscalar execution”)
Cycle 13 load a[13] add a[9]=c,a[9] store a[6]
Cycle 14 load a[14] add a[10]=c,a[10] store a[7]
Cycle 15 load a[15] add a[11]=c,a[11] store a[8]
Cycle 16 load a[16] add a[12]=c,a[12] store a[10]
Lệnh trên chu kỳ Instructions Per
… … … … Cycle: IPC=3
Chu kỳ trên lệnhCycles Per
Instruction: CPI=0.33
Correct interleaving / reordering the instruction streams:
Out-Of-Order (OOO) execution
(c) RRZE 2019 BasicArchitecture 15
Chi tiết nhân: Đa luồng đồng thời (SMT)

Quy tắcSMT (Ví dụ 2-luồng):


Nhân tiêu chuẩn
2-luồng SMT

(c) RRZE 2019 BasicArchitecture 16


Vi xử lý –
1 dòng dữ liệu nhiều dòng lệnh (SIMD)
a.k.a. vector hóa
Chi tiết nhân: Quá trình SIMD

 Hoạt động 1 dòng lệnh nhiều dòng dữ liệu (SIMD) cho phép thực thi
đồng thời nhiều hoạt động trên 1 thanh ghi
 Cài đặt lệnh x86 SIMD :
 SSE: Thanh ghi độ rộng = 128 Bit  Độ chính xác 2 chữ số
 AVX: register width = 256 Bit  Độ chính xác 4 chữ số
 AVX-512: …
 Cộng 2 thanh ghi có độ chính xác đôi
R0 R1 R2 R0 R1 R2

A[3]

B[3]

C[3]
Thực thi SIMD: +
V64ADD [R0,R1] R2

A[2]

B[2]

C[2]
+
256 Bit

A[1]

B[1]

C[1]
+
Thực thi vô hướng:

A[0]
A[0]

B[0]

B[0]
C[0]

C[0]
64 Bit + R2 ADD [R0,R1] +

(c) RRZE 2019 Basic Architecture 18


SIMD bởi trình biên dịch

Bước (Thực thi bởi trình biên dịch) for “SIMD processing”
for(int i=0; i<n;i++)
C[i]=A[i]+B[i]; “Loop unrolling”

for(int i=0; i<n;i+=4){


C[i] =A[i] +B[i];
C[i+1]=A[i+1]+B[i+1];
C[i+2]=A[i+2]+B[i+2];
C[i+3]=A[i+3]+B[i+3];}
//remainder loop handling

Tải 256 Bits bắt đầu từ địa chỉ A[i] tới thanh LABEL1:
ghi R0 VLOAD R0  A[i]
VLOAD R1  B[i]
V64ADD[R0,R1]  R2
Add the corresponding 64 Bit entries in R0 and R1 and
VSTORE R2  C[i]
store the 4 results to R2
ii+4
i<(n-4)? JMP LABEL1
Store R2 (256 Bit) to address //remainder loop handling
starting at C[i]

(c) RRZE 2019 Basic Architecture 19


Không có 1 tác động đơn lẻ nào tới hiệu suất đơn nhân

Hiệu suất floating point (FP) tối đa:

𝐹𝑃
𝑃𝑐𝑜𝑟𝑒 = 𝑛𝑠𝑢𝑝𝑒 ∙ 𝑛𝐹𝑀𝐴 ∙ 𝑛𝑆𝐼𝑀𝐷 ∙ 𝑓

Siêu vô Yếu tố Yếu tố Tốc độ


hướng FMA SIMD xung
𝐹𝑃
𝑛𝑠𝑢𝑝𝑒𝑟
Typical 𝑛𝑆𝐼𝑀𝐷
𝑛𝐹𝑀𝐴 @market Model 𝑓 [Gcy/s] 𝑃𝑐𝑜𝑟𝑒[GF/s]
representatives [inst./cy] [ops/inst.]
Nehalem 2 1 2 Q1/2009 X5570 2.93 11.7
Westmere 2 1 2 Q1/2010 X5650 2.66 10.6
Sandy Bridge 2 1 4 Q1/2012 E5-2680 2.7 21.6
Ivy Bridge 2 1 4 Q3/2013 E5-2660 v2 2.2 17.6
Haswell 2 2 4 Q3/2014 E5-2695 v3 2.3 36.8
Broadwell 2 2 4 Q1/2016 E5-2699 v4 2.2 35.2
Skylake 2 2 8 Q3/2017 Gold 6148 2.4 76.8
AMD Zen 2 2 2 Q1/2017 Epyc 7451 2.3 18.4
IBM POWER8 2 2 2 Q2/2014 S822LC 2.93 23.4

(c) RRZE 2019 Basic Architecture 20


Ví dụ: Giảm tổng

s = 0.0 …trong độ chính xác đơn AVX-


capable core (ADD latency = 3 cy)
do i = 1,N
s = s + a(i)
1 vòng lặp có thể chạy nhanh bao
enddo
nhiêu trong L1 cache?

 Khả năng tải số vòng lặp phụ thuộc tổng có thể đạt được
 Việc thực thi dừng ở mỗi ADD cho đến khi ADD trước đó
hoàn tất

 Không đường ống?


 Không SIMD?

(c) RRZE 2019 Basic Architecture 21


Đỉnh có thể đạt khi giảm tổng (I)

Code thuần vô hướng , Không SIMD

do i = 1,N
s = s + a(i)
ADD pipes utilization:
enddo
s

LOAD r1.0  0

SIMD lanes
i  1
loop:
LOAD r2.0  a(i)
ADD r1.0  r1.0 + r2.0
++i ? loop
result  r1.0

 1/24 of ADD peak

(c) RRZE 2019 Basic Architecture 22


Đỉnh có thể đạt khi giảm tổng (II)

Code vô hướng, 3-luồng “modulo variable expansion” do i = 1,N,3


s1 = s1 + a(i+0)
LOAD r1.0  0 s2 = s2 + a(i+1)
LOAD r2.0  0 s3 = s3 + a(i+2)
enddo
LOAD r3.0  0
s = s + s1+s2+s3
i  1
s1 s2 s3
loop:
LOAD r4.0  a(i)
LOAD r5.0  a(i+1)
LOAD r6.0  a(i+2)

ADD r1.0  r1.0 + r4.0 # scalar ADD


ADD r2.0  r2.0 + r5.0 # scalar ADD
ADD r3.0  r3.0 + r6.0 # scalar ADD

i+=3 ? loop
result  r1.0+r2.0+r3.0  1/8 of ADD peak

(c) RRZE 2019 Basic Architecture 23


Đỉnh có thể đạt khi giảm tổng(III)
do i = 1,N,24
Vector hóa SIMD- (8-luồng MVE) x s10=s10+a(i+0); s20=s20+a(i+8) ; s30=s30+a(i+16)
s11=s11+a(i+1); s21=s21+a(i+9) ; s31=s31+a(i+17)
đường ống (3-luồng MVE) s12=s12+a(i+2); s22=s22+a(i+10); s32=s32+a(i+18)
s13=s13+a(i+3); s23=s23+a(i+11); s33=s33+a(i+19)
s14=s14+a(i+4); s24=s24+a(i+12); s34=s34+a(i+20)
s15=s15+a(i+5); s25=s25+a(i+13); s35=s35+a(i+21)
LOAD [r1.0,…,r1.7]  [0,…,0] s16=s16+a(i+6); s26=s26+a(i+14); s36=s36+a(i+22)
LOAD [r2.0,…,r2.7]  [0,…,0] s17=s17+a(i+7); s27=s27+a(i+15); s37=s37+a(i+23)
enddo
LOAD [r3.0,…,r3.7]  [0,…,0] s = s + s10+s11+...+s37
i 1
s10 s20 s30
loop: s11 s21 s31
LOAD [r4.0,…,r4.7]  [a(i),…,a(i+7)] # SIMD LOAD
LOAD [r5.0,…,r5.7]  [a(i+8),…,a(i+15)] # SIMD s12 s22 s32
LOAD [r6.0,…,r6.7]  [a(i+16),…,a(i+23)] # SIMD

 ADD peak
s13 s23 s33
ADD r1  r1 + r4 # SIMD ADD
s14 s24 s34
ADD r2  r2 + r5 # SIMD ADD
ADD r3  r3 + r6 # SIMD ADD s15 s25 s35

i+=24 ? loop s16 s26 s36


result  r1.0+r1.1+...+r3.6+r3.7
s17 s27 s37

(c) RRZE 2019 Basic Architecture 24


Giảm tổng
Câu hỏi
 Khi nào hiệu suất sau có thể đạt được?
 Không nút cổ chai truyền dữ liệu
 Không nút cổ chai trong nhân
 Cần thực thi (3 LOADs + 3 ADDs + 1 increment + 1 compare + 1 branch)
trong 3 chu kỳ

 Trình biên dịch làm gì?


 Nếu có thể trình biên dịch sẽ tự động làm việc

 Nếu trình biên dịch không được ?


 Không phụ thuộc chuẩn ngôn ngữ
 Tối ưu hóa ở cấp độ cao có thể xung đột với chuẩn ngôn ngữ

 Độ chính xác của kết quả?

(c) RRZE 2019 Basic Architecture 25


Vi xử lý– Trật tự bộ nhớ
Reload nút cổ chai Von Neumann : “DRAM gap”

Đỉnh hiệu suất DP và đỉnh băng thông bộ nhớ


chính cho 1 bộ xử lý intel đơn (chip)

Approx.
15 F/B

Tốc độ truy cập bộ


nhớ chính không đủ
làm cpu bận…

 Gần đây: Chủ


yếu chạy bởi SIMD
(và FMA)

 Giới thiệu on-chip


caches nhanh, giữ bản
copy của dữ liệu vừa sử
dụng

(c) RRZE 2019 BasicArchitecture 27


Thanh ghi và caches: Truyền dữ liệu và trật tự bộ nhớ

 Caches giúp gửi lệnh và dữ liệu đến CPU nhanh


 Làm thế nào để dữ liệu chuyển từ bộ nhớ đến cpu và ngược
lại?
CPU registers
 Ghi nhớ: Caches được tổ chức LD C(1)
MISS ST A(1)
trong cache lines (e.g., 64 bytes) MISS
LD C(2..Ncl)
 Chỉ cache lines hoàn chỉnh mới ST A(2..Ncl) HIT
được chuyển đến trật tự bộ nhớ
CL CL
(Trừ thanh ghi) Cache
 Lỗi: Load hoặc store lệnh không tìm
thấy dữ liệu ở cache level
write evict
 Yêu cầu CL transfer allocate (delayed)

CL CL
3 CL
C(:) A(:)
transfers
 Example: Array copy A(:)=C(:) Memory

(c) RRZE 2019 BasicArchitecture 29


Dạng block mới: AMD Epyc
AMD Epyc 7451 24-Core Processor («Naples»)

Compute node  24 nhân trên socket


 4 chips w/ 6 nhân mỗi (“Zeppelin” die)
 3 nhân chia sẻ 8MB L3 (“Core Complex”, “CCX”)
 Bộ nhớ DDR4-266 interface với 2 kênh trên
Socket 0

chip
 MemBW per node:
16 ch x 8 byte x 2.666 GHz = 341 GB/s
 2 – luồng SMT
 Two 256-bit (actually 4 128-bit) SIMD FP units
 AVX2, 8 flops/cycle
 32 KiB L1 dữ liệu cache trên nhân
 512 KiB L2 cache trên nhân
Socket 1

 2 x 8 MiB L3 cache trên chip


 64 MiB L3 cache trên socket
 ccNUMA kiến trúc bộ nhớ
 Infinity fabric giữa CCX’s và giữa các chips

(c) RRZE 2019 BasicArchitecture 34


Giải trí:
Điểm sang trong công nghệ
tăng tốc gần đây

NVidia “Volta” V100


vs.
Intel Xeon Skylake-SP “Platinum”
Thông số Nvidia V100 “Volta”

Kiến trúc
 21.1 B Transistors
 ~ 1.4 GHz clock speed
 ~ 80 “SM” units
 64 SP “cores” each (FMA)
 32 DP “cores” each (FMA)
 8 “Tensor Cores” each
 2:1 SP:DP
performance

 ~7 TFlop/s DP peak
 6 MiB L2 Cache
 4096-bit HBM2 © Nvidia
 MemBW ~ 900 GB/s 𝑃𝑝𝐷𝑃
(theoretical) 𝑒 𝑎 = 𝑛𝑆𝑀 ⋅ 𝑛 𝑐𝑜𝑟𝑒 ⋅ 𝑛𝐹𝑃 ∙ 𝑓 𝑛𝑆𝑀 = 80
𝑛 𝑐𝑜𝑟𝑒 = 32
 MemBW ~ 830 GB/s
flops
(measured) 𝑛𝐹𝑃 = 2 cy
# CUDA # FP
# SMs
cores/SM ops/cy 𝑓 = 1.4Gcys

(c) RRZE 2019 BasicArchitecture 36


Trao đổi hiệu suất đơn luồng cho song song:
GPGPUs vs. CPUs

GPU vs. CPU


Tính toán tốc độ
(trên từng thiết bị)

MemBW ~ 8-15x
Peak ~ 5-10x

2x Intel
Xeon Platinum 8160
NVidia Tesla V100 “Volta”

Cores@Clock 2 x 24 @ ≥2.1 GHz 80 SMs @ ~1.4 GHz


SP Performance/core ≥ 134 GFlop/s ~179 GFlop/s
Threads@STREAM ~20 > 20000
SP peak ≥ 6 TFlop/s ~14 TFlop/s
Stream BW (meas.) 2 x 105 GB/s 830 GB/s
Transistors / TDP ~2x8 Billion / 2x150 W 21 Billion/250 W

(c) RRZE 2019 BasicArchitecture 38


Node topology và mô
hình lập trình
Tính song song trong node tính toán hiện đại

Tài nguyên song song và chia sẻ trong node bộ nhớ chia sẻ

2 GPU #1
1 4 5
10
3
6 Other I/O
9
8 PCIe link
7
GPU #2

Tài nguyên song song: Tài nguyên chia sẻ:


 Execution/SIMD units 1  Outer cache level per socket 6
 Cores 2  Memory bus per socket 7
 Inner cache levels 3  Intersocket link 8
 Sockets / ccNUMA domains 4  PCIe bus(es) 9
 Multiple accelerators 5  Other I/O resources 10

Làm cách nào chương trình của bạn sử dụng tất cả tài nguyên nói trên?

(c) RRZE 2019 BasicArchitecture 40


Trạng thái thay đổi và bão hòa

Phân biệt rõ ràng giữa hiệu suất “bão hòa” và “gia tăng” ở cấp độ chip
 1 trong số những đặc trưng hiệu suất quan trọng nhất

Tài nguyên chia Tài nguyên


sẻ cho thấy hiệu song song cho
suất bão hòa thấy hiệu suất
gia tăng

(c) RRZE 2019 BasicArchitecture 41


Mô hình lập trình song song:
Pure MPI

 Cấu trúc máy móc vô hình với người dùng:


  Mô hình lập trình rất đơn giản
  MPI “biết cần làm gì”!?
 Vấn đề hiệu suất
 Intranode vs. internode MPI
 Node/system topology

(c) RRZE 2019 BasicArchitecture 43


Mô hình lập trình song song là topology-agnostic:
Example: Luồng thuần túy trên node

 Cấu trú máy móc vô hình với người dùng


  Mô hình lập trình rất đơn giản
 Luồng SW (OpenMP, pthreads, TBB,…) “nên”
biết về điều này
 OpenMP 4++: Hỗ trợ
 Vấn đề hiệu suất
 Synchronization overhead
 Truy cập bộ nhớ
 Node topology

(c) RRZE 2019 BasicArchitecture 44


Kết luận về kiến trúc

 Kiến trúc máy tính hiện đại có nhiều “topology”

 Node-level hardware parallelism có nhiều dạng


 Sockets/devices – CPU: 1-4 or more, GPGPU/Phi: 1-6 or more
 Cores – moderate (CPU: 4-24, GPGPU: 10-100, Phi: 64-72)
 SIMD – moderate (CPU: 2-16, Phi: 2-16) to massive (GPGPU: 10’s-100’s)
 Superscalarity (CPU/Phi: 2-6)

 Hiệu suất khai thác: Nhận thức sự song song + nút cổ chai
 “Hiệu suất tính toán cao” == tính toán nút cổ chai

 Hiệu suất chương trình dễ bị ảnh hưởng bởi kiến trúc


 Topology/affinity ảnh hưởng tới overheads của mô hình lập trình phổ biến
 Tiêu chuẩn không bao gồm (many) topology-aware features
 Điều này bắt đầu được cải thiện chậm chạp (MPI 3.0, OpenMP 4.0)
 Ngoài overheads, Các đặc trưng của hiệu suất độc lập với mô hình lập
trình
(c) RRZE 2019 BasicArchitecture 45

You might also like