Daha Hızlı Çalışan Uygulama Geliştirmek

Acoupotan

Forum Üyesi
22 Eyl 2022
166
0
0
Egypt
DAHA HIZLI ÇALIŞAN UYGULAMA GELİŞTİRMEK


Merhaba,

Bu yazıda Delphi ile kod yazarken hız konusunda dikkat edilmesi gereken hususlara değinmek istedim.

Maalesef delphi optimizasyon konusunda çok iyi sayılmaz. clang ve gcc delphi'nin çok ötesinde optimizasyon yapıyorlar. Bu nedenle mümkün mertebe yazdığımız koda özen göstermeliyiz.

Hızlı çalışan bir uygulama yazmak istiyorsak fonksiyon ve prosedürlerimize inline direktifini ekleyebiliriz. Hemen belirteyim ki inline direktifi fonksiyon ve prosedürün çağırıldığı yere otomatik olarak fonksiyonu alır. Aslında burada fonksiyon ya da prosedür çağırılmamakta text replace edilmektedir. Inline olmayan fonksiyonların çağırılması işlemin yapılmasını yavaşlatmaktadır. Bu nedenle inline fonksiyon ve prosedürler kullanılmasında yarar vardır. Ancak, inline fonksiyon ve prosedürler text replacement olduğu için kodun şişmesine de neden olmaktadır. Seçiminizi yapın: Hız mı, boyut mu?

Bununla birlikte x64 platformda program yazıyorsanız eğer fonksiyon ve prosedürlerinizin 4 parametreden fazla olmamasına dikkat edin. Çünkü ilk 4 parametre işlemci registerlerinden soldan sağa sırasıyla RCX, RDX, R8 ve R9'a kaydedilier. Doğrudan registerlarla işlem yapıldığı için hız konusunda bir hayli avantaj sağlamaktadır. 4'den fazla olan parametreler stack'e kaydedilecektir. Stack alanı RAM'de tutulduğu için registerlardan çok daha yavaş olacaktır. Peki diyelim ki fonksiyonunuz 4 parametreden fazla. Bu durumda ne yapabilirsiniz? Tabi ki record yapmalısınız. Fonksiyon parametreleriniz fazlasıyla mümkün mertebe parametreleri içinde barındıran bir record kullanın.

Mümkün mertebe global değişken kullanmayın. Diğer sakıncaları ayrı olmak üzere global değişkenlerin hız konusunda da olumsuz etkileri bulunuyor. Çünkü global değişkenler RAM'in stack bölgesinde yer almamaktadır. RAM'in en hızlı depolama alanı stack bölgesidir. Ayrıca değişkenlerinizi mümkün mertebe static olarak kullanmanızda hız bakımından fayda var.

Değişkenleri genelde local olarak prosedür ya da fonksiyonların var bölgesinde tanımlamakta fayda var. Çünkü local değişkenler RAM'in stack bölgesinde yer almaktadır. Ancak pointer değişkenler kullanılarak allocmem ya da getmem kullanılarak alan oluşturulacaksa bu alan heap bölgesinde yer alacaktır. Heap bölgesi stack bölgesine göre çok daha yavaştır. Programınızda stack bölgesinin fazla olması durumunda da stack alanınız yetmeyecektir. Gerçi stack alanını proje ayarlarından arttırabilirsiniz. Tabi ki sabit tanımlamanız mümkünse değişken tanımlamaktan kaçının.

Değişkenleriniz buna uygunsa mümkün mertebe SIMD kullanın. SIMD'nin anlamı Single Instruction, Multiple Data'dır. Yani Bir işlemle çoklu veri işleme anlamına geliyor. SSE2, AVX, AVX2 ve AVX512 SIMD'nin türleridir. SSE2 128 bit (16 byte), AVX-AVX2 256 bit (32 byte) ve AVX512 512 bit (64 byte) veriyi tek seferde hızlı bir şekilde işlemektedir. 64 bit işlemciler kural olarak tek seferde 64 bit (8 byte) veri işleyebilmekteyken SIMD ile bilgisayarınız sanki 128 bit, 256 bit ve 512 bit işlemcili bilgisayarmış gibi veri işleyebilirsiniz. Bunun için hazır kütüphaneler de var. Örneğin FastMM4 ve FastMM5. Tabi bu kütüphanelerin kullanımını iyi bilmekte fayda var.

