Tại sao nên sử dụng SIMD nếu chúng tôi có GPGPU?


13

Tôi nghĩ câu hỏi này được phục vụ tốt hơn trong phần CS của Stack Exchange. Bây giờ chúng ta có GPGPU với các ngôn ngữ như CUDA và OpenCL, các tiện ích mở rộng SIMD đa phương tiện (SSE / AVX / NEON) có còn phục vụ mục đích không?

Tôi đã đọc một bài báo gần đây về cách các hướng dẫn SSE có thể được sử dụng để tăng tốc các mạng sắp xếp. Tôi nghĩ rằng điều này khá gọn gàng nhưng khi tôi nói với giáo sư kiến ​​trúc sư của mình, anh ấy đã cười và nói rằng việc chạy mã tương tự trên GPU sẽ phá hủy phiên bản SIMD. Tôi không nghi ngờ điều này bởi vì SSE rất đơn giản và GPU là các máy gia tốc lớn rất phức tạp với sự song song hơn rất nhiều, nhưng tôi nghĩ, có nhiều tình huống mà các tiện ích mở rộng SIMD đa phương tiện hữu ích hơn so với sử dụng GPU?

Nếu GPGPU làm cho SIMD trở nên dư thừa, tại sao Intel sẽ tăng hỗ trợ SIMD của họ? SSE là 128 bit, bây giờ là 256 bit với AVX và năm tới nó sẽ là 512 bit. Nếu GPGPU là mã xử lý tốt hơn với tính song song dữ liệu thì tại sao Intel lại đẩy các phần mở rộng SIMD này? Họ có thể có thể đưa các tài nguyên tương đương (nghiên cứu và khu vực) vào bộ đệm và bộ dự báo nhánh lớn hơn để cải thiện hiệu suất nối tiếp.

Tại sao nên sử dụng SIMD thay vì GPGPUs?


2
Bản thân nó là một thách thức để cung cấp cho GPU với đủ dữ liệu để giữ cho nó bận rộn. Truyền dữ liệu giữa máy chủ và thiết bị thực tế luôn luôn là nút cổ chai. Một số thao tác được hỗ trợ tốt hơn trên CPU (ví dụ: nhân không mang theo; xem PCLMULQDQ).
Juho

2
@Juho Đừng để các thiết bị mới như APU của AMD có cùng GPU và CPU? Điều này có loại bỏ được nút cổ chai?
jonfrazen

1
Khi tất cả được nói và thực hiện, một lệnh vectơ vẫn là một lệnh đơn và chi phí để lên lịch và thực hiện nó cũng giống như bất kỳ lệnh đơn nào khác. Nó chỉ có ý nghĩa để chạy các công việc trên GPU khi lợi ích vượt xa chi phí. Ngoài ra, hãy xem xét rằng bạn nhận được một đơn vị SIMD cho mỗi lõi, nhưng thông thường chỉ có một GPU trên mỗi khung và GPU hiện tại là một tài nguyên được chia sẻ. Điều này giới hạn số lượng công việc mà bạn có thể chạy trên GPU. (Số lượng lõi đang tăng lên mọi lúc, nhưng số lượng GPU thì không.)
Bút danh

Intel không làm được gì nhiều về GPU (ngoài Larrabee / Hiệp sĩ hạ cánh :)), vì vậy tôi đoán rằng việc họ cố gắng đẩy AVX thay vào đó là điều tự nhiên. Mặc dù việc sử dụng AVX nặng có thể rất hiệu quả, nhưng giờ đây nó dẫn đến việc ép xung trên các CPU mới hơn của chúng, vì vậy chúng có thể bị giới hạn với một cái gì đó.
nsandersen

Câu trả lời:


16

Không có gì miễn phí. GPGPU SIMD. Các hướng dẫn SIMD trên GPGPU có xu hướng rộng hơn các hướng dẫn SIMD trên CPU. GPGPU có xu hướng đa hạt mịn (và có nhiều bối cảnh phần cứng hơn CPU). GPGPU được tối ưu hóa để phát trực tuyến . Họ có xu hướng dành phần trăm diện tích lớn hơn cho các đơn vị dấu phẩy động, phần trăm diện tích thấp hơn cho bộ đệm và phần trăm diện tích thấp hơn cho hiệu suất số nguyên.

Hãy làm một so sánh. Lõi i7-5960x của Intel có 8 lõi, mỗi lõi có SIMD 4 chiều (độ chính xác kép), chạy ở tốc độ 3 GHz (3,5 GHz turbo), bộ đệm L3 20M, tiêu thụ 356mm ^ 2 và 140W và có giá 1000 USD . * 3 * 4 = 384 GFlops chính xác kép. (Tăng thêm 4x là bởi vì bạn có thể thực hiện hai phép cộng tổng hợp trên mỗi làn vector trên mỗi chu kỳ.) Nó có thể thực hiện 768 GFlops chính xác duy nhất. Đó là khoảng 1,08 DP GFlops / mm ^ 2 và 2,75 DP GFlops / Watt. Cũng có khoảng 57,5 ​​KB / mm ^ 2 bộ nhớ cache trên chip.

GeForce GTX Titan Black của NVidia có 15 SMX, mỗi chiếc có SIMD chính xác gấp đôi 32 chiều, chạy ở tốc độ 890 MHz (980 MHz turbo), bộ nhớ cache L1 + L2 3,5M, tiêu thụ 561mm ^ 2, 250W và có giá 1000 đô la . .89 * 4 = 1709 GFlops chính xác kép. (Cùng 4x từ hai phép cộng tổng hợp trên mỗi làn vector trên mỗi chu kỳ.) Nó có thể thực hiện 5126 GFlops chính xác duy nhất. Đó là khoảng 3.05 DP GFlops / mm ^ 2 và 6.8 DP GFlops / Watt. Vì vậy, gấp 3 lần mật độ điểm nổi DP trên một đơn vị diện tích và gấp 3 lần hiệu suất năng lượng của điểm nổi DP. Còn sự đánh đổi? 6,4 KB / mm ^ 2 bộ nhớ cache trên chip. Khoảng 9 lần mật độ thấp hơn CPU.

Vì vậy, sự khác biệt chính là GPU đã chọn cân bằng diện tích ủng hộ mạnh mẽ điểm nổi (và đặc biệt là điểm nổi chính xác đơn) trên bộ đệm. Ngay cả khi bỏ qua thực tế là bạn cần sao chép qua lại giữa CPU và GPU để thực hiện I / O, GPU sẽ hoạt động tốt như thế nào so với CPU phụ thuộc vào chương trình bạn đang chạy.

Nếu bạn có chương trình dấu phẩy động song song dữ liệu với rất ít phân kỳ điều khiển (tất cả các làn vectơ đang làm cùng một lúc) và chương trình của bạn đang phát trực tuyến (không thể hưởng lợi từ bộ nhớ đệm), thì GPU sẽ xuất hiện Hiệu quả gấp 3 lần trên mỗi đơn vị diện tích hoặc mỗi watt. Nhưng nếu bạn có bất kỳ số lượng điều khiển phân kỳ đáng kể nào, công việc không song song dữ liệu phải làm hoặc có thể được hưởng lợi từ các cấu trúc dữ liệu đọc nhiều lần, CPU có thể sẽ làm tốt hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.