Professional Documents
Culture Documents
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)
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
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”
User work:
N Flops (ADDs)
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 độ).
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
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
B[3]
C[3]
+
A[2]
B[2]
C[2]
+
A[1]
C[1]
B[1]
+
A[0]
B[0]
C[0]
Ý 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
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
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] +
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”
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
ii+4
i<(n-4)? JMP LABEL1
Store R2 (256 Bit) to address //remainder loop handling
starting at C[i]
𝐹𝑃
𝑃𝑐𝑜𝑟𝑒 = 𝑛𝑠𝑢𝑝𝑒 ∙ 𝑛𝐹𝑀𝐴 ∙ 𝑛𝑆𝐼𝑀𝐷 ∙ 𝑓
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
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
i+=3 ? loop
result r1.0+r2.0+r3.0 1/8 of ADD peak
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
Approx.
15 F/B
CL CL
3 CL
C(:) A(:)
transfers
Example: Array copy A(:)=C(:) Memory
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
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
MemBW ~ 8-15x
Peak ~ 5-10x
2x Intel
Xeon Platinum 8160
NVidia Tesla V100 “Volta”
2 GPU #1
1 4 5
10
3
6 Other I/O
9
8 PCIe link
7
GPU #2
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?
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
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