Neden ASM ile yazılan kodlar güncel mimarilerde daha yavaş çalışır...

Başlatan gerbay, 07 Eylül 2016, 00:33:32

tekosis

yazılanların %9x lik kısmını anlamıyorum ama olsun elinize sağlık. verdiğiniz bilgiler bu yolda ilerlemek isteyenler için çok önemli.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

z

Yok hocam ben basit işlerin adamıyım boyumu aşan işlere girmem. Eğer beni anlamak istiyorsan sana önerim profesyonel iş hayatındaki yazılımlardan biraz uzaklaş ve
aşağıdakine benzer, hız gerektiren, bir takım şeylere senkronlamalar isteyen basit bir projeyi hoby olarak C diliyle evde yapmayı dene.

Neden asm diye tutturduğumu, neden bilgisayar mühendisleri ile elektronikçileri farklı kafalarda olduklarını için ayrıştırdığımı daha iyi anlayacaksın.

Bu projeyi Atmel, PIC vs 8 bit mikrolarla değil de  ARM CM3 ile yapmayı dene. Dene ki, Pipeline mekanizması ve bus switch işleri karmaşıklaştırsın. Veri yolu, CPU ve DMA kullanılırken paylaşılmak zorunda kalsın senin senkronlamalar da biraz sarpa sarsın.

! No longer available

Bak bu da bir yazılım işi. C ile bir yaz sonra beni daha iyi anlayacaksın.

Yok video frekansında C sorun çıkartır dersen bunu dene. Ama CM3 ile olsun.

https://www.youtube.com/watch?v=C2e8UYhcia8


mesaj birleştirme:: 11 Eylül 2016, 21:58:56

Alıntı yapılan: gerbay - 11 Eylül 2016, 21:35:28
hocam gerçek bir projede kim bu şeklde bir iş yapıyor?

Tamam işte  C ile daha iyisini yap.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Her iki proje de CM7 ile daha kolay yapılır. ASM ile yapılacaksa tek cycleda birden fazla komut vs işleteceksek ilave komutlar üzerine birazcık pratik yapmak gerekecek.

Neden CM3 de neden Atmel değil?  (Parallax başka bir şey o ayrı bir sınıf tam bu işlerin adamı)

Atmelde xtal clk ile (yada timer sayımı ile) porttan çıkan sinyaller her zaman uyumlu. CM3 de aynı uyumdan bahsedemiyoruz. Pipeline giren komutlara göre, DMA/CPU bus kullanma oranına göre portlardan üreteceğimiz sinyallerin referans bir sinyale göre zamanlaması kayıyor (Mesela timerlara göre). Sen C++ vs kulanırken bunlara kafa yormak zorunda kalıyormusun? Hiç sanmıyorum. Bunlar tamamen elektronik sorunlar. Ama bu sorunlar etkisini, ekranda  uçuşan noktalar yada titreyen harfler olarak gösteriyor.

Ayrıca neden mi Atmel değil?   C güçlüdür işlemci ayırt etmez. Optimizasyon çentiklerini tıkla ve başla kodlamaya.

İstersen CM3 le değil de CM7 ile yap farketmez.  En süper C derleyicisini de kullanabilirsin. CM7 ile video çalışması yap mesela.

Eğer bu projeyi yaparsan herşeyin C yada C++ olmadığına belki ikna olursun.

Bir çipi bir başka çiple emüle etmenin nesi kötü. Sapına kadar elektronik + yazılım işi.

Keza işlemcisi tarih olmuş ve arızalanmış bir cihazın source kodu yoksa fakat firmware çipleri varsa bu cihazdaki işlemciyi emüle eden tüm bus timingleri bire bir uyumlu bir CM3 projesi de yapılabilir. İşte bu işlere girersen belki beni anlarsın.

Bu arada yazılarımla asm empoze ediyormuyum? Gerbay öyle iddia ediyor.

Dikkat edersen bu projelerde os yada derleyici yapmıyoruz. Hepsi zamanlaması kritik elektronik tipi işler. Bu işlerde asm bana göre çok çok avantajlı. Öyle böyle değil çok avantajlı.

Haa 2..3 katı hızda işlemci kullanıp C ile de yapabilirsin.

-----------

Bu gibi örneklerden dolayı herkesin karşılaştığı problemler farklı ben bu problemlerin çözümü için asm tercih ediyorum. Bu tip projelerin de dışına pek çıkmıyorum.

Kısaca motor döndürme projeleri diyorsun. (Elektronik ağırlıklı proje)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Yuunus

