Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Temel Elektrik/Elektronik => Konuyu başlatan: z - 29 Ekim 2013, 14:22:24

Başlık: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 29 Ekim 2013, 14:22:24
Bilmece bulmaca sorularini hep Temel EE basliginda acmisiz. Bu konuyu da buraya actim. ASM ile de yerine gore "assembler"dan yerine "assembly"den, C ile de  C ve digerlerinden  bahsediyor olacagim.

Once onsoz,

Sinavda hoca soru sorar ve cozumde kullanilacak yontemi de belirler. Ornegin direnc devresindeki direnclerden birisinden akan akimin Super Pozisyon yontemi ile bulunmasi isteniyorsa soruyu Norton yada Thevenin ile cozerseniz sifir puan alirsiiniz. O halde cevap verirken sorudaki sinirlamalara dikkat edilmelidir.

Bazilarinin gereksiz buldugu ASM-C tartismalarinda ASM  ile ARM islemciyi dusunemiyorum, ASM ile Network Stack yaz da gorelim vs diye cevaplar oluyor.

Programlama cok genis cok kapsamli bir konu. Assembly her projede kullaniliverecek bir dil değil.  Bu nedenle  su programi ASM ile yaziver denince abes kaciyor. ASM ile her onune gelen uygulamayi yazmaya calismak da cok abes.

Abesdir cunku ASM ile programlama eziyet derecesinde zordur, zaman alicidir, hata yapmaya musaitdir. Bu nedenle daha yuksek duzeyde diller dercih edilir cunku yazmasi da okumasi da kolaydir.

Bu kisa giristen sonra; ASM ye ne gerek var? Bu yuzyilda ASM ile kod mu yazilir soylemlerinde bulunanlara bazi  sorularim var.

1.) C vs derleyiciler de mevcut oldugu halde ASM ile programlamanin sart oldugu ozel durumlarin gerekceleri nedir?

2.) Interrupt rutinlerini gerektigi zaman ASM ile yazarim  diyenler; sirf asm ile yazdiniz diye interrupt rutini daha mi hizli isler?

3.) Hizli isleyen ASM kodlarini yazmak icin siradan asm bilgisi yeterlimidir?

4.) Interruptlari senkronize etmek size ne ifade ediyor?

5.) Ana programin bir alanininda isleyecek kodun bir interrupt rutini ile senkronize islemesi size ne ifade ediyor.

6.) 4 ve 5 maddelerindeki durumlara ne zaman ihtiyac duyulur?

7.) Derleyici tarafindan en yuksek derecede optimize edilmis bir C programi daha fazla nasil optimize edilir?

8.) Gumus alasimli iletkenleri (kablolari) her onunuze gelen uygulamada kullanirmisiniz? Hangi sartlarda gumus alasimli kablo kullanirsiniz?

9.) Sular seller gibi C biliyor fakat ASM tecrubeniz yok. Yeni cikmis bir islemci icin derleyici yazma projesinde size hangi isi yikarlarsa ayvayi yersiniz?

Cevap yazarken hangi soruya cevap verdiginizi belirtin.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: muhittin_kaplan - 29 Ekim 2013, 14:31:14
1. kod optimizasyonu
2. Optimize yazıldıysa Evet İşler
3. Hayır Yeterli Değildir. Hangi Asm Kodunun Kaç Saykılda Çalıştığını, Dolayısıyla İşlemcinin Yapısınıda bilmek gerekir
4. int ler arası öncelik planlaması
5. int rutininde çekilecek bir bayrağın, ana program ın akışının değiştirmesini ifade eder.
6. projenin gereksinimlerine göre -aynı anda iki kesme gelecekse sıralama yapılmalıdır-
7. Kodları didikleyip ASM ile düzenleyerek
8. -
9. - Ayvayı Yemem, Algoritma ve Okuma Biliyorsam İşin içinden Çabuk Çıkarım.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: Icarus - 29 Ekim 2013, 14:49:00
1) Multimedia processing endüstrisi çok fazla kullanıyor.
2) Hayır
3) Hayır. Eğer bir C koduna bakıp derleyicilerin(çoğul) nasıl bir kod üreteceğini hayal edemiyorsanız. Bu işlere bulaşmayın.
8 ) Pahalı
Not olarakta şunu ekleyeyim; Programcılar ne C'yi nede asm'i tam kullanmayı bilmedikleri için problemin dilde, derleyicide, mimaride, vb... olduğunu söylerler ama gördüğüm genellikle klavye ile sandalye arasındadır.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: RaMu - 29 Ekim 2013, 14:49:45
1) bence denetleyicinin yapısını anlamak için asm en az temel seviye şart bu bir durumdur,
2)Ben yazarsam işler, asmde iyiyimdir.
3)Yetmez benim bilgimde yetmez asm konuşuyor olmak gerek,
4)Bana bişe ifade etmiyor örnek söylersen anlarım
5)4 de söyledim zaten
6)4 ve 5 de bende bunu sordum
7)Bence asm ile dahada optimize olabilir, ya tamamen asm yazılacak yada asm lenecek, de ne gerek var?
8)Bu bence güzel örnek, gerektiğinde kullanırım demek.
9)Bilmeyen düşünsün benim kafam rahat, ama bende c bilmiyorum doğru düzgün.

Sonsöz,
sular seller gibi asm biliyorum ama sadece pic için ve sadece 16f ve dspic30f için,
denetleyici değiştirince neredeyse sıfırdan başlamış oluyorum,
ve şu anda c öğreniyorum,
c ile yazdığım herhangibir programda vir satır dahi asm kullanmadım,
birde c de asm kullanırken çok kısıtlama oluyor şikayetçiyim bu durumdan,
yani bsf status,c diyeceksem misal bsf 03,0 demek zorunda kalıyorum,
header felan tanımlamakda gerekiyor sanırım, aslında merak ettiğim birşeydi, neyse konu dağılmasın.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: kurumahmut - 29 Ekim 2013, 14:59:23
Alıntı yapılan: z - 29 Ekim 2013, 14:22:24

Bu kisa giristen sonra; ASM ye ne gerek var? Bu yuzyilda ASM ile kod mu yazilir soylemlerinde bulunanlara bazi  sorularim var.

Ben bu kisiler arasinda degilim. Ama cevaplamak istedim.

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
1.) C vs derleyiciler de mevcut oldugu halde ASM ile programlamanin sart oldugu ozel durumlarin gerekceleri nedir?

Compilerin assembly cevirme tarzini begenmedigimiz durumlarda ya da compiler yazan arkadaslarin bizim ihtiyacimiza uygun islem icin #pragma olusturmamis olmasindan vs..vs..vs..

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
2.) Interrupt rutinlerini gerektigi zaman ASM ile yazarim  diyenler; sirf asm ile yazdiniz diye interrupt rutini daha mi hizli isler?

machine cycle, kullanilan register miktari, ana clock ve cpu gore degisir desem

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
3.) Hizli isleyen ASM kodlarini yazmak icin siradan asm bilgisi yeterlimidir?

mimarinin assemler kodlarini cok iyi bilmek yeterlidir. Gerisi asm bilginize ve algoritmaniza kalmis yani yetmedi

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
4.) Interruptlari senkronize etmek size ne ifade ediyor?
"shared resource" yeterli olur sanirim

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
5.) Ana programin bir alanininda isleyecek kodun bir interrupt rutini ile senkronize islemesi size ne ifade ediyor.
buna da "shared resource" yeterli olur sanirim

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
6.) 4 ve 5 maddelerindeki durumlara ne zaman ihtiyac duyulur?
buna da "shared resource" yeterli olur sanirim

yahu dedim 3 cevapta ayni olmaz terime bir bakim dedim
http://what-when-how.com/microcontrollers/interrupt-synchronization-microcontrollers/ (http://what-when-how.com/microcontrollers/interrupt-synchronization-microcontrollers/)

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
7.) Derleyici tarafindan en yuksek derecede optimize edilmis bir C programi daha fazla nasil optimize edilir?
algoritmayi degistirmek yada optimizasyon teknigini degistirmek

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
8.) Gumus alasimli iletkenleri (kablolari) her onunuze gelen uygulamada kullanirmisiniz? Hangi sartlarda gumus alasimli kablo kullanirsiniz?
en son ne zaman kullandigimi hatirlamiyorum

Alıntı yapılan: z - 29 Ekim 2013, 14:22:24
9.) Sular seller gibi C biliyor fakat ASM tecrubeniz yok. Yeni cikmis bir islemci icin derleyici yazma projesinde size hangi isi yikarlarsa ayvayi yersiniz?
Sartlar bana uymasa da optimizasyon :)
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 29 Ekim 2013, 15:18:48
@muhittin kaplan

Sorularimin uzerinde fazla dusunmeden cevap yazmissin.

3.) Komutlarin kac cycle calistigi ve islemci yapisi zaten dokumanlarda var. Bu bilgiye sahip olmak yeterlimi? Asla, asla, asla.

Bir diger baslikta algoritma yazma konusunu tartisiyorduk. Herkes program yazabilir fakat herkes algoritma yazamaz. Burada sozu edilen algoritma, sadece bir problemin cozum yolunun tanimlanmasi olarak anlasilmamalidir.

Evet kabaca tanimi o dur fakat algoritma, problemi optimize sekilde cozen yontemin adim adim aciklamasidir.

Algoritma mi yazidiniz program parcasi mi yazdiniz? Aradaki ince cizgi onemli.  Hizli kosan asm program parcasinin yazimi kendi basina algoritma tasarimidir.

4.) Interrupt onceligi tamamiyle fakli bir konu.

Ornek vermek gerekirse; ayni oncelige sahip iki interruptdan ismi A olan, hep ismi B olandan 100 mikro saniye once olussun dersek A interruptini B den daha once gelmeye zorlayacak kod yazimi gereklidir.

5.) Ana programda int gelmismi gelmemismi diye bir flagi kontrol etmek yeterli değil. Bu da farkli bir sey.

Ana program iligili label'a geldiginde interruptin uretilmemis olmasi,  int olusmasini beklemek icin daha onceden gelip orada pusuya yatmak gerekir. Aksi takdirde ana program ile interrupt senkronize olmaz. (Asenkron calisirlar)

6.) Tabiki ozel durumlar. Cok ozel durumlar. Mesela bir donanimi simule eden tamamen soft uygulamalar. Ne mesela hep ayni uc ornegi veririm. CRTC nin yazilimla yapilani.

Fakat sunu kesinlikle soyleyebilirim. 4 ve 5 den bi-haberseniz, islemci gucu yeterli oldugu halde bu is bu islemci ile yapilamaz daha hizli bir islemci lazim deyip kestirip atarsiniz. Halbuki belki daha yavas islemciyle bile yapilabilecek bir istir.

9. Ayvayi yersin.

Mektebi bitirmis muhendisler cogunlukla integral alma, diferansiyel denklem cozme, laplace islemleri hatta AC devre analizini bile unutur.

Integral cozmeyi unuttum ama notlarima bakarsam hatirlarim derler. Kimse senin integral cozmeyi hatirlamani bekleyecek zamana sahip değildir. O an kivrak oyunlarla cozdun cozersin baktin olay bu sekilde değil bir baska matematik oyun yaparsin. Her an beynindeki tum matematik hucrelerini isletecek durumda olman gerekir.

