hafızaya array gibi erişmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Arkadaş matris ebatlarının sabit olduğunu söylemiş sonradan, o zaman neden pointer alıp, typecast ve dereference yapıp yine standart şekilde indis kullanarak elemanlara erişiyor. Böyle nasıl bir performans artışı sağlanıyor merak ettim doğrusu?
sobakava
Üye
Mesajlar: 14
Kayıt: 19 Tem 2003 04:16

Mesaj gönderen sobakava »

Arkadaş matris ebatlarının sabit olduğunu söylemiş sonradan, o zaman neden pointer alıp, typecast ve dereference yapıp yine standart şekilde indis kullanarak elemanlara erişiyor. Böyle nasıl bir performans artışı sağlanıyor merak ettim doğrusu?
cunku bu matris uzerinde her eleman icin aritmetik islemler yapiyorum. son hali ile her cevrim icin (tum matrisin taranmasi) 32 ms suruyor bu islemler. islemleri yapabilmem icin bana en kolay yontem dizi indisleri ile erismek gozuktu.

ornegin:

b>verilerin baslangic adresi
a>codelord'un dedigi sekilde tanimlanmis dizi
mwidth, mheight: matrisin boyutlari

Kod: Tümünü seç

for y:=0 to mheight-1 do
begin 
 for x:=0 to mwidth-1 do
  begin
      a1:= ( a(b)^[y    ][x    ]+a(b)^[y+1][x    ]+a(b)^[y+2][x+2])shr 3 ;
      a2:= ( a(b)^[y+1][x+1]+a(b)^[y+2][x+2]+a(b)^[y+1][x    ])shr 3;
      a3:= .......
      ...
  end;
end;
seklinde hesaplamalar yapiyor. elemanlara burada yazdigim gibi erismek mantikli gozuktu bana. bir alternatif var mi bilmiyorum. su anda kod uzunlugundan cok performans onemli...

ve ayrica bu verileri bahsettigim b adresinden sonrasina ben yerlestirmiyorum, ben sadece oradan okuyup islem yapabiliyorum.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Coderum Lordum verdiğin kodun asm çıktısı okadar değildir çünkü arada başka registerler falan var. Onlarla ilgili işlemlerde dahildir o koda.

Kayda değer bir performans artışı olduğunu sanmıyorum demişsin. Katılıyorum, olmayabilir. Delphi compilerıda çok güzel optimizasyona yapar Allah için :) Bu arada kodda : "[0]" ikincisinde hem sabit hemde 0 verdiğin için optimizasyonda indexleme için yapacağı kodu yazmamış olabilir compiler. Neyse daha çok eşşeğin kulağına su kaçırmayalım :)

Kolay gelsin...
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Delphi önünüzde, denemesi bedava :D Açın bakın öyle olup olmadığını.

2. index i 0 vermemin nedeni döngü kodu ile olayı uzatmamak içindi. Bizim burada odaklanmamız gereken döngü kodu değil.
Cevapla