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

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

z

@gerbay

C deki özgürlüğün sınırlarını merak ettim.

Ramda Array olarak tanımlanmış bir alana veriler yazıp ardından bu arrayin herhangi bir adresine jmp edip kod olarak çalıştırmak mümkün mü?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mufitsozen

Alıntı yapılan: gerbay - 09 Eylül 2016, 08:10:46
Mümkün

Yaa @gerbay hocam, sende herseye mumkun diyorsun, o mumkun, bu mumkun, su mumkun.

Bende sana daha kurnazca bir soru sorsam, Bu C ile ne mumkun degil (mesela asm ile yapilan)?

Artik onada valla hersey mumkun dersen artik diyecek birseyim yok, 1974den beri assembler ile program yazarim, bir daha ASM kullanmam artik. Bir yasima daha girdim, neymis bu C yav!

Haa o arada aklima geldi, madem c ile hersey mumkun, C++ ilede mumkun olurmu? Artik onada mumkun dersen.....
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

MrDarK

Konu başlığından epey bir şaşmış lakin bende kısa birşey söylemek istiyorum bu konuda;

ASM ile bir proje yaptığımızda o mikro kontrolcüsüne hükmederek yazdığımızdan yazılımın içindeki her bir işlem o mikroya uygun register adreslemesi ve yapısı ile yapılıyor. Bir üst seviye bir mcu'ya veya başka bir mcu ailesine geçildiğinde kodları sıfırdan yazmak gerekmiyor mu ?

Öyle yapmak zorunda oldukları için aşağıdaki gibi bir açıklama yapmışlar.
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!

Yeni nesil projelerde eskiden gelen bilgi ve deneyimi aktarmak için C kodu çok yararlı oluyor. Birçok platforma derleyiciler sayesinde kodu değiştirmeden sadece donanımsal birimlerin setup işlemlerini değiştirip taşımak yeterli oluyor. Bu sayede kusursuz şekilde (Compiler'lara güvenerek) kod taşıması bilgi tecrübe deneyim aktarımı yapılabiliyor.
Picproje Eğitim Gönüllüleri ~ MrDarK

mufitsozen

Tuh sevgili @gerbay, Tamda sayin @z'ye guzel bir assist yapmistim, simdi o bi cakar doksandan gol olur demistim ama, oyle goruluyorki @z gece cok calismis hemen cevap yazmadi. Firsati kullanmadi (Rahmetli Erbakanin dedigi gibi @z "eline gelen kuşu kaçırdı!"  ;D) olsun ben gol atmayi bilmiyorum onun gibi ama cok iyi assist yaparim, daha baska firsatlarda cikar ilerde netekim!  ;)
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

RaMu

@berat23 @gerbay sizi gidi son darbeciler :) şaka şaka.
Bu sıralar darbe deyince akla başka bir şey gelmiyor.

Bir tane ASM kullanan hatalı bir ürün bulup suçuda ASM ye yükleyip,
buradan bir istatistik çıkarmak mı istiyorsunuz.
Biraz bilimsel olun, yeterli örnek alın, sonra genelleme yapma ihtimalimiz olsun.

Önerdiğiniz ADA vs. kullanıp incelediyseniz faydası şudur diyebiliyorsanız bende öğrenmeye çalışırım ama
eşek bilmediği otu yerse karnı ağrır,
bana bildiğini unut, bunu öğren işini bununla yapabilirsin
diyebilecek kadar iddialı olabilir misiniz.

İşin döndüğü noktalardan biri biz işinizi ASM ile yapın demiyoruz,
C çok kötü işe yaramaz, boşuna öğrenmeyin demiyoruz,
ben programcıyım kod yazarım diyorsanız alfabeyi bir öğrenin diyoruz.
Ha zaten ASM birilerinin işini görmediği için C geliştirildi yada B...

FPGA programlayacak biri varsa onada kapılarla devre tasarla derim,
hatta mcu programlayan adamında logic bilgisi iyi olmalı,
bir şeyin kökünde ne nasıl oluyor bilmesi gerekir.

