Thuật toán nào để sử dụng cho đảo ngược ma trận dày đặc song song trên tối đa 8 lõi?


8

Tôi cần triển khai đảo ngược ma trận dày đặc song song cho một ngôn ngữ tôi đang sử dụng dường như không có thư viện hiện có cho việc này (cụ thể là IDL sử dụng IDL Bridge để truyền tin nhắn). Tôi quen thuộc với các phương pháp lập trình song song thông qua kinh nghiệm sử dụng MPI trong C ++, mặc dù chủ yếu cho các phương pháp FFT và N-body song song. Tôi có ít kinh nghiệm hoặc kiến ​​thức về các phương pháp tính toán, nối tiếp hoặc song song, cho đại số tuyến tính.

Những gì tôi đang tìm kiếm là một mô tả mã giả rõ ràng về thuật toán đảo ngược ma trận song song mạnh mẽ, ổn định, phù hợp với một số lượng nhỏ lõi khi máy chạy tác vụ IDL (hiện tại nối tiếp) có 8 lõi. Trong thực tế có lẽ tôi sẽ chỉ sử dụng 4 để giữ lõi miễn phí cho các nhiệm vụ khác.

Tôi thích sự đơn giản hơn hiệu năng cạnh chảy máu nếu có một loạt các thuật toán nổi tiếng cho nhiệm vụ này.


1
Tôi giả sử bạn có nghĩa là ma trận dày đặc . Chắc chắn bạn có thể làm cho IDL sử dụng triển khai LAPACK theo luồng (ví dụ MKL hoặc thậm chí ATLAS), bằng cách sử dụng LD_PRELOADnếu cần thiết.
Jed Brown

Vâng cảm ơn, tôi sau một thuật toán ma trận dày đặc. Tôi đã làm rõ rằng bây giờ trong câu hỏi. Tôi sẽ điều tra các triển khai LAPACK theo luồng như bạn đề xuất. Điều đó sẽ được ưa thích nếu có thể. Cảm ơn con trỏ.
Bogdanovist

IDL đã có các thư viện đại số tuyến tính đa luồng trong ít nhất 3 hoặc 4 năm qua. Tôi tin rằng LA_INVERT sẽ chạy đa luồng trên bất kỳ phiên bản IDL nào gần đây. Lưu ý rằng có một công tắc cấu hình kiểm soát số lượng luồng có sẵn (và có thể nó được đặt thành một luồng theo mặc định)
Brian Borchers

Cảm ơn Brian. Tôi đã kiểm tra tài liệu của cả IDL7 và IDL8 và không đề xuất LA_INVERT sử dụng nhóm luồng. Tôi cũng đã kiểm tra rằng khi tôi đặt IDL để đảo ngược các ma trận lớn trong một thời gian, chỉ có 1 trong số 8 lõi được sử dụng (theo màn hình hệ thống của tôi). Tôi đã kiểm tra các cài đặt của! CPU và TPOOL_NTHREADS bằng với HW_NCPU, theo tài liệu này có nghĩa là các thường trình có thể sử dụng nhiều lõi như có sẵn trên thực tế. Tôi cũng đã thử giảm TPOOL_MIN_ELTS để thực thi đa luồng trong LA_INVERT mà không gặp may. Còn ý tưởng nào nữa không?
Bogdanovist

Ma trận của bạn lớn bao nhiêu? IDL sẽ không sử dụng đa luồng trừ khi ma trận đủ lớn. Nếu bạn có ma trận quá nhỏ (ít hơn N = 1000) thì sẽ không có bất kỳ lợi thế nào về hiệu suất khi đi đa luồng và IDL sẽ không sử dụng các thói quen đa luồng. Có các thiết lập cấu hình cho điểm cắt này là tốt. Tôi đã không sử dụng IDL trong vài năm, nhưng tôi thực sự ngạc nhiên vì điều này không hiệu quả với bạn - Tôi khuyên bạn nên hỏi trong một diễn đàn cụ thể của IDL. Comp.lang.idl = pvwave usenet gr là một nơi tốt để tìm.
Brian Borchers

Câu trả lời:


5

Thay vì tự mình thực hiện, tôi khuyên bạn nên xem xét các triển khai song song mạnh mẽ và hiệu quả như PLASMA .

Nếu bạn chỉ tìm kiếm các thuật toán để tự thực hiện, hầu hết các thói quen được ghi lại quá mức trong phần "Tài liệu" của trang web đó.

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.