lu_instance/qr_instance run a full factorization for FixedSizeArrays
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 72/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- julia
- Lĩnh vực
- performance
Hướng nghiên cứu
Đọc các tệp có sẵn ext/StaticArraysCoreExt.jl và ext/FillArraysExt.jl (hoặc các tệp tương đương trong ext/) làm mẫu, sau đó thêm một FixedSizeArraysExt định nghĩa các phương pháp rẻ lu_instance / qr_instance (và các *_instance liên quan) cho FixedSizeMatrix. Xác nhận rằng kiểu của mỗi instance khớp với những gì lu(a; check=false) / qr(a) thực sự trả về cho một FixedSizeMatrix — ví dụ pivot là một FixedSizeVector — bằng cách chạy các lệnh gọi đó trong REPL. Xong nghĩa là ArrayInterface.lu_instance(F) ở thang độ nanogiây và benchmark trong issue không còn cho thấy chênh lệch 50×; kiểm tra test/ để xem các phương pháp mở rộng được kiểm thử ở đâu.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
lu_instance and qr_instance only have cheap methods for Matrix. A FixedSizeMatrix from FixedSizeArrays.jl falls back to lu(a, check = false) / qr(a) and runs a full factorization. LinearSolve's init calls these, so building a cache costs about 50× more than for a Matrix of the same size:
using ArrayInterface, FixedSizeArrays, LinearSolve, Chairmarks
A = randn(64, 64); F = FixedSizeMatrix(A)
@b ArrayInterface.lu_instance(A) # 24 ns
@b ArrayInterface.lu_instance(F) # 19 μs
@b LinearSolve.init(LinearProblem(similar(A), similar(A))) # 3.1 μs
@b LinearSolve.init(LinearProblem(similar(F), similar(F))) # 168 μs
Suggested fix: add an FixedSizeArraysExt (like the existing StaticArraysCore and FillArrays extensions) with cheap *_instance methods for FixedSizeMatrix. The instances have to match the types the real factorizations return; for example, lu on a FixedSizeMatrix returns a FixedSizeVector pivot vector.
ArrayInterface 7.30.2, FixedSizeArrays 1.3.0, LinearSolve 5.18.2, Julia 1.13.1. Found via ExponentialUtilities.jl, where the default exponential! is about 4× slower on small FixedSizeMatrix inputs than on Matrix.
- Ngôn ngữ chính
- Julia
- Star
- 140
- Fork
- 45
- Merge trung bình
- 1 phút
- Pull request đã merge (30 ngày)
- 1
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của JuliaArrays/ArrayInterface.jl
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
JuliaArrays/ArrayInterface.jl#499 ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
JuliaArrays/ArrayInterface.jl#463 · 5 bình luận · 4 reaction ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
JuliaArrays/ArrayInterface.jl#460 · 8 bình luận · 2 reaction ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
JuliaArrays/ArrayInterface.jl#397 · 1 bình luận ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 15/100
JuliaArrays/ArrayInterface.jl#396 ·
Tất cả issue của JuliaArrays/ArrayInterface.jl
Issue tương tự
-
documentation
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 6 ngày
-
broken links in docsĐang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
JuliaPhysics/BeamletOptics.jl#127 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Chains resumed from `initial_state` take `num_warmup + 1` warm-up stepsCó thể đã có người làm @thevolatilebit đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
TuringLang/AbstractMCMC.jl#220 ·