IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 03 Aralık 2014, 15:22   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Pipemill




Merhaba arkadaşlar,

Aşağıdaki yazımda sizlere pipeline-filter yapısını içeren ve bir thread kütüphanesi olan Pipemill kütüphanesini tanıtacağım. Kütüphanenin tasarımı Intel firmasının TBB kütüphanesine aittir. Ayrıca içerisinde boost thread kütüphanesinin thread mekanizmaları kullanılmıştır. Bu nedenle projenin kaynak kodları tamamiyle açıktır ve gelişimine destek verecek C++ programcıları aramaktadır
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


TBB Pipeline-Filter yapısı için [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Pipemill

Pipemill, TBB ve boost kütüphanelerinden türemiş cross-platform template bir thread kütüphanesidir. Design ve tetikleme işlemleri TBB pipeline-filter yapısından alınmıştır. boost kütüphanesinin managed shared memory ve thread sınıflarının yardımı ile multi-filter ve multi-pipeline yapısı geliştirilmiştir. TBB kütüphanesinin one-to-one filter dizaynına ek olarak one-to-many, many-to-one ve many-to-many filter dizaynını destekler.

Giriş

Threading Building Blocks (TBB), Intel firması tarafından geliştirilmiş template yapıda open source bir thread kütüphanesidir. Her ne kadar thread işlemleri çok fazla sayıda olmasa da paralelleştirme işlemi için kolaylıkla kullanılabilecek bir çok algoritma ve veri yapısına sahiptir.

boost, open source ve ileri seviye bir thread kütüphanesidir. Thread işlemlerinin yanı sıra communication, semaphore, unique id, concurrent data structure gibi bir çok yapıyı da barındıran boost kütüphanesi ,C++ dili ile en yaygın kullanılan thread kütüphanesidir.

Pipemill ise TBB ve boost kütüphanelerinin yetenekleri sayesinde geliştirilen template bir thread kütüphanesidir. Pipemill kütüphanesinin, TBB kütüphanesindeki filter sınıfının pure virtual olarak tanımlanmış operator() fonksiyonuna denk gelen bir process() adında fonksiyonu vardır. Bunun yanı sıra input, process ve output işlemleri için özelleştirilmiş 3 farklı filter sınıfı ve bu sınıflar içerisinde veri iletişimini sağlayan InConnector ve OutConnector sınıfları vardır. Filter sınıflarının ekleneceği bir adet Pipeline sınıfı ve Pipeline object’lerinin paralel çalışabilmesini sağlayan MultiPipeline sınıfını içerir. Toplamda 8 adet header ve 7 adet source dosyası içerir.

Pipemill kütüphanesinin ortaya çıkış nedeni TBB kütüphanesinin bazı kısıtlamalarından dolayı yeteri kadar esnek bir yapı sağlamamasındandır. TBB kütüphanesi içerisindeki pipeline-filter yapısında, bir pipeline içerisine filter object’leri sadece seri şekilde yerleştirilebilmektedir. Bu sebeple, bir filter object’i sadece kendisinden sonraki filter object’ine veri gönderebilmekte ve sadece kendisinden önceki filter sınıfından veri alabilmektedir. Pipemill kütüphanesinde, bu kısıtlama boost kütüphanesinin managed shared memory sınıfı ile aşılmıştır.

Design

Pipemill kütüphanesi filter communication için iki adet connector sınıfına sahiptir. Bunlar OutConnector ve InConnector sınıflarıdır. OutConnector içerisinde bir adet, boyutu kullanıcı tarafından girilen, managed shared memory açar. InConnector sınıfı da bu OutConnector sınıfına bağlanarak managed shared memory üzerinden veri alış verişi yaparlar. Kullanıcı OutConnector sınıfının açmış olduğu circular hafıza bloğuna erişerek bu alana veri yazar. TBB tetiklemesi ile tetiklenen InConnector sınıfı ise bu alandan veri okumaya başlar. Managed shared memory object’inin bazı değerleri, hata yapılabilme ihtimali düşünülerek, kullanıcıya bırakılmamış, boost kütüphanesinin diğer sınıfları ile tamamlanmıştır.

Connector sınıflarını içeren filter sınıfları 3 isim altında toplanmıştır. Bütün filter sınıfları BaseFilter adındaki bir abstract sınıftan türerler. Filter sınıflarından ilki InputFilter sınıfıdır. Kullanıcının pipeline akışı için ilk filter sınıfı bu sınıf olmalıdır. Dışarıdan herhangi bir veri ya da tetikleme beklemeden pipeline çalıştırılınca otomatik olarak çalışmaya başlar. Kullanıcı bu sınıf içerisinde bir veya birden fazla OutConnector object’i yaratarak veri akışını başlatır. ProcessFilter sınıfı, ara katman filter sınıfı olarak geçer. Kullanıcı bu sınıf içerisinde ara işlemleri yapar. Hem InConnector hem de OutConnector object’leri bu sınıf içerisinde kullanılır. OutputFilter sınıfı ise kullanıcının, output vermek istediği sınıftır. Bu sınıf içerisinde sadece InConnector object’leri kullanılır.

Pipeline sınıfı, TBB pipeline sınıfı ile oldukça benzer yapıdadır. Oluşturulan filter object’leri bu sınıf içerisine eklenir. Sınıfın constructor fonksiyonu kullanıcıdan paralel ya da seri çalışmasını gösterecek bir boolean flag bekler. TBB kütüphanesinden farklı olarak kullanıcı, filter sınıfları içerisinde oluşturduğu connector object’leri harici olarak bağlamak zorundadır. MultiPipeline sınıfı ise TBB kütüphanesinin parallel_pipeline algoritmasına benzer bir işlemi boost thread sınıfı ile sağlamaktadır. Kullanıcı bu sınıf içerisine oluşturduğu pipeline object’lerini ekleyerek pipeline object’lerinin paralel çalışmasını sağlar.

Pipemill kütüphanesinin çalışma mekanizması aşağıdaki resimde anlatılmıştır.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Resimde görüldüğü üzere 3 tane Pipeline sınıfı bir adet MultiPipeline sınıfı içerisinde paralel olarak çalışmaktalar ve her pipeline sınıfı içerisinde birden fazla bağ ile bağlanabilen Filter sınıflar içermekteler.

Detaylar

> TBB kütüphanesinin aksine, Pipemill kütüphanesi multi-filter connection yapısını destekler.
> Multi-filter yapısına rağmen TBB kütüphanesi ile aynı hızda çalışır. (PipemillTest headerında test edilmiştir.)
> Managed shared memory yapısının boyutu kullanıcı tarafından belirlenir.
> OutConnector ve InConnector sınıfları generic yapıdadır, kullanıcı istediği tipler ile çalışabilir. (Primitive, OpenCV ve PCL veri tipleri ile test edilmiştir.)
> Source code tamamiyle kullanıma ve optimizasyona açıktır. Kullanıcı istediği implementation dosyasını kendine göre düzenleyebilir.

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Cevapla

Etiketler
pipemill


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık