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

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

engerex

@RaMu

Alıntı yapılan: gerbay - 09 Eylül 2016, 00:52:27
...........
haa söylemeyi unuttum, adamlar benim copy/paste mühendislik hatası dediğim hatayı yapmışlar... eski cihazların kodundan kopyaladıkları kısımlar patlatmış aleti.. bu da hepimize ders olsun.. kopya yok!

RaMu

Dahada önceki mesajımda,
gördüğüm tezatları dahi yazmadım dedim,
şimdi bu tezat değilde ne,
hatanın kodun yazıldığı dil ile bir alakası yok,
zaten kopyaya daha müsait olan C dir,
bunları söylemeyeyim ortalık boş yere karışmasın diyordum.
Sidik yarıştırmanın alemi yok,
şu, şu işe yarar, buda örneği, ben kullanıyorum, şu kullanıyor, şöyle isteniyor bu oluyor... diyebiliyorsanız yazın öğrenelim.
Bizim işte CE belgesi isteniyor, EMI/EMC testi yapılıyor, bizde yazılım donanım olarak bunlardan geçebiliyoruz,
ASM mi yazdınız diye sormuyorlar,
nerede ne işimize yarayacak, bize ne katacak, size ne kattı onu soruyorum.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yamak

Asm nin C ye karsi ustunlugunu savunan arkadaslari anlamiyorum gercekten. Hic mi ihale usulu bi proje yapmadiniz. Hic mi zaman probleminiz yoktu.  Tum library leri falan ASM de yazacak kadar zamaniniz oluyor mu?

Ethernet, Usb ya da bilimum IOT protokollerini ASM ile nasil implement ediyosunuz.

Yani ASM ogrenmeye karai degilim ama ASM ile proje gelistirmek amelelik gibi geliyor.(Eger hobi amacli bi proje degilse).
ASM ile proje gelistirmek bi cok nimettem mahrum kalmak demektir(Rtos, iot stackleri, gui libraryleri ...)

RaMu

Alıntı yapılan: gerbay - 10 Eylül 2016, 22:27:03
evet hocam bir sen okumuşsun sen de yanlış okumuşsun..

"
The software was written in assembly language that might require more attention for testing and good design. However the choice of language by itself is not listed as a primary cause in the report. The machine also used its own operating system.
"
hocam bak görüyorsun assembly ile yazıldığını. Tamam vatandaş seçilen dilin hatada birincil sebep olmadığını söylüyor ama ilk cümlede tam sana söylediği bir tavsiye var..

ASM dilinde "software" yazmak çok dikkatli dizaynı ve çok dikkatli test etmeyi gerektirir diyor.


Hocam çeviriniz hatalı demek istemediğim için yazmadım,
Kod ASM dili ile yazılmış ki (bu dilde yazılmış olan kod)  test ve iyi bir dizayn için dahada dikkat gerektirebilir.
that might require more
kısmını
that requires more
şeklinde yazsaydı, dediğinizi söylemek istemiş olabilirdi,
hatta deseydi bile,
ben demiyorum dadaloğlu derki.. gibi yani bana inanmıyorsunuz, şunu yazanlara inanın, diyormuşsunuz gibi oluyor.

Neyse bunlar dert değil,
zaten aynı şeyleri söylüyoruz,
kimse demese dahi
asm de yazmak C deki gibi sadece işe odaklanmanın yanı sıra
birde misal en basit a>b mi diye sormak için dahi kullanılacak komutu doğru anlayıp kullanmayı gerektirdiğinden
sırf bu nedenle bile, elbette hatalı program yazmaya daha müsait.

Benim anlatmaya çalıştığım,
ASM nin kullanım alanları ve avantajları,
belki olmazsa olmaz olduğu noktalar,
kullanmayacak olsan dahi ASM öğrenmenin faydaları.
Yani C yi çok çok iyi bilen ve kullanan birine ASM öğrenmesinin katkılarını vurguluyorum.
Hatta zararlarındanda açıkca bahsediyorum.
Benide yanlış anlıyorlar bir şey demiyorum,
işinizi ASM ile yapmayacak, ASM ile 1 satır kod yazmayacak olsanız dahi ASM öğrenmelisiniz diyorum,
sorun bana sağladığı faydalarından bahsedeyim.