Adam hobici, veya eh işte program yazacak,
isterse matlab üzerinden kodlarını yazsın mcu ya yüklesin,
isterse raspi arduino kullansın,
çalışsında nasıl çalışırsa çalışsın
modundaki adamlara değil ASM öğren deyişimiz,
BENİM diyen programcı ASM bilmek zorunda bunun kurtuluşu yok.
Sizin verdiğiniz "x86 işlemciyi protected moda geçirmek" örneği yine bunu destekliyor.


  Birde darbe olayına gelelim,
asıl darbeyi ben söyleyeyim size,
C derleyicisine güvenmiyorsun ama
ASM derleyicisine niye güveniyorsun deseydinizya,
ona verilebilecek cevap dahi yok.
(Aslında yazdığım kodu derleyicinin ne  olarak
opcode ve oradanda hex e çevirdiğinide kontrol ettiğim oldu,
bu ameleliğin paranoyaklığın daniskasıdır, evet.)

Hadi bunlarıda geçtim,
yazdığın kodu işlemcine yüklerken kullandığın programlayıcı ne derece başarılı,
acaba program memoryde senin yazdığın kodlar mı var?
Hadi programlayıcı doğru düzgün yükledi,
mcu nun bulunduğu ortamda program memory bozulursa, ram bozulursa, ne olacak, önlem aldın mı?

  Aslında konu başlığından uzaklaştık evet ama
başlık yanlış değil,
güncel mimarilere ASM ile daha hızlı çalışacak kod yazmak gerçekten çok çok zor iş,
ama bunun sonucu ASM işe yaramaz boşuna öğrenmeyin, hiç ASM öğrenmeyin,
ASM görünce olabildiğince uzağa kaçın :) demek değil.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Burak B

Alıntı Yap
STOKE is a stochastic optimizer and program synthesizer for the x86-64 instruction set. STOKE uses random search to explore the extremely high-dimensional space of all possible program transformations. Although any one random transformation is unlikely to produce a code sequence that is desirable, the repeated application of millions of transformations is sufficient to produce novel and non-obvious code sequences. STOKE can be used in many different scenarios, such as optimizing code for performance or size, synthesizing an implementation from scratch or to trade accuracy of floating point computations for performance. As a superoptimizer, STOKE has been shown to outperform the code produced by general-purpose and domain-specific compilers, and in some cases expert hand-written code.
https://github.com/StanfordPL/stoke
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

bulut_01

sayın gerbay hocam merak ettiğim bır konu var hayati bir sistemi kontrol eden 2 mcu olsun biri pic diğerinde bahsettiğiniz ti nin cortex-R D Sertifikalı mcu olsun kıyaslama yaparsak 2 mcu arasında pic hangi koşullarda yada şartlarda hayati error yaparak sistem calısmasını bozar.Bunun net cevap varsa merak ediyorum microchip sitesinde güvenlik sertifikaları var ama anlamadım.
YENİLMEZ..

MrDarK

gerbay hocam olmadı ama böyle; ben küstüm oynamıyorum demenize gerek yok. Siz düşüncelerinizi yazdınız, herkes kendi düşüncelerini yazdı. Kimsenin kimseye birşey kabul ettirme çabasına girmesine gerek yok bence. O yüzden herkes kendi işinin sorumluluğunu alır. Siz bu şekilde bilgiler paylaştıkça tartıştıkça insanların neler yaptığını öğrendiniz, bizde bu tarz mimarilerde dikkat edilen şeyler neler onları öğrendik. Onun dışında foruma yabancı olan arkadaşlar ise ASM ile C arasındaki tartışmayı okumuş oldu. Kimin neyi değerlendirdiği kendine kalmış. O yüzden üstadlardan tek dileğim kimsenin fikrine kızmadan yazmaya devam etmeleri. Uzun zamandır forumda bu kadar heyecanlı ve yararlı bir konu okumamıştım :) konuda emeği geçen herkese teşekkür ederim
Picproje Eğitim Gönüllüleri ~ MrDarK

