Các triển khai BLAS / LAPACK nhanh nhất hoặc các thói quen đại số tuyến tính khác trên các hệ thống GPU là gì?


11

nVidia, ví dụ, có CUBLAS, hứa hẹn tăng tốc 7-14x. Ngây thơ, đây không phải là thông lượng lý thuyết của bất kỳ thẻ GPU nào của nVidia. Những thách thức trong việc tăng tốc đại số tuyến tính trên GPU là gì, và đã có định tuyến đại số tuyến tính nhanh hơn chưa?

Câu trả lời:


9

Tôi không thể trả lời nửa sau câu hỏi của bạn cho đến khi thực hiện các vấn đề khác ngoài đó nhưng tôi có thể cung cấp một số cái nhìn sâu sắc về các thách thức. Để tham khảo, cá nhân tôi đã sử dụng ViennaCL trên nVidia GTX 560 Ti với 2GB bộ nhớ cho điểm chuẩn của tôi.

Qua mã nối tiếp trên i5 tầm trung, tôi đã thấy tốc độ tăng lên cho phép nhân ma trận dày đặc xấp xỉ 40 lần. Đối với các hoạt động như nhân vô hướng vectơ, tôi thấy tốc độ tăng lên gấp 1000 lần. Con khỉ đột nặng 800 pound trong phòng, tuy nhiên, là băng thông bộ nhớ. Đối với hầu hết các GPU thương mại, bạn sẽ sử dụng một cái gì đó như PCIe giới hạn bạn khoảng 6GB / giây thông lượng. Trong trường hợp của tôi, trong khi tính toán nhanh hơn 40 lần, ba bản sao ma trận (hai cho GPU và một trở lại), mỗi lần mất khoảng nhiều thời gian như khi thực hiện tính toán trên CPU.

Vấn đề sau đó với bất kỳ thư viện chung nào cho đại số tuyến tính GPU sẽ là họ không thể thực sự sử dụng lại các đối tượng trên GPU, vì họ không biết bạn sẽ làm gì với chúng. Vì vậy, mọi cuộc gọi đến hạt nhân tính toán có thể sẽ yêu cầu sao chép vào GPU, sau đó sao chép lại kết quả. Điều này sẽ ăn một phần lớn lợi nhuận.

Nếu bạn có thể sử dụng lại các đối tượng như ma trận, thì bạn có thể viết các thuật toán cấp cao hơn để tránh quản lý bộ nhớ càng nhiều càng tốt, nhưng một thư viện sẽ khó có thể thực hiện điều này một cách hiệu quả.

Tôi hy vọng rằng điều này sẽ giúp ích, và tôi chắc chắn rằng có những người khác ở đây có nhiều kinh nghiệm hơn trong việc này, nhưng đây là những kinh nghiệm và ấn tượng tôi có được trong thời gian ngắn bước vào điện toán GPU.


3
Đây là lý do tại sao bạn muốn các đối tượng sống trên GPU trong một khoảng thời gian dài thay vì háo hức được sao chép lại vào CPU. Ví dụ, ma trận và vectơ PETSc chứa một cờ cho biết CPU và / hoặc GPU có hiện hành hay không. Một hoạt động trên GPU đánh dấu phiên bản CPU là bẩn và ngược lại. Một bản sao được thực hiện trong suốt nếu bạn yêu cầu bộ nhớ ở nơi bẩn, nhưng điều đó hiếm khi tất cả các thành phần thuật toán chạm vào cấu trúc dữ liệu lớn có thể thực thi ở cùng một nơi.
Jed Brown

5

Hãy để tôi chỉ tập trung vào CUDA và BLAS.

Tăng tốc cho việc triển khai BLAS của máy chủ không phải là một số liệu tốt để đánh giá thông lượng, vì nó phụ thuộc vào quá nhiều yếu tố, mặc dù tôi đồng ý rằng việc tăng tốc thường là điều người ta quan tâm.

Nếu bạn nhìn vào các điểm chuẩn được NVIDIA công bố và tính đến việc Tesla M2090 có 1331 Gigaflops (độ chính xác đơn) và 665 Gigaflops (gấp đôi trước), hiệu suất cao nhất, bạn sẽ thấy rằng đối với SGEMM và DGEMM, chúng ta có thông lượng gần như 60% của lý thuyết, đó là khá tốt.

2mnkm×kk×n

Như những gì liên quan đến thông lượng điểm trôi nổi duy trì, tôi nghĩ rằng flop nên được tính mà không tính đến dữ liệu và thời gian chuyển kết quả, và điều này làm cho việc so sánh tăng tốc trở nên khó khăn. Hơn nữa, bạn phải tính đến kích thước ma trận, vì hiệu suất tốt nhất là cho các ma trận lớn.

Điểm mấu chốt: việc tăng tốc của một ứng dụng thực tế có thể rất khác so với hiệu suất đo được cao nhất trên các thói quen đại số tuyến tính, vì bạn phải tính đến việc khởi tạo GPU, thời gian truyền dữ liệu, v.v.

Vì vậy, tôi sẽ không trả lời câu hỏi của bạn về thư viện nhanh nhất, vì câu hỏi không có ý nghĩa gì trừ khi một số liệu và vấn đề chính xác được xác định. Tất cả điều này đã nói, tôi nghĩ rằng cuBLASMAGMA là một điểm khởi đầu rất tốt.

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.