2009-07-07 30 views
9

Đặt cược tốt nhất của tôi để tính toán sản phẩm chấm của vectơ x với số lượng lớn vectơ y_i, trong đó x và y_i có chiều dài 10k hoặc hơn.Sản phẩm chấm - SSE2 và BLAS

  1. Đổ y vào ma trận và sử dụng tối ưu hóa s/dgemv thường lệ?
  2. Hoặc có thể thử tay mã hóa giải pháp SSE2 (Tôi không có SSE3, theo cpuinfo).

Tôi chỉ đang tìm hướng dẫn chung tại đây, vì vậy mọi đề xuất sẽ hữu ích.
Và có, tôi cần hiệu suất. Cảm ơn mọi ánh sáng.

+0

nào biên dịch bạn đang sử dụng? –

Trả lời

4

Tôi nghĩ GPU được thiết kế đặc biệt để thực hiện các thao tác nhanh như thế này (trong số những người khác). Vì vậy, bạn có thể sử dụng các thư viện DirectX hoặc OpenGL để thực hiện các hoạt động vectơ. D3DXVec2Dot Điều này cũng sẽ giúp bạn tiết kiệm thời gian CPU.

+2

D3DXVec2Dot không sử dụng GPU. Và bên cạnh đó, bạn chỉ nhìn thấy một sự tăng tốc từ các chương trình GPGPU khi bạn chuyển đổi các tập dữ liệu rất lớn, hoặc sử dụng các chương trình rất đắt tiền trên GPU. Điều này là do chi phí thiết lập GPU để thực hiện công việc và sau đó đọc lại kết quả. Mọi chuyển dữ liệu đến/từ GPU là một hoạt động rất tốn kém. – Christopher

+0

Thật khó để đánh bại sản phẩm dấu chấm của DirectX nếu nổi là đủ tốt. –

+0

CPU hiện tại cũng có khả năng thực hiện loại xử lý này. –

0

Mã hóa một giải pháp SSE2 không phải là rất khó và sẽ mang lại một sự tăng tốc tốt đẹp trên một quy trình C thuần túy. Bao nhiêu điều này sẽ mang lại một thói quen BLAS phải được xác định bởi bạn.

Tốc độ tăng tốc lớn nhất có được bằng cách cấu trúc dữ liệu thành định dạng để bạn có thể khai thác tính song song và căn chỉnh dữ liệu.

1

Alternatives cho thói quen BLAS tối ưu hóa:

  • Nếu bạn sử dụng trình biên dịch intel, bạn có thể được tiếp cận với intel MKL
  • Đối với các trình biên dịch khác ATLAS thường cung cấp số hiệu suất đẹp
0

tôi sử dụng một GotoBLAS. Đó là thói quen hạt nhân cao cấp. Tốt hơn nhiều lần so với MKL và BLAS.

+0

có vấn đề cấp phép với gotoblas. –

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