z

Alıntı yapılan: gerbay - 09 Eylül 2016, 11:17:35
@z hocam dahil arkadaşlardan kaçı bu tip işler ile uğraşıyor..  bu tip işler ile uğraşanlara neden ASM ile yazıyorsun denmez zaten..

Hocam 94 yılından bu yana hemen hemen hiç asm kodlama yapmadığım x86 makine kodlarından bahsediyorsun.

Bu yöntemi 90 lı yıllarda öğrenmiştim. DOS işletim sistemindeki makineyi 32 moda geçirip hem dos çalışmaya devam ediyor hem de 32bit asm koda sahip programlar yazabiliyordum. O yılların HDDleri bir yerlerde mevcut yazdığım kodlar hala duruyordur.

Bu bir bugdı ve hayal meyal bu bug askeri bir tesisin şifreli kilidinde açığa çıkmıştı diye hikayesini hatırlıyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

F493

Selam,

  ASM ile kod yazmak oldukça zor bir olay. Neden mi?

  1- İşlemcinin komut setini çok iyi bilmeniz gerekir.
  2- yazacağınız kodun ait olduğu projenin bütününe hakim olmalısınız ona göre düzenli yazmanız gerekir yoksa sonra çorba olur işin içinden çıkmak zorlaşır.
  3- işlemcinin özel komutlarını işlemleri hızlı yaptığı komutları çok iyi bilmek gerekir.

  Asm ile yazılan kod daha  hızlı çalışır diye bir şey olamaz, bu iş kodu yazan kişinin yukarıdaki  3 maddeye hakim olduğu kadarıyla olur  Bunlarda yetmez , yazılım hız optimize mi yoksa memory optimize mi çalışşsın buna görede yazma şekli değişir. Yani anlayacagınız bayağı bir iş. Ama bunu beceren kişi, işlemci değiştirdiğinde yeni işlemcinin komut setini iyi örenirse orada da bu işleri başarır.

Fakat sorun şu ki, günümüzde hiçbir firmanın mükemmel çalışan bir ürüne ihtiyacı yok, yazılımcı nükemmel yapmak ister ama baskılar bunu engeller. Yaşadık bütün bunları.

Asm ile kod yazmak daha sonra kod eklemeyi, işlemci değiştirmeyi çok çok zorlaştıracagından bu da tercih edilmemesinin bir nedenidir. Çalıştığın firma çıkıp sana "ya kardeşim iki özellik istedik hala bitiremedin" der. Apışıp akalırsın. Ama kendi işinse ve paran çok zamanın geniş işe bunları yapabilirsin.

Şimdiki derleyciler ve işlemciler " C Optimized " olayını vurguluyorlar, yani tasarlanan işlemciye direk C dilinin komut setine karşılık gelen komut setleri ekliyorlar yani ASM kadar mükemmel olmasa da ortaya iyi bir sonuç çıkıyor.

Artık projeler device driver şeklinde değil yani çok çok yüksek performans ancak projelerin %2 sinde gerekiyordur. ozaman aç kalmamak  :) için kalan %92 lik kısımda yer almak çok daha mantıklı, gerçekçi.
FreeRTOS, TFT, ETHERNET, GUI vs olan bir projelerde ASM ile kod yazılmaz. Hatta artık C bile karmaşık kalıyor, C++ ile yazılıyor. Son örneği TouchGFX. C++ ile yazılmış ve FreeRTOS üzerinde çalışıyor

Gönül isterki yaya yaya,zevkle mükemmel iş yapmaya çalışalım ama kapitalist düzen bunu engelliyor. Az zaman çok iş hızlı müdehale. Yukarıdaki 3 maddenin tamamını sağlıyorsanız ve paranız çok zamanınız geniş ise ASM yoksa C, C++.

Esen kalın.

bulut_01