Gerbay hocam bence tam tersi bir durum soz konusu Sırf: ASM kullanıcılarını C'ye alıştırma turları yada BASIC kullanıcılarını C'ye alıştırma turları diye baslıklar var. Hatta bir ara Z hocaya keske Arm-asm konusunda bir baslik yapsa demistim ama yapmadi, bence konuyu kirici bir noktaya getirmeyin zira ikinizde degerli insanlarsiniz. Z hoca Asm ye gonul vermis hicbir seyin bunu degistirecegini sanmiyorum, ayrica birisi onerdi diye de kimse bir dili kullanmiyor. 98 li yillarda asm olmazsa olmaz olarak gorulurken simdi kimse asm nin adini bile anmiyor...Z hoca; birakin onermeyi ustune para verse adam oturup Asm de kod yazmaz gonulluler baska, nereye baksam hep goruyorum aurdino uno, adamlar bunun icin birkac sensor de hazirlamislar kutuphaneler de hazir yaz diyorsun yaziyor oku diyorsun okuyor; Gerbay hocam bence zaten gelisim sizin istediginiz dogrultuda ilerliyor, ama sunuda belirteyim 10 senedir C ile  kod yazdigini iddia eden adam pinden neden sinyali yavas okuyorum diye acip read fonksiyonunun arkada ne halt yedigine bakmaya dahi tenezzul etmiyor. Zaten yaptigi isten para kazanacak seviyeye gelen adam da neyi kullanacagina kendisi karar verebilir. Buradan da C kotudur anlami cikmasin, ama ne C ne Asm nede .Net yuzeysel gecistirildikten sonra hepsi ayni kapiya cikar sadece asm sizi daha cok zorlar.

muhittin_kaplan

Z nin  asm konusunda yonlendirici oldugunu dusunmuyorum. Hatta yukarda bahsedilen basic den c ye gecislerin olmasi icin bile cabasi yadsinamaz. Ayni sey pic den arm a gecis icinde soylenebilir. Ve eminim ki bunlari yazmamiza da ihtiyaci yoktur.
Keske birileride c bilenlere c++ turlari dese

z

Hocam elbetteki örneklerini verdiğim tipteki zamanlaması kritik projeleri FPGA ya da CPLD ile doğrudan hard olarak çözmek en makbulü.

Fakat işlemciler çok çok ucuz hem yakında bizim sıradan mcular bile superscale mimari ile üretilecekmiş.
Zamanda kritik işlerin üstesinden çok daha kolay gelebileceğiz.

İlerleyen teknoloji sayesinde kitleler tembelliğe yöneliyor fakat buna rağmen tembel insanların işleri daha çabuk ve daha düzgün yapması sağlanıyor.
Fakat bunun için birileri inanılmaz çalışıyor inanılmaz detaylarla uğraşıyor. Sonuçta asıl ilerleyenler teknolojiyi kullananlar değil üretenler oluyor.

Bana göre çok çok anlamsız önerilerden bazıları:

ASM ile derinlere dalma asıl işine odaklan C kullan.
Lojik devre tasarlayacağım diye saçını başını yolma VHDL kullan tüm herşey zaten hazır sen sadece birleştir amaca yönel.
Integralle falan uğraşma Matlab var.
Resim işleme rutinlerini adamlardan daha mi iyi yazacaksın al kütüphaneyi kullan.
Bu zamanda sıfırdan motor niye üretesin bak xx firması ucuz motor üretiyor şu şu firmalar motoru doğrudan satın alıp araba üretiyor.

Kardeşim ben damar işleri seviyorum. İncik boncuk benim hoşuma gidiyor. Zaman benim, kafası yorulan benim sana ne?

OS yazalım demiyorsun ama ASM artık sadece os yazarken yada kritik işlerin sadece çok küçük bir yüzdesinde kullanılıyor diyorsun. Ben de işte baştan aşağı zamanlaması kritik işler için kod yazıyorum. Örnekler veriyorum fakat örneklerimi beğenmiyorsun.  İlla bu örnekleri referans alman şart değil. Zamanlaması kritik işler işte.

Dikkat edersen öyle bir asm antipatin var ki problemlere yaklaşımda hız açısından yavaştan hızlıya doğru sıralanan C, asm, lojik üçlüsünde asm hiç yokmuş gibi davranılıp C'den derhal VHDL, CPLD gibi lojik çözümlerine atlıyorsun. ASM çözümü kasaplık olarak niteliyorsun.