C komutlarinin uretecegi CPU komut siralamasini yazman icin senin ASM ogrenmeni de kimse bekleyemez. Beynindeki ASM hucreleri her an aktif olmalidir. Kaldiki derleyici yazimindan (optimize asm kod uretecek iddiali programdan) bahsediyoruz. Eger bu sartlara haiz değilsen projenin asm bilgi gerektiren ayagi icin uygun kisi değilsin demektir.

Bu ekipte super asm kodlama yapabilecek adamlardan bir kac tane olmak zorunda.

Bu mesaji hazirlarken gelen diger iki cevaba hizlica goz gezdirdim. Icarus'un isaret ettigi

"Not olarakta şunu ekleyeyim; Programcılar ne C'yi nede asm'i tam kullanmayı bilmedikleri için problemin dilde, derleyicide, mimaride, vb... olduğunu söylerler ama gördüğüm genellikle klavye ile sandalye arasındadır."

Bence super bir gozlem.

ASM yi laf olsun diye kotuleyenler aslinda detaylari bilmiyorlar.

8.)

Manyak gosterisli sigara paketi boyutlarinda zarif bir de kutu icine  1kw lik bir amplifikator tasarladiniz. Yapamazmisiniz. Yaparsiniz.

Simdi bu kutuya 220v'u  yada kabin baglantilarini 0.75 lik tele sahip kibar teyp kordonu vs ile yapamazsiniz. Kesiti artirip kalin bir kordon kullanmak da amfinin zarif goruntusunu bozar.

Iste cok cok pahali da olsa 0.5 lik tellere sahip gumus alasimli kablo, teknik gereksinimlere cevap verirken sizin zerafet anlayisinizla da uyusur.  Birisi elma mi dedi ne?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: Ramiz - 29 Ekim 2013, 18:50:12
1) Burada detaylarını anlatamayacağım bir projede pic işlemci için c18 de yazılım yazdım. İşlemciyi işin bir kısmında adım adım çalıştırmam gerekiyordu. Yani 100 nano saniyede bir komut işlemem gerekiyordu. (İşlemci tek çevrimlik asm kodlarını 100nSn de işliyordu) Programın bu kısımlarını Asm ile, kalan kısımlarınıda C ile yazıp işin içersinden çıkmıştım.

Diğer sorulara yanıt vermeyeceğim. Çünkü Tüm sorulardaki ana tema veya öğrenilmesi gereken şey şu.

- Asm bilmenisiniz. Bu şarttır.. (Aksini düşünenlerle tartışmayacağım bile..)
- Asm ile herşeyi yazmaya direnmeyin. Asm yi askerler olarak düşünün. C yi onbaşılar, yüzbaşılar gibi düşünün. Daha basic dilleride Generaller gibi düşünün. Asm ile herseyi incik incik işlemeniz gerekir. Teker teker! On başılar ile onar onar, Basic ile yüz biner yüz biner olarak işlediğinizi düşünün.

Örnekten anlayacağımız gibi basic gibi diller sizi hemen sonuca götürür. C ortada kaldı. Asm için çok kodlayıp, saç yolmak gerekir ama basic gibi dillerde yazdığımız koların alt planına inemeyiz. Yani shiftout diye bir kod yazdığımızda bu kodun iç yapısını elleyemeyiz(örnekler çoğaltılabilir). C için if, while yada for döngülerine dokunamayız(örnekler çoğaltılabilir). Asm ile herşeyi biz yaparız..


Yukarıda sadece derleyici optimizasyonu ile ilgili farklı bir soru var. Oda şöyle ki,

Mesela A = A * 2; derseniz işte bu sizin derleyicinizin math anlayışına göre bir asm kod çıktısı verecektir.
Ama     A = A << 1; derseniz c derleyiciniz rlf   A, f komutu üretecektir.

Olay aşağı yukarı bu. Yazdıklarıma birkaç şey daha eklenebilir. Varsa yanlışlar düzeltilebilir ama bu konunun ana fikri "asm bilmek şarttır. Önemli yerlerde C içersine gömülerek kullanılması mantıklıdır. C kullanmak mantıklıdır. Herşeyi asm ile yazmaya çalışmak mantık dışıdır."

Üzerine daha çok tartışıp, vakit kaybetmemek gerekir diye düşünüyorum..
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 29 Ekim 2013, 23:56:12
Hocam inline asm kullanarak IRET icin sac bas yolmadan yapsaydiniz.

ASM de kodlamaya baslar baslamaz optimize kod cikartmak kimin haddine? Zaten programin tamamini optimize yazmaya ugrasmayiz ki. Fonksiyon bazinda optimizasyonla ugrasiriz.

Bir de elektronikcinin program anlayisi ile programcinin program anlayisi bayagi bir farkli oluyor galiba.


Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: musti463 - 30 Ekim 2013, 00:33:04
şuan için assembly öğrenmek zor geliyor açıkçası
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: Icarus - 30 Ekim 2013, 00:40:22
Alıntı yapılan: gerbay - 29 Ekim 2013, 20:40:03
multicore ya da SMT destekli işlemcilerde ASM ile yazmaya kalkarsanız çok büyük hata yaparsınız zaten.. hyperthreading i gözönünde bulunduran bir derleyicinin ürettiği gibi kodu ASM ile asla o kalitede yazamazsınız..
?? bu kısmı tam anlayamadım çünkü derleyicilerin sizin tasklarınızı otomatik paralleleştirme gibi bir olayı yok.
Hatta çoğu zaman örneğin derleyicinin SIMD desteği vermesi demek kodunuzu böyle optimize ettiğini değil, sadece programcının bu instructionları kullanabileceğini söyler.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 11:15:07
Verdiginiz ornekler  elektronikciler icin uygun ornekler değil. (Paralel islem vs). Tek core yada multicore uzerinde paralel islem komutlarini ASM ile yazmamizi istemek haksizlik.  Gorece olarak kucuk (kisa) uygulamalar icin bu komutlari kullanarak ASM ile son derece optimize kod uretebiliriz. Fakat konuyu boyle orneklerle saptirmayalim. (Her kez satranc oynayabilir fakat iki kisiyle ayni zamanda satranc oynayan nadir insanlar var)

Bir ara bilgisayarcilarla (Programcilarla) elektronikcilerin program anlayislari uzerine, elektronikcilerin program islerine nasil bulasmak zorunda kaldiklarinin hikayesini konusalim. Bu konusulmazsa %99 C deyip durursunuz. Belki de bu %1 ile deginmek istedigim konulara ihtiyac duyan uygulamalardan bahsediyorsunuz.

Karno, minterm, maxterm, Quine Mccluskey falan da konusalim. Sonra bunlarla ASM arasindaki iliskiden bahsederiz. Kapi gecikmelerinden bahsederiz. Kapi gecikmesinin yazilimda neye esdeger oldugundan bahsederiz.
Bunu anladiginizda  C yerine neden ASM tercih edilecegini de anlayacaksiniz.

Haklisin artik 8051 devri değil. Yeni islemcilerin komut seti C ye yatkin tasarlanmaya basladi dolayisi ile  ASM si de o kadar guzel ve anlasilir olmaya basladi. Cunku C okumasi ve yazmasi kolay dildir.

%99 uygulamalari geciniz. O %1 lik kismi konusalim. Sizin deyiminizle neden o %1 lik  uygulamalar asm ile kodlamayi ister?

Satranc dedim de iyi satranc oynayanlar bir kac hamle ilerisini dusunup hamle yapar. C derleyiciler kac hamle ilerisini gorup kod uretiyor.

Bir projeden dolayi kodları "Hitech"de C ile yazmam gerekti. Uretilen kodlari yeterince inceleme firsatim oldu. Simdi Hitech'i oven bir  C kullanicisi asm ile niçin kod  yazorsun C derleyici optimize kod uretiyor asm hammallik derse bir tarafimla gulerim. Ayni gulusu Keil icin soyleyenlere de yaparim.

 
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: muhendisbey - 30 Ekim 2013, 11:37:43
Temelde ASM ile C arasında iki yapılamayacak iş görüyorum. Birincisi kod optimizasyonu, ikincisi ise enerji tasarrufu. Aslında ikincisi de kod optimizasyonuna dahil edilebilir.
C'nin çok fazla avantajı var. Hızlı programlama verilebilecek güzel bir örnek. Bir şeyin iyi yanlarının olduğunu kabul ederken götürüsünün olabileceğini de düşünmek gerekli.
ASM ile yazması zor. Datasheeti hatmetmeniz lazım. Bu konuda ASM öğrenmek gerçekten büyük sıkıntı.
ancak ASM sistemin nasıl yürüdüğünü anlatır. C'de bu detayı bilmenize gerek yok.

C'de yazdığınız kodların alt yapısını bilmediğinizden kodun tabanını bilmezsiniz. GPIO kullanacaksan tanımlarsın kütüphanesini okursun açıklamaları yazarsın. Zannetmiyorum ki birisi de "bu kütüphanenin altında ne var?" desin, açsın registerlara baksın. İnce işle uğraşmıyorsanız bence de gerek yok.

C'yi öğrenirsiniz, yazdıklarınız yeri gelir istediğiniz sonucu vermez ASM ile tabanına iner düzeltirsiniz. C derleyiciler genel olarak programı ASM'ye aktardıktan sonra hex kodlarını üretir. Bu konuda bülent hocam son derece haklı.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: Mr.Java - 30 Ekim 2013, 13:03:15
Yani tüm konunun özü şu aslında;

ASM komut seti bellidir.Bunları bilin her komut seti üzerinde gerektiği kadar uygulama yapın,mantığını anlayın ve bitirin.C ile uygulama geliştirirken zaten gereken yerlerde herkes ASM'ye ihtiyaç duyar bu kaçınılmaz.Fakat projenin tamamını ASM ile kodlamak hataya müsait,takibi zor ve yeni başlayan birisi için zahmetli olacaktır.XC8 derleyicisi ise kod optimasyonunda gerçekten çok iyi.

Zaten herhangi bir işte tamamen uzmanlık seviyesi 10 yılı  buluyor.Forumumuzda da C ve ASM tartışmasını yapmak ancak bilgilerimiz doğrultusunda oluyor.Bu nedenle "bu tartışmaları açanlar C ve ASM ye tamamen hakim değiller !" demek biraz abes kaçıyor.

C zahmetli ve öğrenilmesi zor dillerdendir.MCU programlamasını anlatan kitaplar sürekli if else while ve for döngüsünden çıkamazlar.Help dosyalarını türkçeye çevirir koyarlar önümüze.C'de bir type qualifiers ,recursion ,String yapıları,Class'lar gibi konulara hiç değinilmez.Mevcut Copy/Paste yapılan kodlarda commentlerde ezbere gidilen kalıp dışı ifadelerde google translate yaparlar.Gerçi tüm dillerde böyle java bilen adama sorun Overriding nedir diye muhabbeti dinleyin.Soruyorum gerçekten C bu mu?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 13:25:08
Fakat insanların ağzına yapışmış "ASM ile yazmak hamallıktır", "bu devirde asm mi kullanılır"  söylemleri.

Adam daha yeni yetme. Bu söylemlerde bulunuyor. Neden? Çünkü forumda böyle deniyor. Ben de yok bu böyle değil diyorum.

