Tag

featured

Browsing

C++ Derleyicilerinde Optimizasyon: 2 – Compile Flag’leri Derlenebilen dillerin bir çoğunda derleme zamanı problemleri yaşanmaktadır. C++ özellinde incelediğimiz zaman, proje büyüdükçe derleme zamanı geliştiriciler için çok büyük zaman kayıplarına yol açmaktadır. Hatta sadece compile-time’ı düşürmek için çalışan şirketler mevcuttur. Özellikle oyun endüstrisinde ortaya çıkan ürünlerin büyüklükleri yüzünde bu işlem oldukça vakit alır. Increbuild gibi şirketler bu işlemleri daha hızlı hale getirecek teknolojiler geliştirmektedir. Ben ise bu yazıda GCC üzerindeki optimizasyon flag’lerinden bahsetmeye çalışacağım. Optimizasyon işlemi için compiler’lar kendi içlerinde flag’ler barındırır. Bu flag’ler ile çeşitli seviyelerde optimizasyon işlemi gerçekleştirmeniz mümkündür. GCC üzerinde optimizasyon işlemleri “-O” flag’i ile gösterilir ve optimizasyon seviyesine göre yanına farklı parametreler alır. -O ile başlayan optimizasyon işlemleri aslında -f ile başlayan ve spesifik olarak kontrol edilecebilecek…

Agile yazılım geliştirme denildiği zaman akla ilk olarak Scrum metodolojisi gelmektedir. Bu yazımda da Scrum içerisinde yer alan ve birçok takım tarafından atlanan bir yapı olan Sprint Demo’dan bahsedeceğim. Scrum metodolojisi yazılım ekipleri için bir çok fayda sağlamaktadır. Scrum takımların geliştirme hızını artırır ve müşterilerin isteklerine daha hızlı ve güvenilir şekilde cevap verilmesine yardımcı olur. Bunları sağlarken de bazı adımlarını uygulamanızı bekler. Bu yazı içerisinde uzun uzun backlog, product owner vb. kavramlardan tek tek bahsetmeyeceğim, yazının konusu gereği Sprint ve Sprint Demo nedir ondan bahsedeceğim. Sprint Nedir? İlk olarak, Sprint, Scrum içerisindeki iş parçalarının belirli periyotlara bölünerek takip edilmesinin sağlandığı yapıya verilen isimdir. Ürün geliştirilirken hazırlanmış olan backlog’lar (iş parçaları) genellikle 1-4 hafta arasında belirlenen süreler içerisinde tamamlanacak şekilde iş…

Derleyiciler, yazdığımız yüksek seviyeli kodları bilgisayarların veya mikroişlemcilerin rahatça çalıştırabilmesi için makine kodlarına dönüştürmeye yarayan, bu dönüşüm işlemi esnasında da çeşitli optimizasyon işlemleri sayesinde sistemden maksimum verim elde etmeyi amaçlayan araçlardır. Arkaplanda çalışan sistemleri karışık olduğu için genelde es geçilir ancak derleyicilerin bize sağladığı optimizasyon seviyeleri kadar bizim de yapmamız gereken bazı optimizasyon işlemleri vardır. Bu yazı serisinde derleyicinin otomatik olarak yaptığı optimizasyonlardan ve geliştiricinin yapabileceği optimizasyonlardan bahsediyor olacağım. Geliştirici gözüyle bakıldığı zaman derleyiciler tüm işlemleri otomatik olarak yapıyor olarak görünür. Örneğin; GCC derleyicisinde derleme işlemi sırasında kullanabileceğiniz optimizasyon flag’leri (bazı kelimelerin direkt Türkçe çevirisinin anlamlı olmayacağını düşündüğüm için İngilizce karşılığını kullanmayı tercih ediyorum.) vardır. Onlar sayesinde kodunuzu hangi seviyede optimize etmek istediğinizi ayarlayabilirsiniz. Her zaman maksimum optimizasyon flag’ini kullanmak…

Yazdığımız kodlar içerisinde birçok uyarı ve hata ile (“warning” ve “error”) karşılaşırız. Kullandığımız derleyiciler bu uyarı ve hataları derleme sırasında bizim için ortaya çıkartır ve buna bağlı olarak düzeltilmesi gereken yerlerde bu düzenlemeleri yaparız. Birçok derleyici bunu kendi içerisinde yaparken harici olarak yapılma ihtiyacı olan durumlar da olmaktatır. Bu işleme statik analiz adı verilir. Statik analiz işlemini gerçekleştirmek için de birçok araç mevcuttur. Bu yazımda CppCheck aracı ile nasıl statik analiz yapabileceğimiz hakkında bilgi vermeye çalışacağım. Statik Analiz Statik analiz, kodu derlemeden (yani pre-compile) tespit edilebilecek hataları tespit ederek bunları düzeltmemize olanak tanır. Bu sayede oluşabilecek bug’ları erken dönemde tespit etmeye ve tanımlanmamış davranışları ve tehlikeli kod yapılarını (undefined behaviour ve dangerouscoding constructs) tespit etmeye odaklanır. Aşağıda kullanabileceğiniz bazı statik…

DPDK ile ilgili hazırlamış olduğum bir sunum sırasında Türkçe içerik eksikliğini görerek, aldığım notları derlediğim bir içerik oluşturmak istedim. Benim de içerisine yeni dahil olduğum bir yapı olduğu için vereceğim bilgiler tecrübelerden daha çok araştırdığım yabancı kaynakların derlenmesi sonucu ortaya çıkmış oldu. Bazı terimlerin Türkçe karşılığı anlamsız kaldığı için ve bu alanla ilgilenen insanların halihazırda bu terimleri bildiğini varsaydığım için İngilizce olarak kullandım. Kısaca DPDK’nın tarihinden bahsederek başlamak istiyorum. Data Plane Development Kit yani DPDK, 17 Eylül 2010’da BSD (Berkeley Software Distribution) lisansı ile yayınlandı. 2013 Nisan’dan itibaren dpdk.org üzerinde tamamen bağımsız ve kendi topluluğu olan bir hal aldı. Mikroişlemci üreticileri ve mimari geliştiriciler tarafından da desteklenerek projenin büyümesi hızlandırıldı. Günümüzde ise Linux Foundation tarafından destekleniyor. DPDK’nın amaçladığı ana iş…