12 Şubat 2012 Pazar

Matlab'de hafıza

Merhabalar

Hız ve Hafıza. Bir programcının herzaman dert ettiği iki unsur. Bu yazıda matlabde hafıza kontrolünden bahsedeceğim. öncelikle hızlandırma konusunda matrislerin ilk başta tanımlanmasının hız dışında hafıza için ne gibi yararı var onu düşünelim. 
Matlabde değişken tanımlaması birçok programlama diline farklılık göstermektedir. Öyle ki matlabde bir matris (dizi - array) tanımlarsanız bunun için ram'de kesinlikle sıralı boş hafıza bulunması gerekmektedir. Çeşitli nedenlerden dolayı ram'de herzaman ihtiyaç olunan kadar sıralı boş,uygun hafıza mevcut değildir.
Bunu sayısal olarak açıklayalım. Örneğin 50 kutucuklu ram olsun.
a = 1 (ramin 10.)
b = 2 (ramin 25)
c = 3 (ramin 40)
değişkenleri tanımladığımız zaman program tarafından ramden rasgele hafızadan yer alınıyor. Burada 10 , 25 ve 40.cı adresler alınmış olsun. Böylece 50 kutucuk içinden alabileceğimiz sıralı maximum hafıza 14tür. Yani m = zeros(20,1) tanımlarsak hata alırız. Ama c 26.cı kutuya yerleşmiş olsaydı ozaman sorun olmayacaktı. Demek ki işimiz şansa kalmış. Ya da yapmamız gereken şey matrisi önceden tanımlamaktır. Ozaman sorun kalkar.
Matrisin olası boyutunu bilmiyorsanız kendiniz için çok büyük geçici bir matris oluşturun, program akışında ihtiyacınız olduğunda o alanı kullanırsınız.
gecici_m = zeros(1000,1)
program_run.......
clearvars gecici_m
yeni_m1 = zeros(300,1)
yeni_m2 = zeros(300,1)
gibi kullanabilirsiniz.

Clearvars komutunu görmüşken yapabileceğiniz diğer şieyler program akışı sırasında hafıza yetmiyorsa kullanmadığıınız değişkenleri clearvars komutuyla silin ve yeni değişkenlerinizi tanımlayın.
Mecburiyetten ileride kullanacağınız silemeyeceğiniz değişken var ise o değişkenleri harddiske kaydedin, işlem bittiği zaman geri alırsınız. örneğin
save degiskenim1, degiskenim2
işlemlerim...
load degiskenim1,degiskenim2
Bu işlemin kodu yavaşlatacağını unutmayın,çünkü harddiske erişim var.
Fonksiyonla işin içinden çıkılabilir mi, hayır. Çünkü bi yerden fonksiyon çağırdığınız zaman oraya kadar ki hafıza hala ram'dedir, fonksiyondaki değişkenler de onlara eklenecektir. Fonksiyonlardaki değişkenler ancak global değişken olarak tanımlanmamışsa fonksiyon bitiminde ölür ve rami boşaltırlar.

Bunların dışında yapabileceğiniz şeyler ise açık tüm programları kapatmaktır. msn,skype,explorer,bilgisayarım vs... Görünen ne varsa. Bi de görünmeyenler vardır. Bilgisayara kurulu bazı programların hizmetler kısmında otomatik olarak bazı kısımlarının çalışması ve arka fonda çalışan diğer exeleri. Bunları kontrol etmek biraz riskli,yanlış program açılış için engellenirse bilgisayarın açılmamasına sebeğ olabilir. Bununla ilgili daha sonra yazarım. 

Kolay gelsin...

0 yorum:

Yorum Gönder