Başlıktakli ana giriş yazısını dikkatli okursanız programlarınızı baştan sona ASM ile yazın demiyorum. ASM komutlarla kod yazdınız diye kodlarınız hızlı koşacak da demiyorum. Her kez ASM öğrensin/kullansın da demiyorum.

Dikkat çekmek istediğim konularla ilgili 9 soru sordum. Bu soruların çok da dışına çıkmayın istiyorum.

Konuyu biraz uğraşla aşağıdaki mesajımda değindiğim alana kanalize ettim. Bu noktadan sonra lütfen C-ASM mukayesesi yapmayalım. %1 lik dilime giren projeler için tartışalım.

Alıntı yapılan: z - 30 Ekim 2013, 11:15:07
Verdiginiz ornekler  elektronikciler icin uygun ornekler değil. (Paralel islem vs). Tek core yada multicore uzerinde paralel islem komutlarini ASM ile yazmamizi istemek haksizlik.  Gorece olarak kucuk (kisa) uygulamalar icin bu komutlari kullanarak ASM ile son derece optimize kod uretebiliriz. Fakat konuyu boyle orneklerle saptirmayalim. (Her kez satranc oynayabilir fakat iki kisiyle ayni zamanda satranc oynayan nadir insanlar var)

Bir ara bilgisayarcilarla (Programcilarla) elektronikcilerin program anlayislari uzerine, elektronikcilerin program islerine nasil bulasmak zorunda kaldiklarinin hikayesini konusalim. Bu konusulmazsa %99 C deyip durursunuz. Belki de bu %1 ile deginmek istedigim konulara ihtiyac duyan uygulamalardan bahsediyorsunuz.

Karno, minterm, maxterm, Quine Mccluskey falan da konusalim. Sonra bunlarla ASM arasindaki iliskiden bahsederiz. Kapi gecikmelerinden bahsederiz. Kapi gecikmesinin yazilimda neye esdeger oldugundan bahsederiz.
Bunu anladiginizda  C yerine neden ASM tercih edilecegini de anlayacaksiniz.

Haklisin artik 8051 devri değil. Yeni islemcilerin komut seti C ye yatkin tasarlanmaya basladi dolayisi ile  ASM si de o kadar guzel ve anlasilir olmaya basladi. Cunku C okumasi ve yazmasi kolay dildir.

%99 uygulamalari geciniz. O %1 lik kismi konusalim. Sizin deyiminizle neden o %1 lik  uygulamalar asm ile kodlamayi ister?

Satranc dedim de iyi satranc oynayanlar bir kac hamle ilerisini dusunup hamle yapar. C derleyiciler kac hamle ilerisini gorup kod uretiyor.

Bir projeden dolayi kodları "Hitech"de C ile yazmam gerekti. Uretilen kodlari yeterince inceleme firsatim oldu. Simdi Hitech'i oven bir  C kullanicisi asm ile niçin kod  yazorsun C derleyici optimize kod uretiyor asm hammallik derse bir tarafimla gulerim. Ayni gulusu Keil icin soyleyenlere de yaparim.


Millet C öğrensin diye forumda ne çok çaba gösterdiğimi bir kenara atmayın. Atmayın da ASM konusunu açınca da ayağıma dolaşmayın.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: drozk - 30 Ekim 2013, 14:47:50
Merhabalar.
Bahsettiğiniz yüzde birlik dilime girer mi bilmiyorum ama başımdan geçen bir olayı paylaşmak istiyorum. Genelde asm. kullanırım. Asm. ile yazdığım bir kodu aynı işi yapacak şekilde C ile tekrar yazdım. Hi-tech C ile derledim.  Değişkenlerden bazılarının hiçbir zaman sıfır olmaması gerekiyordu. Çünkü interrupt rutininde de kullanılan bu değişkenler sıfır olduğunda işlemci hatalı sonuç üretiyordu.  Derleyicinin ürettiği kodu incelediğimde "x=1" komutunu derleyicinin "clr X / inc X" olarak asm.ye çevirdiğini gördüm. "clr X" komutundan sonra interrupt rutini çalışınca hata meydana geliyordu. Böyle bir sorunu asm. bilmeyen bir C programcısı farkedebilir mi?. Bence zor.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: speak48 - 30 Ekim 2013, 16:11:26
Z nin asm ile derdi ne acaba
şu anki cpu lar  zaten gelen kullanım için
komut setleri artimetik,lojik,akış kontrolü,byte bit transferi
bunları asm ile yapsan ne c ile yapsan ne.

%1 lik işlerdede zaten %1 e özel işlemci olması gerekirki onu asm ile daha kaliteli programlayasın.
network processorü,dsp,fft processorü...

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: camby - 30 Ekim 2013, 16:37:02
%1 'lik kısım Özel işlemci ile yapılabilecek şeyleri kapsamıyor.

Birileri bu işlemcilere ait derleyicileri yazan tarafta işini yapıyor biliyorsunuz değil mi ?

Birileri de buna uygun mimari geliştiriyor ? Mevcut sistemleri yutup yenilerini düşünüyor , derleyici bölümüne iletiyor. vsvs

Low level'de çalışan mühendis sayısının high level'da çalışanlara oranı nedir ?

İşin mutfağını geçtim ,

basit bir kontrol algoritmasında bile

yada basit bir TFT ekran sürme kodunda bile yazdığınız C kodlarının en mükemmel kodlar olduğunu ve daha hızlı çalışamayacağını söyleyebilirsiniz. Kaldırıp eteğin altına bakmadığınız sürece doğrusunu bilemeyebilirsiniz.

Sadece C'de yazdığınız sürece pic16 ile STM32F arasındaki farkı anlayamazsınız. ( STM32'leri ASM yazmadım , ama kaldırıp ne var ne yok diye baktım )

Genele, ortaya yazıyorum : )
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 16:51:19
Gerbay

Ayağıma dolaşmayın derken seni kasdetmedim.

Bilgisayarcı ile Elektronikçiyi mukayese etmeyelim derken etmek zorundayız. Bilgisayarcı derken yani yazılım işleri uğraşanlardan bahsederken büyük veri yığınları üzerine işlem yapan işlemcinin cycle işleriyle işi olmayan ama sonuçta kod yazması gerelen kişilerden bahsediyorum.

Bu adamlarla ASM tartışması falan yapılmaz. Bu adamı ASM ile neden hamallık yapıyorsun derse bunu yadırgamam. Ama aynı söylemler elektronikçilerin formunda olursa vamminüt derim.

Kapı gecikmesi ile yazılım arasında bir bağlantı kurabildin mi?

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: camby - 30 Ekim 2013, 16:54:00
Alıntı yapılan: gerbay - 30 Ekim 2013, 16:42:19
daha net yazayım;

şu an güncel mimarilerde eğer ASM ile yazarsanız kodlarınızın daha YAVAŞ çalışma ihtimali yüksek..

Evet bunda ben de hem fikirim.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 18:30:45
Bu iş böyle olmayacak Gerbay. 3-4 hamle ilerisini görerek aynı anda 4...5 kişiyle  satranç oynamaktan bahsediyor ve hep uç nokta örnekler veriyorsun.

Ben hala kapı gecikmesinin softwaredeki karşılığı nedir soruma cevap alamadım.

Bildiğin gibi kapı gecikmesinin en büyük nedeni çipin giriş çıkış kapasiteleri yani istenmeyen kaçak kapasitelerdir. Bu kapasiteler arttıkça çipe giren sinyal gecikmeli olarak işlenir ve gecikmeli olarak çipten çıkar. Peşpeşe bağlı lojik kapı sayısı arttıkça gecikme süresi de artar.

Peki bir yazılım parçasında benzer gecikmelerin sebepleri nedir?

Nano teknoloji ufak işlerle uğraşır. Bir maddenin özelliklerini taşıyan ve daha küçük parçalara ayrılamayan parçalarına atom denir.

Nano teknolojik yazılım işleri de ASM dili ile yapılır. Çünkü ASM atomik komutlardan oluşur. Siz C'nin moleküler boyuttaki komutlarıyla atomik işler yapmaktan bahsediyorsunuz.
Dediğim gibi o %1 lik kısımlara dönelim.

Bana Keil'de CM3 için öyle iddialı öyle iddialı bir optimize C kodu yaz ve en yüksek hızda çalışacak şekilde optimizasyon seviyesinde derle ki, çıktıda yeralan yaklaşık bir kaç yüz bytelık asm kodlarına bakalım ve bir kod ancak bu kadar olabilir bir Allahın kulu bunu ASM ile daha optimize yazamaz diye iddia et ki biz de gerçekten optmize edilebiliyormu edilemiyor mu görelim. Haa bunu iddia edemiyorsan ayak altında bu kez dolaşma.

Eğer haklıysan ben de artık bu forumda ASM nin A sını ağzıma almayayım bu konuda başlıklar açmayayım.

Birilerinin muhakkak C derleyicilerini test etmek adına ortaya koyduğu kriterler vardır.

@Camby

Hemfikir olduğun konuda verecek örneğin varmı?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: speak48 - 30 Ekim 2013, 18:53:10
 Z micro denetleyicilerle bu tür kafa yorma işlerini bence boşa yapıyor.
altı üstü mikrodenetleyici donanım sabit.

sayısal donanım tasarımı konularına girerse orda bu tür olaylar istemediği kadar var.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 19:00:56
@speak48

Led yakıp söndürme işlerinde 10ns gecikmeye sahip lojik çipler kullanmak gerekmiyor.  1ms lik kapı gecikmeye sahip çipler bile fazlasıyla yeterli.

1ms lik gecikmelerin sorun olmadığı uygulamalarda ben de tutup 10ns lik çip kullanmam.

Ben kapı gecikmesiyle atıfta bulunuyorum. Anlayana...
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: speak48 - 30 Ekim 2013, 19:07:39
Alıntı yapılan: z - 30 Ekim 2013, 19:00:56
1ms lik gecikmelerin sorun olmadığı uygulamalarda ben de tutup 10ns lik çip kullanmam.

böyle bir sorun yoksa c yerine asm kullanmanında bir anlamı yok
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 20:00:32
Aynen öyle. Hatta C ye de gerek yok. Basic de olur.

Ama biz tam tersi durumlar için konuşuyoruz. Elinde 10us lik kapılar var. 100 tanesini tren gibi dizersen oluyor sana 1ms. Halbuki bunların 300 tanesini kaldırıp atabiliyorsun.

700us nerde 1ms nerde. Bu 300us un hesabını vermeye calısıyoruz.

İşlerini BASIC ile yürüten ne gerek var C ye diyecektir. İşlerini C ile yürüten de ne gerek var ASM diyecektir. Sistem aynı sistem.

Haaa Basic yavaş C kullan derlerse ben de C yavaş ASM derim.

Öncelikle uygulama ne? Eğer uygulamalar Bu forumda konuşulan sorulan sorularda olduğu gibi yavaş işler uygulamaları ise açtığım başlık son derece gereksiz ve müslüman mahallesinde salyangoz satma işinden farksız.

Led yak led söndür LCD de sonuç göster, RF ile veri aktar. Sonuçta yavaş işler yavaş işler.

Adam C'de PID kodu yazıyor fakat float işlem yapıyor.