Sizdende C ve bahsettiğiniz standartları, RTOS ile yazmayı vs. öğrenmenin
bana ne kazandıracağını
bunları Türkiyede kullanıp kullanamayacağımı,
switch(text) al sana .hex,
bana içinde ne ile yazılmış kodlar var sorulmayacak
C ile yazdım D ile yazdım çalışıyor,
yapıyorum satıyorum alıyorlar
diyemi düşünsem daha iyi olacağını,
tecrübe ettiklerinizle anlatıp
beni veya herkesi aydınlatmanızı istiyorum.

10 sene kadar önce Armerkom u gezdiğimizde
başımızda yönetici kademesindeki kişi değişiyor,
yeni gelen kişi 3 senedir emek verdiğimiz projeyi rafa kaldırıyor,
bu kadar emek kenara itiliyor, diyenleri hatırlıyorum,
sizde işi yaparken sırf bunu bunu istiyorlar diyemi öğrenip o standartları uygulamak zorunda kalıyorsunuz
bunun şüphesini duymuyorda değilim.

Türkiyede uygulanan öyle standartlar varki,
bu arada a dan z ye asansör üretiyoruz,
asansör kabin kapısı yanmaz testi var, testten geçmiş malzeme olmak zorunda,
diğer tarafta asansörün içi sunta dekorasyon dolu ve bu hiç problem değil,
her kattaki kapı plastik türevi ve buda hiç problem değil,
standart dediğinizde standartın geçerliliği söz konusu.

ASM ile hatasız yapabildiğim dediğim,
işin geneli için, yani daha sonra bahsettiğim donanımsal önlemlerle beraber,
şu ana kadar kimseye zarar vermeden işimizi yapmış bulunuyoruz,
diğer tarafta adam öldürmüş olanlarda var,
yazılım kısmında aslında Therac-25 de belirtilen, hataya sebebiyet verebilir denen kısımlardan birine benzer olarak
aşırı derecede özgüven var, yazarım ve hatasız çalışır diyorum, çalıştırıyorum,
Yani bir şeyi kullanacaksam en iyi derecede öğrenmeden kullanamıyorum,
vicdanıma sığmıyor, standartlar vs. olmasada herkesin standardı kendi vicdanıdır.


Sorduklarımın cevabı eğer
yazmakla anlatılacak şeyler değil uzun iş vakit yok diyorsan hocam,
bir gün denkleştirir gelirim yanına,
anlatırsan bana bende güzel bir döküman haline getiririm yayınlarız.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

@RaMu

Alıntı Yapbirde misal en basit a>b mi diye sormak için dahi kullanılacak komutu doğru anlayıp kullanmayı gerektirdiğinden
sırf bu nedenle bile, elbette hatalı program yazmaya daha müsait.

Kod yaza yaza artık a>b için hangi asm komutları kullansak diye düşünmüyoruz ki. Daha beyin devreye girmeden parmaklar bunu yazıyor zaten. Fakat tabiki bazen hata yapıyoruz. Konuşurken baba demek istediğimizde şimdi b harfini seslendireceğim sonra a sonra b sonra a söyleyeceğim diye düşünüyormuyuz düşünmüyoruz. Kod yaza yaza kendimiz CPU gibi oluyoruz. O CPUnun diline aşina oluyoruz.

Hani C çok güzel kod üretiyor falan deniyor ya. Alakası yok. İş gören ve kısa kodlar üretiyor bunda hemfikirim. Fakat C ile yazılmış ve optimize ayarları yapılmış 10..20 satırlık bir C kodunun asm çıktısını al kesinlikle üzerinde elle optimize yapılarak daha etkin hale getirilebiliyor. Kalıbımı basarım. Hadi len diyenin alnını karışlarım.

C ile yazılan büyük projelerde kimse bunları dert etmiyor etmesine de gerek yok. 20 satır kod arasında bir iki fazla kodun kime zararı olur.

Fakat çok kısa kod parçalarında özellikle de hızlı çalışmasını arzuladığım kod parçalarında C'nin ürettiği bu kötü pis kokan kodlar beni çok rahatsız ediyor. Olay bu.

Millet zamana, hatasız kod yazmaya odaklanmış. Bizlerin öyle sıkıntıları yokki. Biz bulmaca çözüyoruz.

Başlıktaki "Neden ASM ile yazılan kodlar güncel mimarilerde daha yavaş çalışır" ibaresi haklı olarak da bizleri uyuz ediyor.

Yok abi olurmu? Güzel ASM kodlama, peşpeşe yazılacak iki makine komutunun ahengini yakalama üzerine kurulur. ASM kodlama zaten sürekli efektif algoritma yazmak demektir.

