Program çalışma hızı hakkinda

Başlatan aRci, 31 Ekim 2021, 22:24:47

aRci

Merhaba,
Pic basic de program performansı her satır ve kodda yavaşlamaya başlıyor. Buna en iyi çözüm olabildiğince planlı bir yapı oluşturmak. Fakat ne kadarda planlasaniz fonksiyon lar eklendikce daha fazla kod ekleniyor. Bu kodlar program hafızasına sıralı bir şekilde yerleştirildiğini var sayarak merak ediyorum.
Örnek olarak 1000 satırlık bir kod bloğu if sorgusu ile 2 ye ayrıldığında bu 1000 satır sadece if sonucuna göre ilgili kisimi işlerken ilgisi olmaya kısmı satır atlayarak mi geçiyor yoksa ilgisi olmasa da her satırı tek tek okuyarak mi geçiyor.

Kısaca bu if sorgusunun doğru kısmı 100 satırsa sadece bu 100 satırı okuyup if sorgusunun sonunami atlıyor ve sadece bu satırlar için zaman harcıyor

Fikir ve görüşlerinizi paylasirmisiniz

alisumer

#1
koşul gerçekleştiğinde yönlendirdiğin komutlar çalışır diğerleri atlanır.ben genellikle if ve else arasına kod yazmak yerine goto ile istediğim yere göndermeyi tercih ediyorum.bunun karşılığı olarak ASM dökümünü incelemelisin bence hangi koşulu beklediğine göre if işlemi basic te biraz çetrefilli oluyor örneğin bir matematik işleminde Z veya C  taşma bitleri kontrol ediliyor basit bir örnek 1024 ü ikiye bölmek için basic yada diğer diller harbiden satırlarca ASM kodu çıkarırken ASM de bir adım sağa kaydırmak işi çözüyor  ama işi basic yada C dili bazen uzatabiliyor daha kestirme bir yolu ASM kodları ile mümkün iken genel bir if komutu için belli kalıplar kullanıldığından bir standardı göz önünde bulundurmak zorunda kalıyor koşulun bir bit kontrolune bağlı ise yada ASM de yazabileceğin kadar kolay geliyorsa araya ASM kodları ile destek olmayı tercih edebilirsin.
 
Hep meraktan

MB_77

#2
bu mesaj tarafımdan silinmiştir.

MB_77

#3
bu mesaj tarafımdan silinmiştir.

alisumer

#4
Alıntı yapılan: MB_77 - 01 Kasım 2021, 00:42:51Basicde de bir satır yana kaydırmak için komut var diye hatirliyorum.

Netten baktım da varmış

Sayı=sayı<<1 sola,
Sayı=sayı>>1 saga kaydiriyor. İki yazarsan iki kaydiriyor vs.

Hatırladığım kadarıyla bu komut bir cycle suruyordu
var doğrudur bu sadece aklıma gelen ilk örnekti ama siz hiç basic de 1024 ü ikiye bölmek için sağa kaydır komutu kullanan gördünüzmü benim kastettiğim basic in bölme işlemi için standart bir algoritması var işlem benim verdiğim örnekte olduğu gibi kolay çözülebilsede basic yada herhangi bir yeni nesil dil bu işlemi o algoritmay uyarak yapmak zorunda yani hep aynı yöntemi kullanarak sonuca giderler daha basit ve kısa yolu varmı diye bakmazlar makrolarda bir formul vardır ve onu çalıştırılar.benim demek istediğim ise bir işlem ASM ile bsit kodlanabiliyorsa ideal olan odur daha kısa sürer işlemesi.size bir makro örneği paylaşayım basamak bulma ile ilgili basic in makrosudur ve asm koda birebir yansır
L13:	ADDLW 0x01
	MOVWF 0x27
	MOVLW 0x0A
	MOVWF 0x22
	CLRF 0x23