Ne diyeyim ki. Niye çenemi yorayım ki?

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: Kabil ATICI - 30 Ekim 2013, 20:05:59
Gecikme konusuna en basit örnek 150 tane bellek hücresini sıfırlayacağız diyelim,
bunu normalde 150 sayaca bağlı döngü ile 150 tane hücreye 0x00 yazılır. Ama zaman açısından kriktik bir uygulama ise bu 150 döngünün biriktirdiği gecikme karşımıza işlemlere yetişememe gibi bir sorun olarak çıkar.
bu durumda 150 tane belleği tek tek sıfırlamak hız açısından ciddi bir avantaj sağlar. Zorluğu programın yazılmasıdır. (işlemcisine göre her döndü 2-3 saat darbesi gecikme getirir)

Diyelim band üzerinde hareket eden bir nesne üzerine bir kartuştan yazı yazılacak. Diyelim ki üzerinde kullanabileceğimiz 150 tane delik var. Ve bunlar mux olarak adresleniyor.  Bu noktada o döngülerden gelen gecikmeler oldukça büyük rakamlara ulaşabiliyor. Çünkü adreslemeler bile en azından 150 tane döngüyü gerektiriyor.  Şimdi 1 metre/ dakikalık bir hızla mı yazılacak, yoksa 4 metre/dakikalık bir hızla mı? İşte toplam gecikmeler aradaki bu farklı belirliyor.
Bu 8 bitlik 14MHz saat frekansı ile yapılmaya çalışılırsa, yazılan kodda artık 1 "nop" komutunu bile kıskanır hale gelinir.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 20:47:00
Alıntı yapılan: gerbay - 30 Ekim 2013, 19:03:18
@speak48,

@z hocam diyorki,  gerbay bu işlere bulaşınca ben de onun uzmanlık alanı dışında birşeyi sokuşturuyum araya, bu şekilde ayağımın altında dolaşmasın...

dediği gibi;  bana atıfta bulunuyor

Ahh Gerbay ahhh. Bu cevabın bana "Öküz altında buzağı aramak" deyişini aklıma getirtti.

Buradaki "anlayana" sana değil de  kapı gecikmesinin yazılımdaki karşılığı ne olur sorusunu anlayana idi. Ama sen de anlamamışsın.

Madem cevap gelmedi cevabını da ben vereyim.

" Kapı gecikmesinin ne anlama geldiğini aslında hepimiz biliriz. Sonuçta kapı gecikmesi, bir girdiye karşılık, alacağımız çıkışın ne kadar gecikmeli elde edileceğini belirler.

Y=!A işleminde, A uzunca bir süre 0 olsun. Dolayısı ile Y de uzunca süreden beri 1 dir.
Fakat aniden A=1 yaparsanız Y hala 1 de kalır. Biraz sonra Y=0 der.

Eğer yazılan/üretilen asm kodlar arasında anlamsız/gereksiz/ikilenmiş ekstra asm kodlar varsa, bu durumda bir kapının gecikme süresi gibi yazılımda da gecikme süresi oluşur.
Bu gecikme süresi yazılımcının algoritma geliştirme yeteneği zayıfsa ve dile hakim değilse daha da artacaktır.   


Basic vs sonuca anormal ölçüde gereksiz kodlarla dolambaçlı yollardan ulaşır. C bu konuda çok çok iyidir Bir makine parçasının üretebileceği en iyi kodları üretir ama idealden çok uzaktır. ASM siz ne derseniz onu üretir.  Dolayısı ile asm insanın makineye karşı bir kod üretme savaşıdır.

Bir yazılım zaten bir girdiye karşılık anında çıktı üretemez Çünkü yazılım, doğası gereği ardışıl işlemler yaparak sonuca ulaşır. Eğer ardışıl işlemler arasına anlamsız/gereksiz/çiftlenmiş ilave kodlar konuyorsa yazılımın sonuca ulaşma süresi de artar. Bir döngü içerisinde kullanılan kodlar döngünün frekansını belirler.  Eğer döngünün frekansını artırmak istiyorsak döngü içinde olabildiğince az kod kullanmamız gerekir.

İşte ASM sizi bu kodlarınız arasında kırıntı kod bırakmadan program yazmanıza olanak tanır."

ASM ile makineye karşı verilen savaş çok yavaş kazanılır. Canı tatlı olanlara, çabuk sıkılanlara önerilmez.

Haa bu çokmu önemli diyenler çıkacaktır. 

Ne işle uğraştığınıza bağlı. Gerbayın bahsettiği %1 in içindemisiniz dışındamısınız?

1 kg keçi boynuzu yiyip elde edeceğiniz 10 gr şekere muhtaçmısınız değilmisiniz?

Siz olmaya bilirsiniz. Ama bilin ki 10 kg keçiboynuzu yiyip 1 gr şekere ihtiyacı olanlar var.

Umarım o tip projelerle karşılaşırsınız. (Bu duamdır)  Umarım yapamaz ve o gün paracıklarınızı gavura kaptırırsınız. (Bu da benim sizlere bedduam olsun)
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: camby - 30 Ekim 2013, 21:00:17
Eger asm de etkn bir sekilde kod yazamiyorsak , hizli olsun diye yazdigimiz asm kodu , optimize c kodundan daha yavas calismasi muhtemeldir.
Asm yi de iyi kullanmak gerekir.
Optimize kodlari olusturan c derleyicisini yazan kisiler de yeterince sure kafa patlatmislardir asm konusunda.
Fakat asm ye hakim olunca bu durumun onune gecilebilir ancak
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 21:24:14
Gerçek dünyada bir cephede kazanılan zafer, savaşı kazanmaya yetmiyor.  Programın bir bölümünü asm'ye çevirerek o cephede zafer kazanabiliriz. Fakat burada elde edilen zafer savaşı kazanmak anlamına gelmez.

Fakat öyle cepheler varki örneğin interrupt cephesi vs... Buralarda kazanacağınız tek bir çivi bir atı, tek bir at bir yiğidi, tek bir yiğit de savaşın kaderini değiştirebiliyor.

Yok ben atla savaşmıyorum ben doğrudan uçakla bombalıyorum derseniz asm ile hiiiiç işiniz yok.  O zaman  gümüşten kablolar kullanırsınız yakışır.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: Yuunus - 30 Ekim 2013, 21:31:07
   "Z" bedduan mı tuttu nedir üç gün önce oturup asm örnekleri yazmaya başladım, C kodundaki sadece 100 ns saniyelik kayıp yüzünden, demekki çekeceğimiz varmış. Bedduan tuttu gözün aydın   >:( söylediğin %1 lik kısma girer yada girmez bilmem ama 15 sene sonra beni mecbur bıraktı ona kızıyorum.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: hasankara - 30 Ekim 2013, 21:52:57
16f876a çip i ile asm konusunda ciddi bir ilişiğim olmuştu. o zamanda entegrenin sınırlarına gerçek anlamda ulaştığımı hissedebilmiştim tabi yazdığım kodların amatörce yazıldığının şimdi bilincinde olabiliyorum. yazdığım kodları hep bir düzene sokma çabasında bulunmaktaydım ve gerçek zamanlı çoklu işlem olayını asm ile amatörcede olsa bir süre sonra başarmıştım. Tabi bu şans eseri ortaya çıkmadı ihtiyaçtan dolayı ortaya çıkmıştı. real time multitasking yapamadan o entegreyle hedeflerime ulaşmak nerdeyse imkansız. hedefime ulaşabildim ve istediklerimi real time multitasking sayesinde yapabildim hatta üstüne o entegreyle daha birçok şey yapılabilir kılmıştım. tabi bu yapının ismini dahi bilmiyordum.

3 (üniversite 1. sınıftayken) sene önce yaptıklarımı görenler neden c de çalışmıyorsun dediklerinde c yi tam bilmiyordum ve asm de kurmuş olduğum bu yapıyı c de yapamama korkusu vardı içimde hep ilk başta biraz herkes gibi itiraz etmiştim. bunun açıklaması çok basit en iyi yol bildiğin yol diye bir teori ile yaşamaktayız. bence zaman varsa başka yolları da denemek gerekiyor bu kadar kısa kestirip atmamak gerekir. 2. dönemde zorunlu c dersinde c nin ne kadar esnek bir dil olduğunu ve bir çok profesyonelin bu dili kullandığını gördüm. şimdi aynı yapıları c üzerinde de kurabiliyorum hatta bu yapılar için bir standart oluşturulamaz mı arayışına dahi girdim.

yani uzun lafın kısası real time multitasking in getirisini görebilen birisi olarak buna elektronikçilerin de ihtiyaç duyduğunu düşünmekteyim. hatta bu sayede rakiplerin çok rahat önlerine geçilebilecek piyasa kurulabilinir. asm kodu arada okumak gerekiyor bunun faydasını da görüyorum. ancak asm de yazma gereksinimi duyduğum zaman derleyicinin kullanım kılavuzunda anahtar kelimelerden aratınca ihtiyacım olan şeyi c de bulabiliyorum yani bunları derleyici tasarlayan adamlar düşünmüş oluyor bile. ona rağmen ihtiyacımızı derleyici sağlamıyorsa asm e muhtaç kalabiliriz bununda bilincinde olmak gerekir. c dede zaten öyle açık bir kapı var #asm #endasm.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: berat23 - 30 Ekim 2013, 22:51:24
burada gerbay farklı birşey söylüyor ama kimse anlamamış. yapılan proje büyüdükçe aslında önemli olan düzgün olması oluyor, hız çok önemli olmayabiliyor. ayrıca embedded demek 16f877 ile birşeyler yapmak, int. ile uart'tan veri okumak demek değil, vizyonu geniş tutmak lazım. int. handler için illa asm kullanmak gerekmiyor zamanlamayı tutturmak için. bence eski düşüncelerinizi, bilgilerinizi bırakın gerbay ne diyor anlamaya çalışın.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 22:58:55
Bazi uygulamalar vardir. Hiz onemlidir. Fakat bu uygulamalarda  hiz lazim diye asm kullandirtmazlar. Fiyat falan hicmi hic onemli değildir. 10 kati hizli 100 kati pahali islemci kullanirsiniz ama C yada turevleri ile yazarsiniz.

Ama bizim derdimiz bu uygulamalar değil. Buyuk projeler hic değil. Hizin onemsiz oldugu projeler hic mi hic degil.

Bizim derdimiz daha hizli islemci kullanmadan bazi bolumleri asm yazarak projeyi kotarmak.

Gerbay hocami severim. Eger C konusunda bizleri aydinlatacaksa bir baska baslik altinda kendisini dinlemekten zevk alirim. Ama bu baslikta yazdiklarindan zevk alamadim.

Haa bana burada pipeline conflictden bahsedecekse ileri ve geri yonde adreslemeden bahsedecekse o konudaki yazilarini da zevkle okurum.

Ama Intel I7 falan cekilmiyor.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: berat23 - 30 Ekim 2013, 23:06:41
i7 diye kestirip atmayın, cm4 bile uyuyor aslında gerbay'ın anlattıklarına.

birde c'nin hızı yetmediği zaman, asm ile çok sıkı bir zamanlama ile program yazmak ne derece mantıklı tartışılır. ayrıca mevcut işlemci fiyatları ortadayken, projemizde çok büyük çaplı değilken neden 8051'den kalma alışkanlıklara devam ediyoruz?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 23:09:23
Sizin mantiga gore C kodlama yaparak bir rutini 100us de isleyecek sekilde yazamiyorsak tek cozum bir ust frekansdaki islemciye gecmek oylemi?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: berat23 - 30 Ekim 2013, 23:16:48
hangi kodda zamanlamayı tutturamadınız? tek sorun c ile yazmak mı?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 23:31:47
Alıntı yapılan: berat23 - 30 Ekim 2013, 23:16:48
hangi kodda zamanlamayı tutturamadınız? tek sorun c ile yazmak mı?

Evet. Istersen, ugrasirim dersen hemen sana ozel bir senaryo yazayim. Sorumu sorayim.

Ya da;

Gerbay 1.25 Mips/Mhz den bahsetti.

Bana CM3 islemci icin C ile kucuk ama bir ise yarar  kodlama yap. Yapki 1.25 Mips/Mhz performansa ulas.

Ya da yazdigin kodun kac Mips/Mhz performansda oldugunu soyle. Sonra senin kodunu asm ile kac MIPS/Mhz yapabiliriz onu gorelim.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: cicjoe - 30 Ekim 2013, 23:47:42
Tartismaya C++'i da ekleyebilir miyiz? Onu hep ihmal ediyoruz gibime geliyor..
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 30 Ekim 2013, 23:58:04
C ne ki C++ ne olsun.  ++ C nin bir gomlek ustu demekse onun adi C++ degil ASM zaten. :)
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: RaMu - 30 Ekim 2013, 23:59:53
Asm nin ince detay gereklilikleri bir yana
birde şu getirisi var;
forumda veya heryerde
md programlamaya başlayan arkadaşların garip sorularıyla karşılaşıyoruz
ne algoritma bilgisi var nede kullandığı yapıyı tanıyor
ondan sonra neden kesme içine yazdığı kod parçası herşeyi allak bullak ediyor vs. diye soruyor
anlat anlatabilirsen hadi.