Mesajlarımızda pipeline conflict durumlarından bahsettik bunlarla karşılaşmamaya dikkat eyttiğimizi söyledik. 9 satırlık kodu 8 satıra indirip daha hızlı çalışmasını sağladık. Demekki işlemci ile iyi anlaşma yoluna gidiyoruz.

Ama olay dönüp dolaşıp asm ile yazılan kodda hata yapma riski fazladır, kodlar anlaşılmazdır, hata ayıklamak zordur gibi bilindik durumlara geliniyor ve bunlar ısıtılıp ısıtılıp önümüze sürülüyor.

Gülü seven dikenine katlanacak tabiki.

Biz asmnin dikeni yok demiyoruz ki. Dedik mi?

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

Senin yerinde olsam asansör projesinde asla asm kullanmazdım.

C asmden çok daha kolaydır.  Sen asm kodlamayı zevk için yap. Koduğumun kodlarını C ile yaz.

ASM'yi ana işlemciye yardımcı işlemcilerde kullanabilirsin. Glue lojik işlerinde asm kodlama çok yakışır.

Masela ana işlemciye bağlı ve görevi sadece motorun hızını denetlemek olan ikinci bir işlemci için asm güzel bir seçimdir. Fakat istiyorsan onu da C ile yaz. Milletin gönlü razı olsun.
Ya da yardımcı için hiç işlemci kullanma bırak lojik devre yapsın işi.

mesaj birleştirme:: 11 Eylül 2016, 12:23:37

Bu arada böyle demiştim.

Alıntı yapılan: z - 11 Eylül 2016, 11:25:07
C ile yazılan büyük projelerde kimse bunları dert etmiyor etmesine de gerek yok. 20 satır kod arasında bir iki fazla kodun kime zararı olur.

Sanmayın ki asm kodlamada sürekli kısa kod ya da sürekli hız peşinde koşuyor hep optimize kodlar yazıyoruz.

Projenin durumuna göre komuşum koduna diyip paldır küldür asm kod yazmıyor da değiliz. Tabiki böyle yazdığımız kodlar C ile üretilmiş kodların yanında çok daha kötü görünebilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

berat23

@z

hocam bir örnek verebilir misiniz bu kısa ve hızlı çalışması gereken kodlara?

z

Servo loop süresini ne kadar düşürürsen o kadar artan band genişliği ugulamaları.

Ana dönü içindeki servo loopların sayısını artırarak tek çiple birden fazla sistemin kontrolu.

Bir lojik devrenin eşdeğerinin yazılımla yapılmasına yarayan uygulamalar.

Çip emülasyonları.

Gördüğün gibi hep elektronik uygulamaları.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

berat23

bir uçağın uçuş kontrol bilgisayarı da o işleri yapıyor, hatta mach hızlarda giden füze de de o döngülerin babası var. bu uygulamalarda da c/c++ hatta model tabanlı kod üreten tool'lar kullanılıyor.

z

Acaba STM32F103 gibi işlemcilerlemi yapıyorlar yoksa PC işlemcileri gibi güçlü işlemcilerle mi?

Acaba 20K ram ve 64K romla mı yapıyor?

Ayrıca, süper sonik hızda hareket eden bir sistemin servo döngü süreleri kaç mikrosaniye olabilir ki?

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

http://www.cpushack.com/space-craft-cpu.html

https://en.wikipedia.org/wiki/Instructions_per_second
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

berat23

öyle dandik işlemcilerle uçan uçaklar da var, geneli elbette güçlü işlemciler, powerpc mesela.

32f103 olmasa da ti c2000 dsp'leri kullanan "yerli" mühimmatlar var, biliyorum. gerçi bu mühimmatlar süpersonik değil.

süpersonik bir sistemle muhatap olmuş değilim, bilmiyorum ama transonic bir sistemde 1ms olabiliyor.

z

Tamam işte 1ms bir döngü süresine sahip servo işlemler yanında anormal kontroller bile yapılabilir C de kulanılır C++ da başkası da.

Tartışmayı bu yöne kaydırırsak gene asıl konudan uzaklaşırız.

Uçuş kontrol sistemlerini, kontrol teoriyi ve en baba işlemcilerin komutlarını inciğini boncuğunu ve C/C++ yi de çok iyi biliyor olsaydım ben de bu uygulamarı C/C++ ile yazardım. ASM'nin yanına bile yaklaşmazdım.

Ama asm yavaştır carttır curttur demezdim.


mesaj birleştirme:: 11 Eylül 2016, 15:45:08

Ayrıca,

