2011-10-16 31 views
9

Tôi đang thực hiện một số tính toán và thực hiện một số phân tích về các lực lượng và điểm yếu của các triển khai BLAS khác nhau. tuy nhiên tôi đã gặp một vấn đề.Làm thế nào để chuyển đổi ma trận một cách tối ưu bằng cách sử dụng blas?

Tôi đang thử nghiệm cuBlas, làm linAlg trên GPU có vẻ như là một ý tưởng hay, nhưng có một vấn đề.

Việc triển khai cuBlas sử dụng định dạng cột chính và vì đây không phải là thứ tôi cần cuối cùng, tôi tò mò liệu có cách nào có thể làm cho BLAS chuyển đổi ma trận không?

+1

".... và vì đây không phải là điều cuối cùng .....". Thiếu một vài từ? – talonmies

+2

Bắt đầu từ CUDA 5.0, cuBLAS có 'cublas geam' là một thói quen rất hiệu quả để thực hiện chuyển vị ma trận. Để có mã đầy đủ thực hiện giải pháp này và so sánh hiệu suất với chuyển vị ma trận bằng Thrust, xem [Cách hiệu quả nhất để chuyển đổi ma trận trong CUDA là gì?] (Http://stackoverflow.com/questions/15458552/what-is- hiệu quả nhất-cách-to-transpose-a-ma trận-in-cuda/21803459 # 21803459). – JackOLantern

Trả lời

10

BLAS không có quy trình chuyển đổi ma trận được tích hợp. CUDA SDK bao gồm ví dụ chuyển tiếp ma trận với bài báo thảo luận về chiến lược tối ưu để thực hiện chuyển đổi. Chiến lược tốt nhất của bạn có lẽ là sử dụng hàng đầu vào CUBLAS với phiên bản đầu vào chuyển tiếp của cuộc gọi, sau đó thực hiện các phép tính trung gian trong cột chính và cuối cùng thực hiện thao tác chuyển tiếp sau đó sử dụng hạt nhân chuyển đổi SDK.


Edited thêm rằng CUBLAS thêm một thói quen transpose trong CUBLAS phiên bản 5, geam, có thể thực hiện ma trận chuyển vị trong bộ nhớ GPU và nên được coi là tối ưu cho bất cứ điều gì kiến ​​trúc bạn đang sử dụng.

Các vấn đề liên quan