Alıntı yapılan: bulut_01 - 09 Eylül 2016, 14:48:23
sayın gerbay hocam merak ettiğim bır konu var hayati bir sistemi kontrol eden 2 mcu olsun biri pic diğerinde bahsettiğiniz ti nin cortex-R D Sertifikalı mcu olsun kıyaslama yaparsak 2 mcu arasında pic hangi koşullarda yada şartlarda hayati error yaparak sistem calısmasını bozar.Bunun net cevap varsa merak ediyorum microchip sitesinde güvenlik sertifikaları var ama anlamadım.

Gerbay hocam cvpınız bnm için önemli bu konuda görüşünüzü nedir.
YENİLMEZ..

kantirici

Konudaki ASM, C  ve programcılık hakkındaki bilgiler oldukça güzel. @z ve @gerbay tüm yorumları okuyan ve yeni bilgiler kazananlar var emin olabilirsiniz çünkü birisi benim.

Şahsi görüşüm büyük bir proje üzerinde artık ASM ile kod yazmak mümkün değil. Zaten C'nin esnekliğini, veriler üzerindeki manipülasyon kolaylığını, platform bağımsızlığının tadını alan işi düşmedikçe ASM ile yazmaz. Kaldı ki genel gömülü sistem iş ilanlarına bakarsanız ASM ile kodlama isteyen firma bulmak zor.

İnsanlar yazılan kodu başka platformda da çalıştırayım, bunun yazdığını bir sene sonra başkası da kolayca anlasın yazsın diye düşünüyor.

Proje ilerlerken dahi platform değişebiliyor. Yani pic ile başlayıp st ye geçip son olarak ürün ti mcu da piyasaya çıkabiliyor. Şirket proje başlangıcında 2$ fiyat aldığı mcu için proje sonlarında 25 cent düşük fiyat aldığı benzer maxim e geçiyor.

Olayın birde grup çalışması ayağı var. Proje 3-5 v.s kişi ile ilerliyor. Herkes kendi tarafını yazıyor ve bir gün öğleden sonra tek proje halini alabiliyor.

Diğer bir durum ise kütüphane olayı. Yani bir projeye başlayacaksınız ve carcurt protokolü / ihtiyacı / stack v.s için kütüphane almanız veya kullanmanız gerek çünkü zaman ve adam yok veya tekrar yazmak anlamsız zahmetli v.s . Bu kütüphanelerin hepsi C de yazılmış.

Artık çeşitli yerlerde C yi bırakn C++ a geçin tarzında pek çok makale görmek mümkün. Buda işin sonraki boyutu.


z

Alıntı Yapsayın gerbay hocam merak ettiğim bır konu var hayati bir sistemi kontrol eden 2 mcu olsun biri pic diğerinde bahsettiğiniz ti nin cortex-R D Sertifikalı mcu olsun kıyaslama yaparsak 2 mcu arasında pic hangi koşullarda yada şartlarda hayati error yaparak sistem calısmasını bozar.Bunun net cevap varsa merak ediyorum microchip sitesinde güvenlik sertifikaları var ama anlamadım.

Ayrıca Gerbay'da cevap yazar.

Hayati derece kritik bir sistem kontrolünden bahsediyoruz. Bu bir kenarda dursun.

Otomatik kontrol sistemlerinde  kontrol düzeneği girdi sinyallerine cevaben çıktı sinyali üretir.

Üretilen cevap kontrol ünitesinin transfer fonksiyonu ile belirlenir. Transfer fonksiyonunu ise kullanılan malzemelerin birlikteliği ile oluşan düzeneğin matematiksel modeli belirler. Sistemimiz analog bir kontrol düzeneği ile kontrol ediliyorsa;

Örneğin basit bir RC devresininde R=1K C=1uF ise sistemin  transfer modeli bellidir. Sistem normal şartlarda asla ve asla kısa bir süreliğine bile R=10 ohm gibi davranıp yanlış sonuçlar üretmez.

Dolayısı ile kontrol düzeneğinin transfer fonksiyonu, malzemelerin yaşlanma etkileri, termal şartların değişmesi ve sistemin zorlanmasına neden olacak büyük giriş sinyalleri haricinde değişim göstermez.

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