Siz bir an önce C, C++ derleyicilerle güzel işler yapmaya bakın.  ASMyi bırakın edebiyatlarıyla uğraşmayın, dünyaya ürün satmaya bakın. C derleyici icad edileli çook zaman oldu ama hala Türkiye'den tık yok.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Son olarak kısmen Gerbay'ı desteklemek adına şunları ekleyip bu başlıktan çıkacağım.

İşlemciler güçlendikçe ASM yazım kolaylaşır.

Örneğin çok alt seviyedeki bir işlemcide işaretsiz sayılarla ilgilenirken A>B mi diye bakmak istersek  bir komutla A-B işlemini yapar ardından Cary flağına bakarız.  Daha sonra da Carynin set olup olmama bu durumuna göre bir başka adrese jump ederiz. Sadece A>B testi 3 asm kodunu peşpeşe yazmayı gerektirir.

Biraz daha iyi işlemcide CMP A,B komutu ardından  JGT/BGT (Branch/Jump Greater Than) şartlı dallanma komutu ile bir adrese zıplarız. Şimdi ise 2 asm komutu yeterli olmakta.

Daha daha gelişmiş bir işlemcide ise CMP A,B komutu ardından doğrudan yapmak istediğimiz işlemi şarta bağlı olarak yerine getiren bir komuttan seçeriz. Bu durumda ise sadece 1 asm komutu yeterli olmakta.

Örneğin if (A>B) A=0; gibi bir C komutunu  R0,R1 registerleri ile yaparken

CMP     R0,R1
MOVGT R0,#0

Dememiz yeterli olur. Gördüğünüz gibi işlemci yetenekleştikçe asm yazım gitgide kolaylaşıyor. Hele hele işlemcilerin artan bit uzunluklarından dolayı ilkel işlemcilerde upuzun kod satırlarıyla yapılan matematik işlemler şimdilerde tek bir komutla bitiyor.

Fakat optimize kod yazma işin içine girince işler biraz çetrefilleşiyor.

Zira şu anda yazdığımız komut, biraz sonra yazacağımız bir kaç komutun ne kadar zamanda işletileceği üzerinde belirleyici oluyor.
Hatta sistemi iyice yavaşlatacak "Pipeline buffer"a girmiş komutların iptaline neden olacak durumlardan da sakınmak gerekiyor.

Yani kafanda 40 tilki dolaştıracaksın ve 40nın kuyruğu birbirine dokunmayacak durumları oluyor.

Eğer satranç oyununda sadece o anki hamleyi düşünürseniz yenilirsiniz. Fakat usta oyuncular gibi bir kaç hamle ilerisini düşünürseniz kazanabilirsiniz.

Evet mimariler geliştikçe asm yazım kolaylaşırken optimize kod yazmak zorlaşıyor.

Fakat bu durumdan dolayı pes etmiyoruz. Eğer bu işi gerçekten seviyorsak o işlemci üzerine uzmanlaşmaya çalışıyoruz.

Raspberry gibi kartların tartışıldığı forum sitelerinde işlemciye asm kod yazma ile ilgili ana bölümler açıldığını ve bu başlıkların altında açılmış konulara  ilgi olduğunu görebiliyoruz.

Demekki asm yazım işleri gelecekte de daha devam edecek. En azından birileri ilgilenmeye devam edecek.

Ancak ne bugün ne de gelecekte kritik zamanlı işlemler yoksa ticari projelere asm ile yazmak üzere girişecek deli çıkacağını düşünmüyorum.

Ticaretle uğraşmadığım için çok karmaşık zahmetli kodları hobby olarak yazarım. Haa yaptığım hobby çalışmaları müşteri bulursa da satarım. (Umarım aradaki farkı görebilirsiniz)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

DEno_12


z

Ortak proje yapmadım fakat kullanmaları için kapalı kütüphaneler yazdım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

tunayk


mufitsozen

Alıntı yapılan: gerbay - 16 Eylül 2016, 17:06:46
şu da eski bir sınav sorusu;

koddaki hatayı bulup düzeltiniz;

(Resim gizlendi görmek için tıklayın.)

Hocam ben bunun cevabini biliyorum, kopya cekebilirmiyim?



Yanliz benim evde PDP-8 var, ben cevabi orda yapsam olurmu?



Hey gidi gunler hey, ODTUde IBM-29 Punch kard makinalari ile IBM 360/40 bilgisayari icin FORTRAN IV dersinde ilk odevimi 1974 yili subat ayinda vermistim, (4 saat sonrada gelip, ciktisini almistim :) )