Şayet çok kanallı uygulama yapıyorsanuz threadlerin fazla olması performansı önemli derecede düşürecektir. Birden fazla clientın bağlandığı bir serverda her client için bir thread oluşturursanız thread sayısı arttıkça server çalışamaz hale gelebilir. Bunun için thread oluşturulması gereken yerleri iyi seçmek gerekiyor.

Sonsuz döngülerde işlemcinin çalışma yoğunluğunun artması söz konusu olabilir. Hatta birden fazla thread söz konusu ise bu daha da çekilmez hale gelebilir. Bu sorunu Döngü içinde Sleep fonksiyonunu kullanarak halledebilirsiniz. 1 miliseconds thread'i uyutmanız yeterli dahi olabilecektir. Thread'e nefes aldırmakta fayda var.

Küçük stringler kullanıyorsanız eğer delphi'nin shortstring'ini kullanmanızı öneririm. Ayrıca stringlerde performans elde etmek istiyorsanız mümkün mertebe stack üzerinde stringlerinizi tanımlayın. Heap bölgesinde yer alan stringlerde sürekli işlem yapılırken stack'e göre önemli bir hız kaybı olmaktadır. Ancak daha önce de dediğim gibi stack bölgesinin şişmesi durumunda programınız hata verecektir. Bu durumda ya stack alanınızı arttıracaksınız, ya da değişkenlerinizi heap bölgesine almaya çalışacaksınız.

Faydalı olması dileğiyle.

Hakan DİMDİK
*
*
*
*
 

Genel Forum

Türkçe Forum Siteleri

İnternette bilgi paylaşımı ve tartışma ortamı arayanlar için forum siteleri uzun yıllardır popüler bir tercih olmuştur. Her yaştan ve ilgi alanından kullanıcıya hitap eden genel forum siteleri, teknoloji, oyun, kültür ve daha pek çok konuda geniş içerik sunmaktadır. Bu platformlar, katılımcıların hem öğrenme hem de eğlenceli vakit geçirme ihtiyaçlarını karşılamaktadır.

Genel Forum Sitesi

İnternette Türkçe forumlar üzerinden içerik paylaşmak, dil bariyerini ortadan kaldırarak yerel kültüre uygun bir deneyim sunar. Türkçe forum siteleri, kullanıcıların bilgiye kolayca ulaşabileceği, aynı zamanda sosyal ve eğlenceli paylaşımlar yapabileceği platformlar oluşturur. Türkiye'deki internet kullanıcıları için bu forumlar, ilgi çekici konularda derinlemesine sohbetler sunar.

Genel Forum Siteleri

Günlük hayatın stresinden uzaklaşmak isteyenler için eğlenceli forumlar, keyifli bir alternatif sunar. Farklı hobilere ve ilgi alanlarına yönelik içeriklerle dolu olan bu forum paylaşım siteleri, kullanıcılarına samimi bir ortamda vakit geçirme fırsatı sunarken, aynı zamanda yeni insanlarla tanışma imkanı da sağlar. Eğlenceli paylaşımlar ve interaktif etkinliklerle dolu olan bu platformlar, hem öğrenmeyi hem de keyifli vakit geçirmeyi bir arada sunar.

İnternette yeni bir topluluk arayan ya da bilgi alışverişi yapmak isteyenler için genel forum siteleri harika bir başlangıç noktasıdır. Geniş bir kullanıcı kitlesine hitap eden Türkçe forumlar, herkesin ilgisini çekecek konularla doludur. Siz de bu platformlara katılarak, kendi ilgi alanlarınıza uygun başlıklarda sohbetlere katılabilir ve katkıda bulunabilirsiniz. 

Not : Lütfen Çekim Paylaşım Forumları için sitemizi kullanmayın.

Üst