Asm bilmeden program yazan bir adam
er vazifesi görmeden paşa oluvermiş bir askere benzer
verdiği emri kim hangi zorluklarla nasıl yerine getiriyor
zerre kadar bilgisi yoktur
ondan sonra tepeden yağdırır emirleri yapın ulan diye
sonra çok basit yaptırabileceği bir işi bile 1 tabura yaptıramaz
bana alayınız lazım der üst modele geçmek ister.

Elbette asm nin gelişmiş versiyonlarıdır diğer diller
ve hepside sonuçta asm instruction set e çevirirler herbir yazdığımız şeyi
ama temelde ne dönüp bitiyor bilirsek bundan kimseye zarar gelmez.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: Mr.Java - 31 Ekim 2013, 10:21:48
Bir programlama dilinde esneklik nedir ?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 01 Kasım 2013, 13:34:33
Haydin yahuu.

İçinizde en baba C derleyicisi ile bana CM3 ile 1.25 MIPS/MHZ performansda koşacak C program örneği verecek başarılı Cci yokmu?

Hani diyordunuz ya C derleyici Pipeline durumlarını da gözetir ve yüksek performanslı kod üretir.

Kaldı ki I7'ye falan geçtiniz. Millet PIC kullanıyor. C + PIC kullananlar da ASM için atıp tutuyor.

Hadinnn....
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: CoşkuN - 01 Kasım 2013, 13:42:16
Hocam iyi sabır var valla sizde. Bu konular üzerinde bu kadar konuşmak yormuyor mu sizi?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 01 Kasım 2013, 13:54:43
Yok hocam. Reklam kokan bazı sloganlarla ahkam kesiliyor.

3 bıçaklıları bırakın 5 bıçaklı traş bıcağı ile daha iyi traş olacaksınız. Bu diş macunu dişlerinizi daha iyi parlatır. C ile çok hızlı koşan kod yazabilirsiniz vs...

-----------------------

Asm de çok sık yaptığımız hatalı yazımlar yüzünden yanlış çalışan kodları C de hiç kafa yormadan yazarız. Çok anlaşılır kod yazarız. Çok kolay okuruz. En azından uğraşla bir başka işlemciye kodlarımızı taşırız. Amacımıza daha çabuk ulaşacak şekilde hızlıca yazılım yaparız.

Bunların hepsi doğru ve çok çok güzel özellikler. C ye şapka çıkartırız.

Fakat bunlara ilave olarak ASM,ye ne gerek var C ASM kadar hızlıdır hatta ASM ile kod yazarsanız daha kötü performans bile elde edebilirsiniz dendi mi hopps diyorum sadece.

Bu devirde ASM'mi kullanılır vs deniyor da...

Tartışmak istediğim için zaten başlığı ben açtım.

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: rree - 01 Kasım 2013, 14:00:53
Bunumu demek istediniz! Gerçi bu işin acemisiyim.
#include <Den1.h>
#define PortA pin_A0/8
#define PortB pin_B0/8
#define verigonder(a,d)   {#ASM\ bcf 0x03,5\ movlw d\ movwf a\ #ENDASM}
void main()
{
verigonder(PortA,0b00001111)
   while(TRUE)
   {
      //TODO: User Code
   }
}
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 01 Kasım 2013, 14:41:19
Hocam maden bunları yazdın, söylediklerinin hurafe olup olmadığını ispatlamak zorundasın.

Bana 1.25 oranının yakalandığı iddia edilen işe yarar bir C örnek lütfen.

Çok fazla asm kod yazmış olabilirsin. Acaba asm komutları peşpeşe dizerek program mı yazdın yoksa gerçekten asm program mı yazdın?

Bu önemli değilmi? Zaten ilk mesajda yer alan 9 soruda buna da atıfta bulunmuştum.




Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 01 Kasım 2013, 15:39:45
@rrre

2 Cycle isteyen komutları bir kenara bırakırsak, lineer kodlama yaptığımızda cycle başına işletilebilecek komut sayısı 1 olabilir.

Fakat özel tekniklerle (buram buram reklam kokuyor) 4 clockda 5 komut işletilebiliyor.

Hani CM3 işlemcilerde ASM ile yazarsan C den daha kötü bir performans bile elde edebilirsin deniyor ya, ben de diyorumki C ile işe yarar bir kod yazın bu oranı yakalayın.

Sanki C yazanlar makinaya C kod koşturuyorlar sanki ben onların C derleyicisinin üreteceği kodları elle yazmaktan acizim.

Lokal olarak 5..10 ASM satırında 1.25 sonrasında ortalama belki de 0.8.

Bir kaç yüz bytlık programda ortalama olarak CPI değerini 1,e yaklaştırsam benim için başarıdır ki hiç pipeline boşaltma durumlarına özel olarak kafa yormayacağım.

Açın optimizasyon ayarlarını alın max hız konumuna sonra da basın gaza, bakalım görelim C dediğiniz meret kaç basıyor...

Biraz tartışınca da fanatiklik yapıyor oluyoruz. CM3 şart değil ki. CM0 olsun. PIC olsun. 8051 olsun.

-----------------------------

Üniversiteden mezun olduğumda hex kodlamadan başka programlama bilmezdim. Bakın dikkat edin hex kodlama diyorum ASM bile değil.

Kısa bir süre sonra PC ve MsDos'un meşhur Debug ve Symdeb programları ile tanışınca mnemonik kodlarla program yazılabildiğini keşfettik.

Keşfettik diyorum çünkü biz üniversitede mikroişlemci programlama dersi almadık.

Ben uzun yıllar çok hızlı çalışan kod yazdığımı sanıyordum.

Bir gün bir işe başladım ve PC de asm ile yazdığım pixel pixel grafik çizen programın arkadaşımın C ile yazdığı programa kıyasla kağnı gibi yavaş, grafik çizdiğini gördüm.

Nasıl olurdu da C ile yazılmış bir program ASM ile yazılandan daha hızlı koşuyordu?

Sorun algoritma vs sorunuydu. Ben hazır BIOS interruptlar üzerimden pixel çizdiriyordum C program ise  hesap kitap yapıp yapıp doğrudan CRTC RAM'a ulaşıyordu.

O halde bu ASM nin değil benim becereksizliğimdi.

C deki grafik rutinini debug edip asm kodları elde ettim. Aradan bir sürü fazlalık kodu çıkartıp attım. Benim kodum artık C'ye nal toplatıyordu.

Olay işte bu.

Bir kod optimize edilmek istenirse optimize edilir. Asm kullanarak optmize ettiysek bunun daha da üstü olamaz. Işık hızı geçilemez....








mesaj birleştirme:: 01 Kasım 2013, 15:40:41

Alıntı yapılan: gerbay - 01 Kasım 2013, 15:21:29

:)

hocam hazır yazılmışı elinizin altında var. tekrar bir şey yazmaya gerek yok.

keil ın içinde /ARM/Examples/DhryStone

dizinine bakın...

şu dokümana da bir göz atın;

http://infocenter.arm.com/help/topic/com.arm.doc.dai0273a/DAI0273A_dhrystone_benchmarking.pdf (http://infocenter.arm.com/help/topic/com.arm.doc.dai0273a/DAI0273A_dhrystone_benchmarking.pdf)



mesaj birleştirme:: 01 Kasım 2013, 15:22:17

haaa, bu arada; o kod C ile yazılmış..

Hemen bakalım hocam.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: RaMu - 01 Kasım 2013, 18:14:53
Böyle bir ibare var linkdeki dökümanda;

