2013-01-03 12 views
12

Başlık her şeyi açıklıyor.RAM kullanımı belirtilen bir miktarı aştığında MATLAB'ı derhal durdurun. Bir yolu var mı?

Temelde, MATLAB'ı, oluşturduğum birçok parametreyle bir simülasyon için büyük miktarda RAM kullanıyorum her defasında comp'imi sıfırlamak zorunda kalmaktan yoruldum.

RAM kullanımı, toplam RAM'ımın belirtilen bir yüzdesini aşmaya başlarsa, durdurma/hata yapmanın bir yolu var mı?

Hafızayı nerede tahsis ettiğimi her defasında deneyin/yakaladığımı biliyorum, ancak bu zaten yazılmış bir program içindir ve ayrıca ileride başvurmak için, başlangıçta bir parametre ayarlayabilmek istiyorum. ve onunla yapılmalı.

Bir yolu var mı?

Teşekkürler!

cevap

7

Gördüğünüz sorun, Matlab sanal belleği kullanmaya başladığında ortaya çıkar. Normalde Matlab sürecini Görev Yöneticisi aracılığıyla öldürebilmelisiniz, ancak bu her zaman arzu edilmez. Maalesef, maksimum dizi boyutunu global olarak sınırlayacak basit Matlab dahili anahtarı yoktur.

Yapabilecekleriniz, takas dosyası boyutunu çok küçük yapmaktır, böylece Matlab gerçekten çok fazla yazamaz, ancak bu da diğer programların performansını etkileyebilir. Matlab dışındaki diğer çözümler ise Linux'a geçmek (bir program için bellek limitlerini daha kolay ayarlayabileceğiniz, setting limits on both Windows and Linux ile ilgili detaylar için @ BenVoigt'ın cevabına bakınız) veya bir sanal makinede her şeyi çalıştırabilecekler.

Gelecekte başvurmak gerekirse, simülasyonlarımda, simülasyon parametrelerinin verildiği tahmin edilen toplam bellek kullanımını hesaplayan ön ayırma işlemimin başlangıcında bir yöntem (alt-işlem, OOP yapmak istemiyorsanız) kullanıyorum (Tüm büyük dizilerin elemanlarının sayısı # 8 için çiftleri kullanacağım, bayt cinsinden bellek) ve çok fazla RAM kullanacak bir hata atıyor.

Hızlı bellek kontrolü için bir örnek. 3 m-3-by-t dizileri ve 5 m-by-t dizileri tahsis edeceğimi biliyorum, hepsi çift.

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 
+0

Jonas, teşekkür cevaplar görüyor musunuz? Bunu kullanabiliyorsam, işe yarayabilir bir çözüm olacağını düşünüyorum. Teşekkürler. – Spacey

+0

Linux'a Geçiş? Bildiğimiz kadarıyla, zaten Linux kullanıyor olabilirdi. –

+0

@BenVoigt Windows makinesindeyim, Lunix'e geçmenin benim için uygun olabileceğini düşünmüyorum. – Spacey

8

Bir işlem grubu için sanal bellek kotasını ayarlayabilirsiniz. Windows'da bir Job nesnesi kullanın. Açık * nix kullanımı ulimit. Bu sadece MatLab değil, herhangi bir süreçle çalışır.

Eğer burada RAM-hesap-yöntemi kullanılarak/yapıyoruz nasıl daha ayrıntılı olarak tarif edebilir, bunun için

+0

İş nesnesi yalnızca geçerli işlemler için sınırlar oluşturulmasına izin veriyor mu, yoksa gelecekte oluşacak örneklerle de çalışır mı? – Jonas

+2

@Jonas: İş nesnesine eklediğiniz süreçler üzerinde çalışır.Çalıştırılabilir dosyada kalıcı değil, demek istediğin buysa, ama her zaman yazabilirsin (veya indirebilirsin; eminim ki birileri zaten böyle bir şey yazmıştır) bir iş nesnesini yapılandırmak ve bir MatLab örneğini başlatmak için küçük bir başlatıcı bu işin içinde. –

+0

Açıklama için teşekkürler. Cevabımı düzeltirim. (+1 btw). – Jonas

İlgili konular