pic ile aynı anda iki işlem

Başlatan yusuffyk, 31 Temmuz 2012, 00:09:36

FEHMİ_ASM

#30
   Sanırım sorun çözülmüş. Ben de hazır konu kapanmadan ve yeri gelmişken sorayım.

   Örneğin iki fonksiyonumuz var, ikisinde de butona bağlı led kontrolü olsun. Zamanlama için hiçbirşey söylemeyeceğim. Şimdi, her iki buton kontrolünü "gerçekten aynı anda" (birbirinden bağımlı veya bağımsız) yapabileceğimiz bir işlemci, denetleyici,yapı (tabii mikrokontrolör olarak) var mı? Çift veya daha fazla çekirdek denen icad bu gereksinimden mi türedi yoksa?  Eğer öyle ise 10 fonksiyondan oluşan bir programı çalıştırabilmek için on çekirdekli bir yapı mı kullanmak lazım? Yoksa FPGA ile mi yapmak mümkündü/gerekirdi?

   Bunu sormamdaki amaç, aslında hız değil, öngörüyorum ki -- algoritmanın kısalması ve sadeleşmesi.  Yoksa, zamanlama belirtmediğim (aslında çok da önemsemediğim için sanırım) benzer hedefime yine Multitasking ile mi erişebilirim?
Hz.Hamza'nın Belinde İki Kılıç Duruyor ! Attığı Her Adım Bir Kalbi Durduruyor ! Ey Hamza ! Gördüğün Hiçbir Şeyden Korkmazsın , Bu Doğru Ama Heybetini Gizli Tut , Yürüyüşün Ölümü Korkutuyor !  İşte Hz.Ömer ve Hz.Ali , Biri Hattaboğlu , Biri Haydâr-ı Kerrar ! Ve Kolkola Ölümün Ağzına Giriyorlar !  Azrai

Tagli

Konuyu takip etmedim, sadece FEHMİ_ASM'nin son sorusuna cevaben yazıyorum:

Çoğunlukla ihtiyacımız olan şey "gerçekten aynı anda" yapmak değildir. Ama istenilen tam olarak buysa, evet, klasik tek çekirdekli işlemcilerle bu mümkün değil. Çok çekirdekli işlemciler bu ihtiyaçtan türemedi, amaç işlemci frekansını arttırmadan performansı arttırmak idi. Eğer daha hızlı işlemci yapacak teknolojin yoksa, veya bunun önünde başka engeller varsa, aynı işlemciden daha fazla adette kullanırsın.

Çok çekirdekli işlemciler algoritmayı kısaltmaz. Tam tersi, işletim sistemini yazanlar açısında işleri zorlaştırır. Son kullanıcı, daha doğrusu son programcı bu durumu pek farketmez. Uygulamasını yine eskisi gibi multithread olarak yazar. Sonuçta tek çekirdek de multithread yapabilir. Ama programcı daha yüksek performans alabilmek için uygulamanın işlemci çekirdeklerini nasıl kullanacağını belirleyebilir. Bu konuda deneyimim olmadığı için son dediğimden emin değilim.

Özetle, genelde işleri gerçekten aynı anda yapma ihtiyacımız olmaz. Ama yaklaşık olarak aynı anda yapmak istiyor fakat bunu yaparken klasik kodlamadan uzaklaşmak ve işleri zorlaştırmak istemiyorsak işletim sistemlerine yönelmeliyiz. Burada işin karmaşık tarafını işletim sistemini yazan adamlar halletmiş oluyor.

Öte yandan, multithread programlama, normal programlamada bulunmayan bazı incelikler içerir. Bunlara dikkat edilmezse, tekrarlanması ve bulunması zor sorunlar ortaya çıkar.
Gökçe Tağlıoğlu

fatih6761