(https://lh4.googleusercontent.com/-WjgD_7siPBY/UnPTENqkewI/AAAAAAAAATY/WpjpKSwkfxg/w842-h261-no/not.JPG)
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 01 Kasım 2013, 20:03:26
@Gerbay

Verdiğin linteki dokumana baktım fakat araya giren işler yüzünden şu saate kadar meşguldüm. Programa sadece üstün körü bakabildim.

Bir verilen örneği bir de sıradan fakat iyi kodlanmış ve bir amacı gerçekleştiren C kodunu derleyip bakacağım.

-----------------------

Her derleyiciyi Hitech mi sandın derken?

Bu durumda Hitech'i eleyebiliriz. Bu derleyicide çalışanlar optimizasyon vs konularında ASM dendiğinde atıp tutmasınlar.



Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 00:15:32
Hocam ben bu verdigin Dhrystone ornegini hic begenmedim.

Alıntı yapılan: gerbay - 30 Ekim 2013, 16:28:47
.......hiç düşündünüzmü Cortex-M0 lar 0.9 MIPS/MHz ken Cortex-M3 ler nasıl oluyor da 1.25 MIPS/MHz olabiliyor..

pic mi kullanacaksınız, pic32 ler 1.65 MIPS/MHz,
avr mi kullanacaksınız, avr32 ler 1.38 MIPS/MHz.......

Bana ustte dedigin gibi mesela C ile yazacagin program, CM3 islemci icin ise yarayan (ne bileyim ledleri yakip sondursun yada  hesap yapsin yada bir sey yapsin) su 1.25 MIPS/Mhz performansa bir ulassin.

Senin icin zor olmasa gerek.

Yoksa burada 1.25 Mips/Mhz derken yanlis mi yazdin?  1.25 DMips/Mhz mi demek istiyordun?



mesaj birleştirme:: 02 Kasım 2013, 00:38:35

Cunku benim MIPS/MHZ den anladigim

Her 1 Mhz basina 1 milyon islem yapabilen islemci 1 MIPS/Mhz demektir.

CPU 4 cycle de 5 komut islerse bu 4 clk zaman araligi icin islemciyi 1.25 MIPS/MHZ de kullanmis olur. 

Boyle bir durumun CM3 islemcide olmasi mumkun gorunmuyor.

Eger boyle ise DMIPS/MHZ ile beni kandirdin. DMIPS'in cok cok farkli bir anlami var ve ne oldugunu bilmek istemiyorum.

Bu 1.25 orani ile kafami cok karistirdin.

Yok eger 1.25 orani icin gercekten bir yontem varsa C derleyici yazarlari bu orani yakaliyorsa benim de yontemi ogrenip yakalamam lazim.

Yontemini goremedim bilmiyorum. Bugune kadar hedefim 1 oranina yaklasmakti.

http://www.arm.com/files/pdf/CortexM3_Uni_Intro.pdf (http://www.arm.com/files/pdf/CortexM3_Uni_Intro.pdf)
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: tyildizak - 02 Kasım 2013, 02:59:37
Alıntı yapılan: z - 02 Kasım 2013, 00:15:32

Cunku benim MIPS/MHZ den anladigim

Her 1 Mhz basina 1 milyon islem yapabilen islemci 1 MIPS/Mhz demektir.


Hocam MHz zaman birimi değil, dolayısıyla "MHz başına" ifadesinde sorun var. Dolayısıyla "MIPS / MHz"de  de öyle.

Biliyorsunuz, MIPS zaten 1 milyon komut / saniye gibi bir oran belirtir.

MIPS / MHz ise ,  "1 milyon işlem / saniye / MHz"  gibi birşey olur.

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: trgtylcnky - 02 Kasım 2013, 10:41:01
Zaten C derleyicisi ASM kodu üretmiyor mu? Optimizasyon yapıldıktan sonra C kodunun hala daha hızlı olması bence imkansız.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: blacklogic - 02 Kasım 2013, 11:07:23
Konunun dışında belki ama meraktan soruyorum, 1 clock darbesinde işlenen komut 1 asm komutu mu oluyor? Ayrıca şu mips olayı hakında bi açıklama yapabilir misiniz? 1.5mips/mhz dediğinde saniyenin milyonda birinde 1.5 komut mu işlemiş oluyor?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 11:13:46
Alıntı yapılan: tyildizak - 02 Kasım 2013, 02:59:37
Hocam MHz zaman birimi değil, dolayısıyla "MHz başına" ifadesinde sorun var. Dolayısıyla "MIPS / MHz"de  de öyle.

Biliyorsunuz, MIPS zaten 1 milyon komut / saniye gibi bir oran belirtir.

MIPS / MHz ise ,  "1 milyon işlem / saniye / MHz"  gibi birşey olur.

Haklisin ifade ederken hata yapmisim. Isin ozu, cycle basina islem sayisi diyeyim. Paralel isler yoksa en ideal durum 1.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: rree - 02 Kasım 2013, 11:24:08
                        Her komutun kaç clock harcayı komuta göre değişir. Pic 16 da mesela movwf  1  clock   goto komutu 2 clock.

Burda neyi tartışılıyor anlamış değilim!!
                 C ile program yazdın asm listesine bak fazla kod mu üretmiş  aç bir asm bloğu  asm kodlarını yerleştir.Fonksiyon çağrısdamı zaman harcıyor geç macro asm c içinde tanımla olsun bitsin.Bence  macro asm = asm  .Şunu diyebiliriz mikro işlemcinin mimarisi ve nasıl çalıştığını anlamak için asm öğrenilir. Ondansonra program yazmak için bir üst dile geçmek lazım. Yoksa fonksiyon kütüphane dediğimiz destekten yoksun bir derleyici ile  ine ile kuyu kazmak. Ben ilk önce asm yi öğrendim sonra proton baziğe geçtim, Şimdi ccs kullanıyorum. Yüzde 90 problemleri çözebiliyorum.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 11:30:58
Gerbay hocam

CM3 paralel islem yapan uniteye sahip değil.

3 asamali pipeline mekanizmasinda

erisim yapan birim 1 tane
decode eden birim 1 tane
execute eden birim 1 tane.

Linkini verdigim dokumanda 27 sayfada CM3 icin decode ve execute eden birimde bazi paralel bloklar var.

http://www.arm.com/files/pdf/CortexM3_Uni_Intro.pdf (http://www.arm.com/files/pdf/CortexM3_Uni_Intro.pdf)

Fakat bu birimler pipeline blogunda 3 Cycle'dan fazla zaman alan komutlarin  ortalamasini 3 cycle yapmaya yonelik. (Sayfa 31) Zira 4 cycle'a cikan komutlar pipeline senkronizasyonunu bozmadan (1/3 oranina sadik kalacak sekilde) islemeyi sagliyor.

DMIPS/Mhz olayi kandirmaca kokuyor.

Cunku DMIPS=Dhrystones per scecond gibi bir ifade uzerine kurulu. Buradaki Dhrystones'un MCU komutu olmadigi belli.

Eger paralel islem olmasi gerekiyorsa pipeline asamasinda ayni sutunda iki execute, yada decode asamasinda 2 decode islemi yapilabilmesi lazim. Fakat hep capraz durumdalar.

Verilen orneklerde CM3 ve altini konusursak memnun olurum.

Cortex M0 ile pes pese 1 cycle komutlari ard arda dizersem 1Mips/Mhz oranini tuttururum değil mi? Ama Aadamlar 0.9 Mips/Mhz yazmislar. Neden? Cunku gene ne zikkim bir tanim ise DMIPS de ondan. Bu da beni hic ilgilendirmiyor.

Eger C/ASM nin MIPS acisindan tartismasi yapilacaksa basindan beri dedigim sekilde bir ornek vermeniz lazim. (Ne cok cok kisa ne de uzun bir program ornegi)

DMIPS vs testleri dillerden ziyade farkli islemcilerde belli bir test programini kosturup  MIPS/MHZ oranini arastirmaya yonelik. Komut kalitesi yuksekse bunun 1 uzerine cikmasi normal. Fakat bu degere bakip 1 cycle da 1 den fazla komut paralel isletiliyor anlami cikatilamaz.

Mesela test programi  128 bitlik sayilarin carpimina yonelik olsaydi, bu testi ard arda 1000 kere yaptirsaydik,

bu test X saniye surseydi, F de MCU clk frekansi olsaydi  atiyorum X/F gibi oranlara  bakarak yorumda bulunabilirdik. Fakat buradaki orana bakip da islemci paralel islemler yapiyor sonucuna ulasmazdik.

Zira bu oran DSP ve ARM islemcilerde cok buyuk cikarken 8051 ve PIC serisinde yerlerde surunecekti.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: mufitsozen - 02 Kasım 2013, 13:09:35
Alıntı YapEger C/ASM nin MIPS acisindan tartismasi yapilacaksa basindan beri dedigim sekilde bir ornek vermeniz lazim. (Ne cok cok kisa ne de uzun bir program ornegi)

sayin @z EEMBC'nin CoreMark benchmarki gomulu sistemler icin ve daha gunceldir. C kodunu web sitesinden indirebilirsiniz.

Sizde bu benchmarkii ASM ile yaziniz ve ayni platformda run ediniz, sonuclara bakiniz tartismada sonuclansin.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 13:15:12
Bu tartismanin ilk mesajimdaki sinirlarini 9 soru ile cizdigim alandan buraya gelmis olmasindan rahatsiz değilim. Tartismada CM3 islemcide karsima 1.25MIPS/Mhz oranini yakalamaktan ve bu orani asm ile yakalayamayacagimdan, asm ile yazarsam C den daha da kotu sonuclar elde edilecegimden bahsedildi.

Ben 1.25 oranini yakalamayi bilmiyorum. 1'e yakin kodlama yapmaya calisiyorum. Dolayisi ile ornek kod veremem. Ama aramizda 1.25 oranini yakalayacak adam varsa ciksin yazsin diyorum.

Eger ogretirseniz bundan sonraki CM3 asm kodlamalarimi 1 in ustune cikartmaya calisirim.

Verdiginiz linkte gene tartismamizla bagdasmayan CoreMark/MHz=1.91 orani verilmis. (STMicroelectronics STM32 90nm ) Bunun anlami da MIPS/Mhz olmasa gerek.

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: mufitsozen - 02 Kasım 2013, 13:19:12
Alıntı yapılan: z - 02 Kasım 2013, 13:15:12
Bu tartismanin ilk mesajimdaki sinirlarini 9 soru ile cizdigim alandan buraya gelmis olmasindan rahatsiz değilim. Tartismada CM3 islemcide karsima 1.25MIPS/Mhz oranini yakalamaktan ve bu orani asm ile yakalayamayacagimdan, asm ile yazarsam C den daha da kotu sonuclar elde edilecegimden bahsedildi.

Ben 1.25 oranini yakalamayi bilmiyorum. 1'e yakin kodlama yapmaya calisiyorum. Dolayisi ile ornek kod veremem. Ama aramizda 1.25 oranini yakalayacak adam varsa ciksin yazsin diyorum.

Eger ogretirseniz bundan sonraki CM3 asm kodlamalarimi 1 in ustune cikartmaya calisirim.

Aramizdaki en iyi ASM bilen sizsiniz. Size daha iyi ASM yazmayi gosterecek birisi olmadigina gorede konu kapatilabilir.

C bilenler C ile ASM bilenlerde ASM ile calisirlar.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 13:24:02
Hocam ASM yi en iyi bilen değilim. Oyle bir iddiam ve amacim da yok.

C kodlarinin derlenmis hallerini inceleyerek asm konusunda yeni yeni seyler ogreniyorum. Bana asm ile ornek verilmesini degil de C ile 1.25 oranina cikilan ornegi istiyorum. (ASM sini cekip cikartabilirim)

Anlasilan  bilmecemi sevmediniz.


Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: hasankara - 02 Kasım 2013, 14:33:50
ben bulmacanızı sevdim sayın @z güzel şeyler öğrendiğimi düşünüyorum. özellikle mips ve arm konusunda fazla bir bilgim yoktu. üstü kapalı şeyler biliyorduk en fazla. bunun sebebini arm tabanlı mikrodenetleyiciler le çalışmamış oluşuma bağlayabilirim. stm32f407 dicovery kit le c de biraz kurcaladım ama pipeline dolaylarına fln hiç girmedim. pic de sanırım risc mimarisinden gelen bir durum ki 4 cycle de 1 komut bazı komutlar 8cycle da oluyor hatta, standart bir durum olduğu için en fazla buralara kadar inebildik. birde pic32 de pipeline varmış ama ondada yazdığım c kodlarının asm sinden hiç birşey anlamadım desem yalan olmaz sanırım.

arm tabanlı denetleyicilerinde asm kodları olarak pic deki komut yaz geç değilde bir işi yapmanın pic asm e göre çok daha fazla yolu olduğunu vurguluyorsunuz anladığım kadarıyla. bu sebeple c derleyicilerinde her zaman fazlalık kod bulmanın mümkün olduğunu vurguluyorsunuz.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 16:08:56
Hocam benim yaptığım çıkarımım CM3 ler paralel işlem yapamıyor.

Yoksa ARM işlemcilerin yada diğer firmaların paralel işlem yapan işlemcileri muhakkak var. I7 dediğinizde tepki vermemin sebebi de buydu zaten.

Bugüne kadar 1.25 oranına hep acaba diyordum. Buradaki 1.25 Mips/Mhz le aslında anlatılmak istenenin 1 clk da birden fazla komut işletilerek bu orana çıkılmadığını anlamış oldum.

Verdiğin DhryStone dokumanını ilk kez inceleme şansım oldu.

Sonuçta farklı frekanslarda farklı komut kümelerinde yüzlerce işlemci var. Bunlara öyle bir test programı (Program belli) koşturalım ki MIPS ve MHZ den bağımsız bir oran elde edelim demişler.

Bütün olay bundan ibaret. Dolayısı ile 1.25 oranı bu başlık altındaki tartışma açısından aldatıcı, reklam kokan bir değer.

Eğer haklı isem tartışmaya kaldığımız yerden devam edebiliriz.

Kaldığımız konu;

Lokal kazanılan zaferlerin savaşı kazanmaya yetmeyeceği konusu.

C fonksiyonlarının altında (program demiyorum C nin temel komutlarının asm kodlamasından bahsediyorum) mükemmel ASM kodlama olabilir. Fakat bunları uç uca bağladığımızda mükemmel asm koda ulaşırmıyız?

Elbette hayır. Bir programın bir kısmını mükemmel güzellikte ASM ile kodlasak mükemmele ulaşırmıyız elbette hayır.

En son buralarda kaldık.

Eğer Mips/Mhz oranı için hatam varsa söyleyin. Bu oran yerine eğer paralel işlem yapabilen işlemcilerden bahsetmeyeceksek, istruction per cycle IPS bizim için aldatmacasız reklam kokmayan daha doğru  bir değer.

Komut kümesi karmaşıklaştıkça hele hele paralel işlemler gündeme gelirse ASM yazım zorlaşır. Eğer bu işlemcileri kullanırmısın diye sorarsan hayır derim. Nedeni böylesine işlemcilere ihtiyaç duyacak elektronik projeler ilgi alanımın dışında. Bu konular bilgisayarcıların işleri. (Görüntü işleme, Tıbbi görüntüleme, Radar yazılımları vs vs)

Ha eğer ki kullanmam gerekirse C tercih ederim. Fakat bu ASM ile hiç yazamayacağım anlamına gelmez. Sonuçta insan zekası en azından şimdilik makineden üstün vaziyette.

----------------------------

Sanayide çimento kamyonu üreten bir adamla tanıştım. Çimento tankeri silindirik değildir. Dikkat edin garip bir yapısı var. Adam bunu üretiyor. Kalın demir saçı 10mm falandı galiba kesmiş biçmiş büküyor
kaynatıyor ve o şekil oluşuyordu.

Adamın eğitimini sordum. Bilgisayardamı tasrladın vs sordum. İlk okul mezunu bile değilmiş. Bilgisayardan B sinden haberi yok.

Ama insan. İnsan zekasına sahip....


Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: hasankara - 02 Kasım 2013, 17:23:01
@z en son yorumunuzda ki paralel işlemlerden kastınız nedir? 1.25 mips/mhz dediğiniz mevzu da ki bir saykıl da birden fazla asm komut işlemi yapabilme kabiliyetimi yoksa daha üst katmanlar yani yazılımsal olarak görevleri işlem adında gruplandırarak bu işlemlerin birbirlerine göre paralel yürütülme konusundan mı bahsediyorsunuz?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 17:31:35
@Gerbay

Sen iddia ediyorsun ben de kod parcasiyla ispat et diyorum.

Yaniliyor olmayi cok istiyorum. Isin aslini bilmiyorum. Fakat cok guvendiginiz C derleyicinizle bize bir ornek sunabilmeniz lazim.

Ben olsam simdiye kadar on kere kod yazar verirdim.

--------------------

CM0 da pes pese tek cycle komut isletttigimde neden  1Mips/Mhz olmuyor onu acikla bari....

--------------------

Benim istedigim alti ustu 5 asm komutluk bir ornek. Bu 5 komutu 4 cycle da isleteceksin. Hepsi bu. Vazgectim ise de yaramasin. Abuk sabuk is yapsin.

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: speak48 - 02 Kasım 2013, 17:55:52
 1 in üstüne nasıl çıktığını değilde nasıl altına indiğini açıklayabilirim.
pipeline yapıyı bozan en önemli instructionlar branch instructionları.
eğer birden çok gelişmiş dallanma tahmin edicisi yoksa.
alınan komutlar yanlış dallanmadaysa tüm pipeline işlemi iptal edilip dogru dallanmaya geçilir.
buda  çalıştırlan kodlarda azalmaya neden olur. dmips/mhz oranı 1 in altına düşer.
0.9 dmips /mhz oranı net bir rakam değildir oluşan hatalı dallanmalar sonucu düşen ortalama değerdir.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 18:06:25
CM3 ailesinde branch komutu her zaman pipeline'i bozmuyor. CM0 dan en buyuk ayricaliklarindan birisi bu zaten.
Kaldiki 1 cycle komutlarin arasina 2 cycle komutlar koydugunuzda ortalama hemen 1 ina ltina iniyor.

Gerbay yada bir baskasi 1 in ustune cikan ornek versin ellerinden opecegim. Ufkumuz genislemis olacak.

Diyelim ki verdiler ufkumuz genisledi.

Tartisma bitmeyecek.

Ne demistik bir cephede kazanilmis zafer tum savasai kazanmaya yetermi? Yetmez sadece ozel durumlarda yeter. 1.25 orani toplamda 100lerce byte olan kod parcaciginda ne kadar alanda kendini gosterecek?

Neyse o kisimlara gelmedik henuz.

-----------------

Anladigim kadariyla dokumanlarda bazen Dmips/Mhz yerine  Mips/Mhz yaziyorlar. Gerbay da bunun birden buyuk oldugunu gorunce islemcinin paralel islem yaptigi seklinde yorumluyor.

Ama Insallah ben haksiz cikarim.

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: Yuunus - 02 Kasım 2013, 18:37:41
   "Z" hocam, sanırım gerbay dediğiniz hızı yakalayacak bir örnek hazırlıyor yoksa çoktan kırk tane örnek yazardı. Ayrıca Tartışma da çok faydalı, en azından şahsım adına C ile asm arasında uçurum varmı onu göreceğim. Birde "Z" hocam yazdığının kodun  hızını nasıl göreceksiniz yani nasıl ölçeceksiniz Analyzer filan mı kullanacaksınız?
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: RaMu - 02 Kasım 2013, 18:49:08
Hocam gerbayın dediğine bende rastlamıştım
ama tam tersi konuda, c derleyicisi bunu yapıyorda değilde
pic32 için asm kod yazma arayışındayken,
hatta konusunu burada açmıştım yine ne işin var c ile yaz kafayımı yedin denmişti zaten,
hoş ben ne pic32 ile uğraşmış oldum nede pic32 asm ile arm a bakmaya başladım c ile.
Ama pic32 için asm toplama çıkarma yfak tefek işler yapan örnek kod yazıp derlemiştim,
bu sırada komut setini incelerken bahsedilen olay dikkatimi çekti,
net hatırlamıyorum ama şöyle şeylerden bahsediyordu,
işte bu komutdan sonra şu komut kullanılırsa komutlar beraber (execute) işlenir gibi,
yani gerbayın dediğini asmde yapmakta çok sıkıntılı bir iş değil aslında
derleyicininde bunu yapabilmesi hiç zor değil zaten
belli komutlar var peşisıra gelince bu durumu sağlayacak
ve o komutlarında neler olduğu komut setinde belirtilmiş durumda,
bu iş-konu uzarsa ben birara yazdığım alıştırma asm kodları hatırlamaya ve
aynı örneği yine pic32 için mikroc de yazıp asm çıktısına bakmaya çalışırım.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 18:49:54
Kod parcasini bir kac yuz yada bin kere donguye sokup scopla bir pinden cikartacagimiz sinyalin frekansina bakariz yada komutlara paralel olarak donanima ait counteri saydiririz. O kismi cok dert degil.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 02 Kasım 2013, 19:36:12
Hocam orda sozu edilen paralel islemler kelimesi cok elastik. Adigecen paralel islemleri, MCU komutlari paralel isliyor diye yorumlamak dogru değil. (Bunu destekler net ifadeler yok yada ben goremedim)

Bir komut alt seviyede mikrokomutlardan olusur. Bu komutlari bizim kullanma sansimiz yok. Islemci bunlari paralel kullanilabilir. Fakat biz bu mikro komutlarin sonucuna bakariz.

CM3 ASM kitapciklarina bakiyorum paralel islemeye dair tek bir aciklama bulamadim.

Sadece Nop icin soyle bir ibare var. Nop komutu fetch, decode islemine alinir fakat execute islemi yapilmaz deniyor.

Pes pese noplardan olusan  kod parcasi bile 1 oraninin ustune cikamiyor. Cunku sadece execute fazi iptal oluyor. Tam bu esnada bir onceki komut decode islemine baslamis oluyor.

Bir de Multiply komutlarina bakmak lazim. Bu komut ALU'dan bagimsiz ayri bir blokda ele aliniyor.

Fakat diyelimki bir sekilde 4..5 komut icin 1.25 oranina ulastik. Bu orani pes pese ne kadar tutturacagiz ki ortalama 1 den buyuk olsun.

Imkan ve ihtimal yok gorunuyor. Bahsettigin paralel islemler sayesinde su anki 1 ve 2 cycle komutlara ulasmis olmalilar. Aksi takdirde ASM kitapciklarinda bu durumlari mansetten verirlerdi ama yok. Kelimesi yok.

Pipeline uzerinde islem yapan komutlar bile sistemi yavaslatmaya yonelik.

Sen uretici olsan bu tip durumlari ASM dokumanlarda aciklamazmiydin. ALU unitesinde pipeline penaltilarin olmadigi bile yazilmis ama her ne hikmetse paralel islenebilen komut diizlislerine hic deginilmemis.
M0'lardan farkli olarak Branch komutu icin yapilan iyilestirmeden sozediliyor o da pipeline iceriginin bazen bosaltilmayacagina yonelik.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: cicjoe - 03 Kasım 2013, 00:27:41
Bu pipeline hazards olayina ben de takilmistim.. CM0 icin definitive guide'i okurken, kodlara baktim, dumduz yazilmis gibi geldi.. Ders notlarimi actim baktim, oyle olmamasi gerekiyor diye dusundum.. Biraz nette arastirdim, Forwarding, Interlock gibi tekniklerle bunlari donanimda hallediyormus sanirim.. Ben de olayin asm kismina cok takilmayip, C uzerinden devam edeyim dedim ama hala ne tur sikintilar oldugu konusunda bilinmezler icindeyim.. Bu baslikta konusu acilmisken belki hocalarimiz bu konuda bize aydinlatir, soru isaretlerimiz silinir =)
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 03 Kasım 2013, 12:45:47
Eger kullandigin islemcinin pipeline bufferinda isleme alinacak sirali komutlar, sirf bu siralamada olduklari icin isletim cip ureticisinden kaynaklanan hatalar yuzunden hatali sonuclar uretiyorsa boyle islemcilere ASM ile kod yazmak cok daha fazla efor iseter.

Bu tip cipher genellikle revizyondan gecirilir ve sorunlari kaldirilir.

CM0 ile hic calismadim. Fakat TI DSP lerle calisirken pipeline conflict olaylari mevcuttu.

Yasanan sorunlar kisaca su sekilde oluyor.

Pespese isletilecek komutlarda ilki ornegin A=B+C islemini, ikinci komut ise D=A+X islemini yapacak olsun. (Burada sozu edilen islemler register/memory uzerinde olabilir)

Eger 2. komut execute asamasina geldiginde henuz ilk komutun sonucu A alanina yazilamiyorsa bu durumda 2 komut hatali islem yapar.

Bu durumda yazilimcinin yapabilecegi tek sey bu iki komut arasina duruma gore bir yada daha fazla NOP komutu  koymak olacaktir.

Yada bu iki komut arasina daha alt satirlarda isletilecek komutlardan birisini (benzer tehlike olusturmamali) tasimak olacaktir.

ornegin

A=B+C
D=A+X
Y=Y+1

gibi komut dizilisinde ilk iki komut pipeline da hatali sonuca neden oluyorsa

A=B+C
NOP
D=A+X
Y=Y+1

yada daha iyisi

A=B+C
Y=Y+1
D=A+X

Bu tip hatali durumlarla karsilasildikca uretici erreta listesinden durumu duyurur ve cozum onerisini de getirirdi. Kisa bir sure icinde de C ve ASM derleyiciler revize edilirdi.

Dokumanlarda bu tip konularin ele alindigi satirlarda C kullaniyorsaniz sorun yok fakat "pure asm" kodlama yapiyorsaniz su su durumlara dikkat edin uyarilari yer alirdi.

Isin guzel yani asm yazarin bu tip durumlari surekli olarak hatirlamasi zor oldugundan asm programimizin basina  bir satir (direktif) ekler, derleyici bu satiri gordugunde, eger yazdigimiz kodlarda pipeline da sorun olusturacak komut dizilisi ile karsilasirsa o satirlara otomatik NOP ekler ve uyari  verirdi.

CM3 de bu tip sorunlardan hic bahsedilmedigi icin ASM yazimda bunlara kafa yormak gerekmiyor. Eger cok sayida bu tip durumlar olsaydi asla bu ciple calismak istemezdim.

Asagidaki iki dokumani sizin icin arastirip buldum.

http://courses.cs.washington.edu/courses/cse378/09au/lectures/cse378au09-15.pdf (http://courses.cs.washington.edu/courses/cse378/09au/lectures/cse378au09-15.pdf)

http://coitweb.uncc.edu/~abw/ITCS3182F09/slides11.pdf (http://coitweb.uncc.edu/~abw/ITCS3182F09/slides11.pdf)

Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 03 Kasım 2013, 14:25:08
Kendimce ulastigim sonuc asagidadir.

Farkli frekans, farkli mimari, hatta farkli bit uzunluklarindaki islemciler icin Bulent adini verecegimiz bir test programi yazalim.

Bu testin amaci ramdaki 16 bitlik iki sayiyi toplamak ve geri yerine yazmaktan ibaret olsun.


1. islemci 8 bit 28 Mhz, rama erisim 2 cycle ve toplama tek cycle olsun.

ROKU   A, ADR1L
ROKU   B, ADR2L
TOPLA  C, A, B
RYAZ    C, ADR3L

ROKU   A, ADR1H
ROKU   B, ADR2H
TOPCA  C, A, B
RYAZ    C, ADR3H

en optimzie kod olsun.

2. islemci ise 16 bit islem yapma kaabiliyetinde tum komutlar tek cycle ve islemci frekansi 4 Mhz olsun.

ROKU   A,ADR1
ROKU   B,ADR2
TOPLA  C, A, B
RYAZ   C,ADR3

Bu iki islemcinin Bulent adini verdigimiz test sonucu BMIPS/Mhz ile belirlensin.

1. islemci sonuca 14 cycle da ulasirken
2. islemci sonuca 4 cycle da ulasir.

BMIPS saniyede 1 milyon tane 16 bit toplama anlamina gelecektir.


1. islemci 8 komutla bu isi yaparken 2. islemci bu isi 4 komutla yapmaktadir.

1. islemci (1/14) * 28E6 dan saniyede 2 milyon Btesti yapar. Yani 2BMIPS/1E6 dan 2 gibi bir performans sergiler.

2. islemci (1/4)*4E6 dan saniyede 1 milyon B testi yapar. Yani 1 BMIPS/1E6 dan 1 performansinielde eder.

O halde  B testinde  1. islemcimiz 2. islemciden daha basarildir. (Neden 1Mhz'e boldum?)

Bir tablonun tepesine Bulent testi basligini yazar, islemcileri  alt alta yazar karsilarina da MIPS/MHz (Bmips/MHz) degerini yazarsak degeri yuksek olanlar bu testte daha basarilidir sonucuna ulasiriz. Bazi islemcilerde bu deger 1 den buyuk bazilarinda 1 den kucuk olacaktir.

Performansi 1 den buyuk olanlar bu testte basarili olanlardir. Fakat bu sadece bu test icin gecerlidir ve bir baska program parcaciginda dengeler degisiverir.

MIPS/MHz degerine bakip da bu islemci paralel islemler yapabiliyor buna ASM ile kod yazarsan bu paralellik durumlarini kafanda canlandiramaz C den daha az performansli kod yazarsin sonucuna ulasamayiz.

Kaldiki C,  hafizasinda sakli hazir ASM sablonlar kullanir. Bilgisayar sadece burada kullanilacak registerlerin ne olacagina karar verebilir.

Yoksa hic bir bilgisayar yazilimi + isaretini gorunce haa yuzlerce ASM komutundan ADD komutu bu ise yarar zekasina sahip degildir. Sonucta el oglunun yazdigi ASM sablonlari kullaniyor.

Buradaki BMIPS/MHz degerini kullanarak reklam yapabilirim.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 03 Kasım 2013, 14:57:43
Hocam ortalamayi 1 den yukari cikartmaktan bahsediyorsak ornek ornek diye yalvariyorum.

Daha ne diyeyim?

Farkli mimarilerle isimiz yok. Cortex M3 de  paralel islemler yaptirin yeterli.

Neden CM3 icin paralel calismaya yonelik internette tek bir asm ornegi goremiyorum? Neden kitaplarda bu konuya deginilmiyor.?

Tek aciklamasi var yok boyle bir sey. Olay tamamen bir ust mesajda kurguladigim gibi. Reklam reklam reklam.

Dikkat edersen kurgum cok cok farkli islemciler icin iyi/kotu karari vermeye yarayabilir. Fakat aldatici bir sonuc.

Cok sik kullanilan islemlerle bu testin daha karmasigi yapilabilir ve ortaya daha az aldatici sonuclar cikabilir.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 03 Kasım 2013, 15:12:21
Alıntı yapılan: gerbay - 03 Kasım 2013, 14:49:14
Adam aynı clock saykıl da hem code hem de data fetch edebildiğini yazmış. Tekrar bekleyecekse niye aynı clock da fetch etsin ki.

Ayni cycle'da koda ve dataya ulasabilmek ne avantaj saglar? Bu hangi asamada yapiliyor cok onemli.

Pipelineda kuyruga giren komutlarin siralamasina bakarsak 1. komutun execute asamasinda 3. komut prefetch asamasinda oluyor.

Bunun anlamlarindan birisi 1. komut rama ulasirken 3.komut ayni zaman diliminde komuta (Flasha/PFUya) ulasiyor. Bunda garipsenecek bir durum yok.

Bu tur paralel (komut bazinda değil mikro komut bazinda) islemler stall durumlari olusturmadan kodlarin akisina izin veriyor.

Fakat stall durumundan her zaman kacilamiyor. (Neyseki bu durumlari donanim kendi hallediyor aksi halde asmcinin isi  cok zordu)

http://www.arm.com/files/pdf/CortexM3_Uni_Intro.pdf (http://www.arm.com/files/pdf/CortexM3_Uni_Intro.pdf)

Sayfa 28....31

Bahsettigin ayni anda hem kod alanina hem de ram alanina erisilemezse zaten bu islemci 1 yada  2 cycle da bu islerin altindan kalkamaz ki.

Alıntı Yaphttp://www-micrel.deis.unibo.it/LABARCH/slidecorso2013/04-Buses.pdf

Hocam  bak, adam paralel load/Store yapabileceğini ifade etmiş

Verdigim dokumanda zaten bu durum var. 2 cycle suren komut, bahsettigin erisim sayesinde 2 cycle da yapiliyor. Eger yapamazsaydi bu komutlar 2cycle değil  3 falan olacakti.

Hic bir sekilde kodlar ust uste binip te performansi artirmiyor.

Ama sunu duymak istiyorsan soyleyeyim.

Paralel komutlar yurutulen islemcilere asm yazmak tam bir iskence olur. Ama yazamam demiyorum. Cunku elin oglu bunlara C derleyicisi yazdiysa demekki asm kodlar da yazmis demektir. Onlar asm yaziyorsa ben yada bir baskasi da yazabilir.

Ama ugrasmakdan keyif alirmiyim bilmiyorum.
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: cicjoe - 03 Kasım 2013, 23:18:05
Aciklamalar icin tesekkurler hocam..

http://s3.dosya.tc/server12/nJXROw/ARMProcessorArchitecture.ppt.html (http://s3.dosya.tc/server12/nJXROw/ARMProcessorArchitecture.ppt.html)
access.ee.ntu.edu.tw'den indirdim

Bu dokumani biraz inceledigimde soyle bir yargiya vardim. Bahsettiginiz gibi
A=B+C
D=A+X
Y=Y+1
seklinde yazdigimiz zaman, donanimsal olarak Forwarding yapiyor, hazard olusturacak komutun execution bolumunu erteliyor diye anladim.
O zaman ben pipeline yokmuscasina, yani daha sonra kodu duzelttiginiz haline cevirmek icin ugrasmasam, hatali sonuc almadan, sadece zaman kaybetmis olurum gibi geldi. Eger oyleyse, korkmadan asm ile de kod yazabilirim.. Cunku gozden kacirip hata yapmak cok onemli ve basit iken, sadece birkac cycle kaybetmek ayni derece onemli degil benim icin.. Yeterki sonuc dogru ciksin..
Başlık: Ynt: Bilmece Bulmaca ASM ile yapabilmece ama C ile yapamaca
Gönderen: z - 05 Kasım 2013, 10:31:21
http://www.lighterra.com/papers/modernmicroprocessors/ (http://www.lighterra.com/papers/modernmicroprocessors/)

Dokumanin Multiple Issue – Superscalar bolumune gozatin.

Bu bolumun sonundaki  paragrafta adi gecen islemciler....

The widths of current processors range from single-issue (ARM11, UltraSPARC-T1) through 2-issue (UltraSPARC-T2/T3, Cortex-A8 & A9, Atom, Bobcat) to 3-issue (Pentium-Pro/II/III/M, Athlon, Pentium-4, Athlon 64/Phenom, Cortex-A15) or 4-issue (UltraSPARC-III/IV, PowerPC G4e, Core 2, Core i, Core i*2, Bulldozer) or 5-issue (PowerPC G5), or even 6-issue (Itanium, but it's a VLIW – see below). The exact number and type of functional units in each processor depends on its target market. Some processors have more floating-point execution resources (IBM's POWER line), others are more integer-biased (Pentium-Pro/II/III/M), some devote much of their resources towards SIMD vector instructions (PowerPC G4e), while most try to take the "balanced" middle ground.