Ancak kontrol sistemleri giriş sinyalleri haricinde bir takım bozucu sinyallere de maruz kalır. Bu sinyaller doğrudan giriş sinyali üstüne binebileceği gibi vibrasyon, ısı, ışık, elektromağnetik gibi yollarla da kontrol sistemine sızabilir ve kontrol sistemin vereceği cevabı değiştirebilir.

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

Ancak bu hatalar gelip geçici hatalardır kontrol düzeneği bu hataların da etkisini azaltmaya çalışır. Bozucu ortadan kalktığında sistem de zaten normal çalışmasını sürdürür.

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

Eğer kontrol sistemini analog değil de Flip floplar barındıran durum makineleri ile yaparsak (CPU vs dahil) bozucular sistemi tamamen farklı bir duruma taşıyabilir.

İşte burada MCU gibi sistemlerde sadece 1 bitin yanlışlıkla değer değiştirmesi bile sistemi bir daha düzelmeyecek şekilde belirsiz durumlara sürükleyebilir.

Bu gibi durumlardan haberdar olmak için en azından sistemin kontrolden çıktığının farkına varmak için bir takım düzenekler geliştirilmiştir.
Böylelikle en kötü ihtimal sistem resetlenip tekrardan çalıştırılabilir.

Fakat bunlar sadece yavaş sistemlerde çözüm olabilir.  (Ses hızını aşmış bir savaş uçağınında işlemciler varsa be bunlar resetlenirse ne olur bilemiyorum)

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

Digital düzenekler analog düzeneklere kıyasla bozucu etkisinde tamamen kontrol dışı kalabilir.

Ramdaki veri anlık bozulabilir ve kaotik durumlar oluşabilir. İşte bu durumda tek bir işlemci ile çalışmak yerine aynı iş birden fazla işlemciye yaptırılıp bunlar bir karar mekanizması ile gözlemlenebilir ve doğru sonuç ürettiği düşünülen çıkışlar kullanılabilir.

Sonuçta hayati riskleri olan bir sistemi tek işlemcinin eline bırakmak zaten bir risktir.

Tüm bu anlatılar ışığında, bana göre bir işlemcinin güvenilir olabilmesi için;

CPU tarafından içeriği değiştirilebilen tüm veri alanlarının (Ram ve registerler) içeriği, CPU tarafından değiştirilmediği halde değiştiyse, int mekanizması vs yardımıyla derhal işlemcinin en azından güvenli bir kod parçacığını çalıştırabilecek yetenekte olması gerekir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RaMu

@gerbay hocam ben sizi çok net anlıyorum,
yazdıklarımı yanlış anlamaya çalışmayın,
sonuçta ASM ile hayatını kazanan biri olarak tecrübelerimi paylaşıyorum,
gelişime değişime açığım,
daha iyi alternatif arayışımda var,
yüksek seviyeli dilleri derinden öğrenmeyede çabalıyorum,
daha fazla açıklama yapasınız ve benim gibi ciddi işler yapmak isteyenlere
örnek olsun diye sorular soruyorum.

Bende gayet objektif yazdığım için
ASM nin zararlarındanda bahsediyorum,
neden rahatsız oluyorsunuz anlamıyorum.

Boşuna yazdığınızı düşünmenize hiç gerek yok,
bizim millet o kitapta yazandan değil,
biz takip eden sessiz çoğunluk milletiyiz.

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

bulut_01

Vallahi gerbay hocam sayenizde baya birseyler ögrendik 1140 yılda 1 hata inanılmaz degerler bu sertifikarın hepsini içer mcu varmıdır.hayati bir sistem yapıyosanız hersey kusursuza yakın olması gerekli radyasyon dayanımı ilgili standartlar sertifikalar baya gzl kısacası ögrenecek çok sey var bitmez ögrenmeyle konu ve tartısma gzl gidiyor.
YENİLMEZ..