L4:	CALL L3
	DECFSZ 0x27,F
	GOTO L4
	MOVF 0x24,W
	RETURN
L10:	MOVWF 0x22
	MOVLW 0x03
	GOTO L5
L5:	MOVWF 0x28
	MOVF 0x23,W
	SUBWF 0x21,W
	BTFSS STATUS,Z
	GOTO L6
	MOVF 0x22,W
	SUBWF 0x20,W
L6:	MOVLW 0x04
	BTFSC STATUS,C
	MOVLW 0x01
	BTFSC STATUS,Z
	MOVLW 0x02
	ANDWF 0x28,W
	BTFSS STATUS,Z
	MOVLW 0xFF
	GOTO L7
L3:	CLRF 0x25
	CLRF 0x24
	MOVLW 0x10
	MOVWF 0x26
L9:	RLF 0x21,W
	RLF 0x24,F
	RLF 0x25,F
	MOVF 0x22,W
	SUBWF 0x24,F
	MOVF 0x23,W
	SUBWFB 0x25,F
	BTFSC STATUS,C
	GOTO L8
	MOVF 0x22,W
	ADDWF 0x24,F
	MOVF 0x23,W
	ADDWFC 0x25,F
	BCF STATUS,C
L8:	RLF 0x20,F
	RLF 0x21,F
	DECFSZ 0x26,F
	GOTO L9
	MOVF 0x20,W
	GOTO L7
L7:	MOVLB 0x00
	CLRWDT
	RETURN
bu kod 4 basamaklı bir sayının basamak değerlerini ayrı ayrı kayıtçılara yazan komutların birkısmıdır ve 4 ayrı makro ve lib komutu çalıştırır s,ze gereken sadece  bir basamağı gerekli olsa ve onu okumak istesenizde bu kod sonuna kadar çalışmak zorundadır bu bir çok işlem için böyle işler süre kayıpları bundan kaynaklanır. yani if  komutu başlı başına zaman kaybı yaratmaz ardından istenen koşulun ne olduğuna bakılır  çalışmanın gidişatını o belirler  böyle bir genelleme makrosunu çalıştırıyorsa o koşul sen basit bir şey istesende istenilenden uzun sürmesi kaçınılmazdır
Hep meraktan

alisumer

#5
Alıntı yapılan: MB_77 - 01 Kasım 2021, 00:56:38@aRci
Konuyu okurken benzer bir durumu hatirladim belki konuya etkisi vardır. Mesela sayı=100 yazdık.

100. Satıra yazıp da derleyince bu komut için 1 word boyutu ilave oluyorsa aynı komutu 1000. Satıra yazıp derleyince 2 word ilave ediyor. Yani kod uzadıkça yazılan aynı komutlar daha fazla derleme boyutuna neden oluyor. Sanırım kod büyüdükçe bu da hıza etki edecektir. Buna göre kod kümelerinin yerleşimini gosublari vs ana programda yerlerini değiştirerek derleme boyutunu minimize ediyordum bir ara. Hıza katkisi var mı bilmem.
bu bahsettiğinizde kısmen doğrudur sebebi ise banklardaki kayıtçılar doldukça yeni banklara geçmek zorunda kalınır kaydedilip tekrar geri işlem yapılan bank a dönülür bu da belli uzunluk sonunda her komut başına en az 2 komut süresi fazladan işlem yapmaya neden olur.işlemler sadece bizim atadığımız değişkenler üzerinden olmadığından ve her işlem için yapılan işlemin mahiyetine göre derlemede basic bazen 100 e yakın yeni değikene ihtiyaç duyar sebebi budur kısmen olan kısmı ise yazdığımız iki satır kodun örneğin bir div makrosunu çalıştırması halinde muhtemelen işlem yapılan banktaki tüm kayıt adreslerini kullanabilmesidir yani komut çokluğundan çok yapılan işlemin ne olduğu burda da pay sahibi
Hep meraktan

Powered by EzPortal