Sự cố bạn thấy xảy ra khi Matlab bắt đầu sử dụng bộ nhớ ảo. Bạn thường có thể giết quá trình Matlab thông qua Task Manager, nhưng điều đó không phải lúc nào cũng mong muốn. Không có công tắc nội bộ Matlab đơn giản nào sẽ giới hạn kích thước mảng tối đa trên toàn cầu, thật không may.
Những gì bạn có thể làm là làm cho kích thước tệp hoán đổi rất nhỏ, do đó Matlab không thể viết nhiều, nhưng điều này có thể ảnh hưởng đến hiệu suất của các chương trình khác. Các giải pháp khác, không phải Matlab sẽ chuyển sang Linux (nơi bạn có thể đặt giới hạn bộ nhớ cho một chương trình dễ dàng hơn, xem câu trả lời của @ BenVoigt để biết chi tiết về setting limits on both Windows and Linux) hoặc chạy mọi thứ trong máy ảo. Để tham khảo trong tương lai, trong các mô phỏng của tôi, tôi có một phương thức (subfunction, nếu bạn không muốn làm OOP) ở đầu của phân bổ trước để tính tổng dung lượng bộ nhớ ước tính cho các tham số mô phỏng (# của các phần tử của tất cả các mảng lớn, tôi sẽ sử dụng thời gian 8 để tăng gấp đôi là bộ nhớ theo byte), và điều đó sẽ gây ra lỗi khi sử dụng quá nhiều RAM.
Đây là ví dụ để kiểm tra bộ nhớ nhanh. Tôi biết rằng tôi sẽ phân bổ 3 m-by-3-by-t mảng, và 5 m-by-t mảng, tất cả trong số họ tăng gấp đôi.
maxMemFrac = 0.8; %# I want to use at most 80% of the available memory
numElements = 3 * (m * 3 * t) + 5 * (m * t);
numBytesNeeded = numElements * 8; %# I use double
%# read available memory
[~,memStats] = memory;
if numBytesNeeded > memStats.PhysicalMemory.Available * maxMemFrac
error('MYSIM:OUTOFMEMORY','too much memory would be needed')
end
Jonas, nhờ cho rằng câu trả lời, bạn có thể mô tả chi tiết hơn cách bạn đang làm/sử dụng RAM-tính-phương pháp của bạn ở đây? Tôi nghĩ rằng đó sẽ là một giải pháp khả thi nếu tôi có thể sử dụng nó. Cảm ơn. – Spacey
Chuyển sang Linux? Đối với tất cả chúng ta biết, anh ta có thể đang chạy Linux rồi. –
@BenVoigt Tôi đang sử dụng máy tính Windows, tôi không nghĩ chuyển sang Lunix có thể khả thi với tôi bây giờ. – Spacey