Professional Documents
Culture Documents
result[i] = value;
}
}
result[i] = value;
Thực thi chương trình:
Bộ xử lý rất đơn giản: Thực hiện một lệnh trên mỗi xung nhịp.
Tìm về/
Giải mã
ALU
(Thực thi)
Bộ xử lý siêu cấp
-Hướng dẫn mức song song (ILP).
-Giải mã và thực hiện hai lệnh trên mỗi xung nhịp(nếu có thể).
Bộ Xử Lý: Kỷ nguyên đa lõi trước.
-Phần lớn chip bán dẫn được sử dụng để thực hiện các hoạt động giúp một luồng lệnh
chạy nhanh.
Tìm về\
Giải mã Bộ nhớ đệm dữ liệu
( lớn)
ALU
(Thi hành) Logic điều khiển không theo thứ tự
-Nhiều bóng bán dẫn hơn = bộ nhớ đệm lớn hơn, logic không theo thứ tự thông minh hơn, bộ dự đoán nhánh
thông minh hơn, v.v.
(Ngoài ra: nhiều bóng bán dẫn hơn → bóng bán dẫn nhỏ hơn → tần số xung nhịp cao hơn)
Tìm về/
Giải mã
Ý tưởng #1:
ALU Sử dụng tăng số lượng bóng bán dẫn để thêm nhiều
lõi cho (Thực thi) bộ xử lý.
Thay vì sử dụng bóng bán
độ tinh vi cúa logic bộ xử
giúp tăng tốc một luồng lệnh đơn lẻ ( ví dụ : hoạt động không theo
thứ tự và suy đoán.
Bối cảnh thực thi
Hai lõi: tính toán song song hai phần tử.
Các lõi đơn giản hơn: Mỗi lõi chạy chậm hơn một luồng lệnh so với lõi “ ưa thích” ban đầu của chúng (ví dụ
chậm hơn 25%).
Nhưng bây giờ có hai lõi: 2 × 0,75 = 1,5 (khả năng tăng tốc!).
* Mười sáu lõi: tính toán song song mười sáu phần tử.
*Ví dụ về đa lõi
Intel “Skylake” Core i7 quad-core CPU GPU NVIDIA GTX 980 16 lõi xử lý tái
tạo (“SM”) (2014)
(2015)
Ý tưởng số 2:
Phân bổ chi phí / mức độ phức tạp của việc quản luồng hướng dẫn trên nhiều ALU.
Xử lý SIMD:
- Một lệnh duy nhất, nhiều dữ liệu.
- Phát hướng dẫn giống nhau cho tất cả các ALU.
- Thực hiện song song trên tất cả các ALU.
Nhớ lại chương trình đã biên dịch ban đầu:
- Luồng lệnh xử lý một phần tử mảng tại một thời điểm bằng cách sử dụng các lệnh vô hướng trên
thanh ghi vô hướng (ví dụ: foats 32 bit).
Chương trình vô hướng:
-Xử lý một phần tử mảng bằng cách sử dụng hướng dẫn vô hướng trên thanh ghi vô hướng (ví dụ:
foats 32 bit)
Chương trình vectơ (sử dụng bản chất AVX):
- Xử lý đồng thời tám phần tử mảng bằng cách sử dụng hướng dẫn vectơ trên thanh ghi vectơ 256-
bit.
Thuật ngữ:
* Tính mạch lạc của luồng hướng dẫn (“thực thi mạch lạc”):
- Trình tự hướng dẫn giống nhau áp dụng cho tất cả các phần tử hoạt động đồng thời.
- Thực thi mạch lạc là cần thiết để sử dụng hiệu quả các tài nguyên xử lý SIMD.
- Việc thực thi mạch lạc KHÔNG cần thiết để song song hiệu quả giữa các lõi, vì mỗi lõi có khả
năng tìm nạp / giải mã một luồng lệnh khác nhau.
Thực hiện “ phân kỳ”:
- Thiếu sự mạch lạc của luồng hướng dẫn.
Thực thi SIMD trên các CPU hiện đại:
▪ Hướng dẫn SSE: Hoạt động 128 bit: 4x32 bit hoặc 2x64 bit (vectơ foat 4 rộng).
▪ Hướng dẫn AVX: hoạt động 256 bit: 8x32 bit hoặc 4x64 bit (vectơ foat 8 rộng).
▪ Hướng dẫn được tạo bởi trình biên dịch:
- Song song được yêu cầu rõ ràng bởi lập trình viên bằng cách sử dụng bản chất.
- Song song được truyền đạt bằng cách sử dụng ngữ nghĩa ngôn ngữ song song (ví dụ: ví dụ về
forall)
- Tính song song được suy ra bởi phân tích sự phụ thuộc của các vòng lặp (vấn đề khó, ngay cả
những trình biên dịch tốt nhất cũng không hoàn hảo trên mã C / C ++ tùy ý).
▪ Thuật ngữ: “SIMD rõ ràng”: Song song SIMD được thực hiện tại thời điểm biên dịch:
- Có thể kiểm tra nhị phân chương trình và xem hướng dẫn (vstoreps, vmulps, v.v.).
▪ “SIMD ngầm”:
- Trình biên dịch tạo ra một nhị phân vô hướng (hướng dẫn vô hướng).
- Nhưng N phiên bản của chương trình * luôn chạy * cùng nhau trên bộ xử lý
thực thi (chức năng của tôi, N) // thực thi chức năng của tôi N lần.
- Nói cách khác, bản thân giao diện với phần cứng là dữ liệu song song.
- Phần cứng (không phải trình biên dịch) chịu trách nhiệm thực hiện đồng thời cùng một lệnh từ
nhiều trường hợp trên dữ liệu khác nhau trên SIMD ALUs.
▪ Chiều rộng SIMD của hầu hết các GPU hiện đại nằm trong khoảng từ 8 đến 32:
- Sự khác biệt có thể là một vấn đề lớn (mã được viết kém có thể thực thi ở 1/32 khả năng cao
nhất của máy!).
Ví dụ:
Intel Core i7.(4 lõi, 8SIMD ALU cho mỗi lõi).
NVIDIA GTX 480(15 lõi ,32 SIMD ALU cho mỗi lõi ,1.3 TFLOPS).
Tóm tắt: thực hiện song song:
▪ Một số hình thức thực hiện song song trong các bộ vi xử lý hiện đại:
- Đa lõi: sử dụng nhiều lõi xử lý.
- Cung cấp song song mức luồng: thực hiện đồng thời một luồng lệnh hoàn toàn khác nhau trên
mỗi lõi.
- Phần mềm quyết định thời điểm tạo chuỗi (ví dụ: thông qua API pthreads).
- SIMD: sử dụng nhiều ALU được điều khiển bởi cùng một dòng lệnh (trong một lõi).
- Thiết kế hiệu quả cho khối lượng công việc song song dữ liệu: kiểm soát phân bổ trên nhiều
ALU.
- Vectơ hóa có thể được thực hiện bằng trình biên dịch (SIMD rõ ràng) hoặc trong thời gian chạy
bằng phần cứng.
- [Thiếu] các phụ thuộc được biết trước khi thực thi (thường được khai báo bởi lập trình viên,
nhưng có thể được suy ra bằng phân tích vòng lặp bởi trình biên dịch nâng cao).
- Superscalar: khai thác ILP trong một luồng lệnh. Xử lý các hướng dẫn khác từ cùng một dòng
lệnh song song (trong một lõi).
- Song song tự động và động được phần cứng phát hiện trong quá trình thực thi (không thể nhìn
thấy lập trình viên).