PDP-8 Elektrik/Elektronik bolumunde vardi,onunla da 1976 senesinde Computer organization dersinde hasir nesir olmustum. 1977 yilinda da Digital Control Systems dersini almak yerine proje alip  IBM 370/145 OS/VS2 isletim sisteminde PL/I ile PDP-8, Motorola 6502(8 bit) , TI TMS9900(16-bit) vede Intel 8088(16-Bit) icin cross-assembler, linker ve locator yazmistim, hey gidi gunler hey.

Cok yasa @gerbay, eski, guzel gunleri hatirladim netekim :)
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

MC_Skywalker

PDP-8 program kartı :) staj yaptığım yerdeki makinalarda vardı. Yanlız bizim makinalarda ki şerit siyahtı

z

@mufitsozen

Hocam sen üniversitede delikli kartlarla haşır neşir olmuşsun biz bu kartlarla daha ilk okuldayken oynardık.

Çocukluğumuzda mukavva kutuları taşımak için bir aparat olurdu.  Bu aparat bir kartonun rulo şeklinde sarılması ile oluşturulan boru ve borunun içinden geçen telin borudan taşan iki ucunun kanca gibi bükülmesiyle oluşturulurdu.

Ağır mukavva kutular iple bağlandıktan sonra bu bahsettiğim aparatın kancaları kutunun iplerine geçirilir ve karton boru avuç içi ile tutulurdu. Böylece ipler elinizi kesmez kutu da rahatça taşınırdı.

Bu aparatı söküp karton boruyu açtığımızda üstünde bir sürü dörtken delikleri olan küçük kartonlardan 4..5 tane çıkardı. Üzerinde rakamlar vs yazardı.

O zamanlar bu kartonların üstündeki deliklerin sırrını çok merak ederdim fakat kime sorsam bilmezdi.

Hatırlayan varmı bu koli tutacağını?

Googleda aradım bulamadım ben de çizdim. Hemen hemen aşağıdaki gibiydi.



Belkide müfitsözen hocamın fortran ödevleri bize oyuncak olmuştu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mufitsozen

Punch Card ile yazdigimiz (deldigimiz) kaynak programlar, object programlar, JCL kartlari, Datalar mukavva kutularda tasinirdi.

Resimde Configuration management altindaki kutuphane ve programlar ve datalar goruluyor.




mesaj birleştirme:: 16 Eylül 2016, 18:38:40

1980 subatinda Amerikadan izinli geldigim sirada kardesime (o zamanlar zannederim lise 1de idi) NYda gorup, begenip aldigim Casip'nun Basic ile calisan bir handheld computer almistim. 15 gun tatilde basic ile programlamasini ogretmistim. Oda ondan sonra ODTU elektrik/elektronik filan Bilgisayarci oldu netekim. Adamin da hayatini kararttim maalesef  ;D

Yanlis hatirlamiyorsam basic ile programli alet suydu:



mesaj birleştirme:: 16 Eylül 2016, 18:49:20

yada bu resimdeki pocket computermiydi acaba?



mesaj birleştirme:: 16 Eylül 2016, 18:50:49

ikiside ayni aletmis, yas ilerleyince boyle madara olursun netekim, iki resim baska cihazlar icin diye dusunmustum. Madara olduk iyimi  ;D :P

mesaj birleştirme:: 16 Eylül 2016, 18:58:28

Alıntı yapılan: gerbay - 16 Eylül 2016, 18:22:41
aslında adamlar (ya da kadınlar) taa o zamandan lisans olayını çözmüşler. Orta büyüklükte bir yazılımın şöyle olduğunu düşünürsek;

(Resim gizlendi görmek için tıklayın.)

şimdi bunu cracklemek ne kadar zaman alır de mi..

bir de bu yazılımı kopyalayıp kaçak kullanayım desen...

düşüncesi bile korkunç..



sevgili@gerbay seni uzmek istemem ama o zamanlar bircok program source ile beraber gelirdi ve IBM bedava verirdi.

Yani 384K RAM ve 2x 5MB diskli IBM 370/145 (turkiyenin en buyuk bilgisayari idi 1977 senesinde) 2 milyon dolar filandi (o zamanlar 1500 dolara orta halli simdiki Honda Accord gibi bir aile arabasi alinirdi) bugunun parasi ile 5-6 milyon usd oluyor. yazilimda bedava olurdu. gecmis zaman olurki...!
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

MC_Skywalker

@z hocam o tutacağı hatırlarım. Sirkeci, Eminönü mağazalarındaki alışverilerde paketlerin ipine takılmakta idi.