Tôi muốn viết một hàm lấy ma trận làm đầu vào. Đây là một cuộc gọi cấp thấp thường xuyên trong một dự án phức tạp, do đó, làm cho chức năng này càng nhanh càng tốt có tiềm năng tác động hiệu quả nghiêm trọng. Bởi vì tốc độ là rất quan trọng với tôi, tôi đang sử dụng các loại trong FixedSizeArrays
vì tôi biết rằng điều này sẽ tiết kiệm được việc sử dụng bộ nhớ. Nhưng tôi thường biết các thuộc tính nhất định của ma trận đầu vào và tôi không chắc chắn rằng tôi đang sử dụng tối ưu điều đó.Kích thước truyền tối ưu của mảng kích thước cố định trong julia
Dưới đây là một ví dụ đơn giản. Hãy tưởng tượng rằng chức năng tôi muốn thực hiện những điều sau càng nhanh càng tốt:
using FixedSizeArrays
function foo(input::Mat)
# NB: Mat is the FixedSizeArrays matrix type
return 2 * input
end
Rõ ràng đây là một ví dụ nhỏ, nhưng đó không phải là vấn đề. Vấn đề là tôi biết điều gì đó về kích thước của ma trận input
: nó luôn luôn chỉ có hai cột và tôi luôn có thể chỉ định số hàng tại thời gian chạy. Điều này có vẻ như thông tin có thể được chuyển đến trình biên dịch để làm cho mã của tôi nhanh hơn. Tôi có thể vượt qua nó như một đối số xác định kích thước của input
bằng cách nào đó? Đây là một ví dụ không hiệu quả, nhưng nên cho bạn biết một số ý tưởng tôi đang cố gắng làm.
function bar(int::N, thismat::Mat{N,2,Float64})
return 2 * thismat
end
Có điều gì tương tự mà tôi có thể làm không? Điều này thậm chí sẽ làm việc nếu tôi có thể? Có lẽ FixedSizeArrays đã làm mọi thứ có thể được thực hiện. Cảm ơn bạn đã suy nghĩ!
@squipbar Tôi đã có một số suy nghĩ thứ hai về ví dụ. Có một dereference con trỏ thêm và chi nhánh đó là không tốt (không tốt ở tất cả). Kiểm tra cái mới, tránh những rắc rối đó; Mặc dù vậy, tôi chưa đánh giá điểm này. –
@squipbar Nếu bạn chưa xem, hãy xem video này về bài thuyết trình của Tim Holy về mảng và lặp lại: https://www.youtube.com/watch?v=fl0g9tHeghA –
Tôi luôn học hỏi được nhiều từ câu trả lời của bạn, ngay cả khi tôi không phải là người hỏi câu hỏi! –