Bende Tagli arkadaşımızın cevabına katkıda bulunayım.
Çok çekirdek, kullanıcıya hız açısında pozitif yansıyan bir durumdur.Ancak programcı tarafında hiçte öyle değildir.O iki çekirdeği ayrı ayrı yönetebilmek için bir kütüphane, kaynakları sıralı ve büyüğe saygı mantığıyla çalışan priority taban sistemi, işlemleri çekirdeklere bölme, çok çekirdek uyumlu schedular, bellek koruması ve ekstra onlarca exception handler lar, işlemci boşta zamanlayıcısı, çekirdek güç ilkesi gibi birçok sorunu vardır.Ama neticede hız artar mı? Bariz artar.Tabi birde mutiprocessing olursa işler iyicie karışır, virtual memory, mmu policy gibi daha da beter olaylar işin içine girer.Benim tavsiyem çok lazım olmadıkça FreeRTOS, ChibiOS, CircleOS veya uCLinux dan faydalanın.
(Not : üstte belirttiğim işlemleri olabildiğince donanım tabanın indirmeye çalışıyorlar e bağarıyorlar da.Böyle giderse işletim sistemi geliştiriciliği çok daha kolaylaşacak.Tabi bilgisayarlardaki OS lar ayrı bir dert.Bitmiyor Paging, IRQ, PIT, PIC vs.vs :) Burada PIC 16f84 gibi değil, Programmable Interrupt Controller oluyor.)

htwoc

Benzer bir soru sormak istiyorum.
Uart bir sensörden sürekli olarak veri okuması yapacak
Okunan bu veri LCD ekrana butona basıldığı zaman yazdırılacak ve basılmadığı zaman en son kalan değer ekranda kalacak.
Aynı zamanda bir pot ile ledin parlaklığını ayarlamak istiyoruz.
Buradaki sorun şu; Butona basıldığında veya pot ile oynandığı zaman uart veri alımına devam etmeli. Yani kaybı olmadan bu işlemleri paralel olarak nasıl aynı anda yapabilirim.

JOKERAS

Paralel işlem yapmak için Paralel işlemci gerekir.FPGA gibi.
Piyasada Kullanılan işlemcilerin hemen hemen bir çoğu Seri işlem yapan işlemcilerdir.


Yukarıda dediğinizi yapmak için Paralel işlemciye gerek yok.
Sıradan işlemcilerin yapabileceği işler onlar.
İşlemcilerin içleri Donanımla dolu,ayrıca İnterrupt denen olay da var.
O sebeple dediklerinizi yapmak zor değil.


Hatta ve hatta Donanımsız bile olur.Bahsettiğiniz işlemlerin hızları İşlemci hızı yanında
Kağnı arabası kalır.

htwoc

Alıntı yapılan: JOKERAS - 08 Aralık 2017, 20:01:12
Paralel işlem yapmak için Paralel işlemci gerekir.FPGA gibi.
Piyasada Kullanılan işlemcilerin hemen hemen bir çoğu Seri işlem yapan işlemcilerdir.


Yukarıda dediğinizi yapmak için Paralel işlemciye gerek yok.
Sıradan işlemcilerin yapabileceği işler onlar.
İşlemcilerin içleri Donanımla dolu,ayrıca İnterrupt denen olay da var.
O sebeple dediklerinizi yapmak zor değil.


Hatta ve hatta Donanımsız bile olur.Bahsettiğiniz işlemlerin hızları İşlemci hızı yanında
Kağnı arabası kalır.

Cevap için saolun. İnterupt ile yaptığımızı düşünelim, ana programı kesiyorsunuz her halükarda bunu yapmak istemiyorum, interrupt kullanılması şart mı onu anlayamadım.

JOKERAS

Şart değil!Yazılımsal olarak ta yapabilirsiniz.Ama bu sizi daha da yavaşlatır.


Sizin "Ana Programı kesiyorsunuz" dediğiniz şey zaten Pgm'ın parçalara bölünmüş halidir.
Sizin ana döngüye yazdığınız her kod parçası Pgm'ın bölünmesi demektir.