2012-09-08 97 views
13

Tôi đang tìm một thư viện để xử lý các ma trận thưa thớt trong fortran 90/95. Tôi chỉ cần các thao tác rất cơ bản như phép nhân vectơ-vector. Bạn đề nghị tôi sử dụng cái gì?Thư viện Fortran 90/95 cho ma trận thưa thớt?

Tôi đã tìm kiếm xung quanh và một phần mở rộng để BLAS gọi là "blas thưa thớt", tài liệu trong chương 3 của đặc tả diễn đàn kỹ thuật nổ (?):

http://www.netlib.org/blas/blast-forum/,

có vẻ lý tưởng. Theo tài liệu đó, cần có một giao diện fortran 95 cho thư viện. Tuy nhiên, tôi đã không thể tìm thấy một thực tế thực tế của đặc điểm kỹ thuật này bất cứ nơi nào mà tôi đã có thể tải về. Tôi cảm thấy ấn tượng rằng thông số kỹ thuật số 95 của fortran 95 không thực sự được triển khai ở bất cứ đâu? Không phải là nguồn mở anyway.

Tôi cũng tìm thấy một thư viện gọi sparsekit:

http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html

Bất cứ ai có bất kỳ kinh nghiệm với một trong hai này, hoặc bất kỳ thư viện ma trận thưa thớt khác cho fortran 90/95? Tôi muốn được tư vấn về việc sử dụng cái nào và cũng là nơi để lấy nó (trong trường hợp của sparsekit mã nguồn có sẵn thông qua liên kết trên). Có bất cứ điều gì giống như một "tiêu chuẩn" cho ma trận thưa thớt, như BLAS là dành cho những người dày đặc?

Chúc mừng,

Arne

+0

F95, đó là bản sửa đổi nhỏ của ngôn ngữ, thường đi theo F90. Đã một thời gian kể từ khi tôi làm bất cứ điều gì với ma trận lớn, nhưng điều này có vẻ là http://people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.html phiên bản F90. – Rook

+0

Cảm ơn Idigas, nhưng tôi không nghĩ vậy. Dường như với tôi, những gì bạn đang liên kết đến là thư viện BLAS, và rằng "blas thưa thớt" không phải là một phần của điều đó. Ví dụ, nên có một chương trình con (theo đặc tả) được gọi là "duscr_begin" (hoặc có thể là "blas_duscr_begin"), là phần con bạn sử dụng để khởi tạo ma trận thưa thớt, mà tôi không tìm thấy ở bất cứ đâu trong thư viện BLAS. Tôi thậm chí đã tải xuống tất cả các tệp từ http://www.netlib.org/sparse-blas/index.html và đã làm "grep -i duscr_begin * .f" mà không có bất kỳ may mắn nào. Tôi thấy rằng rất khó hiểu. – arne

+0

Ah, có thể. Tôi chỉ nhìn nó vội vàng lần trước. – Rook

Trả lời

12

OK, tôi sẽ phần nào giải đáp thắc mắc của riêng tôi:

Nơi để tìm thấy một thi f95 đầy thưa thớt BLAS được cung cấp bởi @alexurba trên:

http://www.netlib.org/toms/818

Đó là nó! Kịch bản này tạo tất cả mã nguồn trong thư mục mà bạn chạy nó (tôi chưa bao giờ thấy phần mềm được cung cấp theo cách này trước đây).

Để làm cho tập lệnh INSTALL hoạt động, tôi cần thực hiện một số thay đổi: Hướng dẫn cài đặt cho bạn biết chỉnh sửa tập lệnh INSTALL và chọn "vòm" thích hợp. Lựa chọn của bạn là: AIX, ALPHA, CRAY, HP, NAG, SGI và SUN. Không ai trong số này có vẻ thích hợp với tôi, như tôi đang sử dụng Linux và trình biên dịch fortran duy nhất tôi có trên máy tính này là gfortran. Tôi không hoàn toàn hiểu mục đích của tùy chọn này, nhưng những gì tôi đã làm như sau:

1) Trong CÀI ĐẶT, tạo một "vòm" mới, tôi gọi là GNU bằng cách đặt biến SB_ARCH = 'GNU' . 2) Trong SOFTWARE/Makefile thay đổi FC = f90 thành FC = gfortran, 3) Trong TESTER/sao chép tệp Makefile.NAG sang Makefile.GNU, thay đổi FC = f90 thành FC = gfortran và thay đổi tất cả các phiên bản của từ 'NAG 'thành' GNU '. (Có thể bạn cũng muốn thay đổi tùy chọn FFLAGS trong Makefiles.)

Sau này tôi chạy INSTALL, sau đó TESTER/test_all, và các kiểm tra nhổ ra "0.000 ..." là lỗi, mà tôi giả định có nghĩa là mọi thứ đang hoạt động.

Tôi phải nói rằng tôi thấy rằng việc tìm mã nguồn này bất thường khó khăn. May mắn là thread này xuất hiện khá cao trên google khi tìm kiếm "fortran 90 sparse matrix library" bây giờ.Giải pháp cuối cùng của tôi: Trớ trêu thay, sau khi cuối cùng đã tìm ra một triển khai đầy đủ Sparse BLAS, tôi đã quyết định rằng tốt hơn là nên sử dụng một cách tiếp cận trực tiếp hơn, vì tất cả những gì tôi có thể cần là nhân ma trận-vector: ra những gì đại diện ma trận thưa thớt để sử dụng (Nén Sparse Row (CSR) có vẻ là thích hợp cho vấn đề của tôi), đào ra các phép nhân nhân vectơ tương ứng từ mã nguồn SpAS BLAS, xem nó muốn đầu vào như thế nào, và chỉ sử dụng trực tiếp trong mã của tôi.

+0

Tôi đang ở điểm _and các thử nghiệm nhổ ra "0.000 ..." là lỗi, mà tôi giả định có nghĩa là mọi thứ đang hoạt động. Bây giờ, làm thế nào để sử dụng thư viện này (hoặc thư viện?), Nơi tôi cần chúng? Tôi nên sao chép tệp nào vào thư mục chứa các chương trình của riêng mình? –