Sanmıyorum ki bir uçakta kontrol edilebilen tüm servo düzeneklerin döngüleri merkezde dönderilsin. Her birinin kendi denetleyicisi olması lazım. Hani bir çipin içine servo loopları dolduralım hepsini kontrol etsin olayı da yoktur.

Dolayısı ile uçuş kontrol sistemleri aşağıda verdiğim örneklere bence pek dahil edilemez.

İllede bir örnek vermek gerekirse bir zamanlar SID çipinin STM32F103C8 ile simülasyonunu asm kodlayarak yapmıştım.

Aynı projeyi başka işlemcilerle C ile kodlayarak yapanlar da var. Youtube'da videolarını görebilirsiniz.

Bir C ile yapılanı bir de asm ile yapılanı masaya koyup üretilen tondaki jittere bakmak iki dili mukayese etme açısından kriter olabilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

berat23

Alıntı yapılan: z - 11 Eylül 2016, 15:39:54
Tamam işte 1ms bir döngü süresine sahip servo işlemler yanında anormal kontroller bile yapılabilir C de kulanılır C++ da başkası da.

Tartışmayı bu yöne kaydırırsak gene asıl konudan uzaklaşırız.

Uçuş kontrol sistemlerini, kontrol teoriyi ve en baba işlemcilerin komutlarını inciğini boncuğunu ve C/C++ yi de çok iyi biliyor olsaydım ben de bu uygulamarı C/C++ ile yazardım. ASM'nin yanına bile yaklaşmazdım.

Ama asm yavaştır carttır curttur demezdim.


mesaj birleştirme:: 11 Eylül 2016, 15:45:08

Ayrıca,

Sanmıyorum ki bir uçakta kontrol edilebilen tüm servo düzeneklerin döngüleri merkezde dönderilsin. Her birinin kendi denetleyicisi olması lazım. Hani bir çipin içine servo loopları dolduralım hepsini kontrol etsin olayı da yoktur.

Dolayısı ile uçuş kontrol sistemleri aşağıda verdiğim örneklere bence pek dahil edilemez.

İllede bir örnek vermek gerekirse bir zamanlar SID çipinin STM32F103C8 ile simülasyonunu asm kodlayarak yapmıştım.

Aynı projeyi başka işlemcilerle C ile kodlayarak yapanlar da var. Youtube'da videolarını görebilirsiniz.

Bir C ile yapılanı bir de asm ile yapılanı masaya koyup üretilen tondaki jittere bakmak iki dili mukayese etme açısından kriter olabilir.

asm yavaştır carttır curttur diyen yok zaten, ben demiyorum en azından. diyorum ki elde edeceğiniz hız avantajına karşılık verdikleriniz çok çok fazla. bu sebeple dar bir alan haricinde kullanımına gerek yok. yani 100 instr. yerine 110 harcarım kafam rahat olur.

uçakta kontrol derken servo-yüzey değil, o yüzeylere giden sinyallerden bahsediyorum ki o döngüler tek bir yerde koşar. hatta ne uçaklar var ki neleri tek bir kartta yapıyor! o bahsettiğim mühimmatta servo vs. tüm kontroller gariban c2000de yapılıyor, asm ile yazılmamış.

z

Tamam sende haklısın ama benim şu jitter meselesi de kafanda bir köşede kalsın.

İşlemcinin interrupt latency değeri düşük olsun isteriz. Bu değeri, C yazanlar da düşük olsun ister biz asm yazanlarda. Halbuki topu topu 10 clk civarında. Yani 10 komut civarında.

Demekki C yazanlar için de 10 komut önemli olabiliyor. İşte demek istediğim de bu.  Biz kafaya taktıkmı  10 komutu kaldırıp atabiliyoruz. Siz de fazlalıkları inline asm ile tıraşlayabiliyorsunuz.

Jitter mitter işte bunlarla alakalı.

Proje yapacakların bunlarla işi olmaz.

Zaten çoğu meraksız adam. Salla gitsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Haklısın hocam.

Çok karmaşık cpularda kafam karışır.  Senin öngördüğün şekilde, işlemcinin karmaşık kodlarını görmezden gelip basit şekilde basit kodlar yazarım.

Yazılımla üretilen sinyallerde de jitter den bahsetmem de çok abes olmuş.

Loop unrollingden bahsetmişsin.

ARM öğreniyoruz başlığında yazılımla CRTC uygulaması yapmıştık. Orda pixelleri üreten koda da bir bak. Bir satırın pixellerini nasıl bir döngüde üretmişiz?

Pixel üretiminde jitter belasından nasıl kaçmışız?

Aynı kodu bir de sen C ile yazmayı dene.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com