Forum: Ders Arası RSS
Kod performansını ölçmek
Kadir Can #1
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Kod performansını ölçmek
Biliyorum,aslında gereksiz bir soru soruyorum.Fakat D dilini öğrenmeye başladığımdan beri performansa çok fazla önem verir oldum.Sizlere bir sorum olacak.
import std.stdio;
 
void main()
{
writeln("Bir şeyler");
}
şeklinde writeln'ın kullanılması mı daha performanslıdır?
import std.cstream;
 
void main()
{
writefln("Bir şeyler");
}
Şeklindeki mi daha performanslıdır?
Bu mesaj acehreli tarafından değiştirildi; zaman: 2010-07-01, 14:07.
canalpay (Moderatör) #2
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
import std.cstream;
 
void main()
{
writefln("Bir şeyler");
}

İlk önce bu çalışmaz. Nedeni dout'ı unutmuşsunuz :-)

dout.writefln(); olur.

Fakat D dilini öğrenmeye başladığımdan beri performansa çok fazla önem verir oldum.

Bende de performans hastalığı var sayılır. D dilinde performansı o kadar önemsemeyin. D C kadar hızlı(belkide daha hızlıdır. C'yi hiç bilmiyorum.) bir dil. Bu yüzden çok fazla yavaşlama olmayacaktır. Ayrıca python gibi yorumlanabilir dillerden farklı olarak derlenebildiği için eniyileştirme olanağı var olacaktır. Bu yüzden hız konusuna çok takılmaya gerek yok.

Sorunuza cevaben bir yanıtım yok. Belki aynı hızdadırlar. Belkide bir iki nanosaniye fark vardır ?

Ancak cstream modülü phobostan kaldırılabilir. Bu yüzden std.stdio kullanmak faydalıdır.
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
En iyisi denemek: :)

import std.stdio;
import std.date;
 
void formatlı()
{
    writefln("Bir şeyler");
}
 
void formatsız()
{
    writeln("Bir şeyler");
}
 
void main()
{
    auto sonuç = benchmark!(formatlı, formatsız)(10_000);
    writeln(sonuç);
}

Ali

Not: Hoşgörüne sığınarak konu başlığını değiştirdim. Başlık, konu içeriği ile ilgili olunca daha yararlı oluyor.
canalpay (Moderatör) #4
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu ile alakasız ancak cstream ile stream modülüde kaldırılırsa bomlu olarak nasıl yazacağız ?

Ben pek bu modüllerin kalkacağını sanmasamda kaldırmak istemelerinin nedeni sanırım phobosun şuanki kodcuları bunu yazmadığı için kaldırmak istiyorlar.
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlarını bilmediğim güzel sorular... :)

Kalkacaksa yerine daha iyisi veya daha uyumlusu gelecektir. Sanırım Phobos'a hızla eklenmekte olan aralık kavramı üzerine kurulu olur.

Ali
Kadir Can #6
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #3
Başlık önemli değil.Bence böyle daha uygun olmuş.

Yazdığınız kodu hemen deneyeceğim.

Kod sonuç olarak 3500 1500 yazdı ekranda.
Kadir Can #7
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #7
Evet.Bir daha çalıştırıyorum.
Bu nasıl bir şeydir?Şimdi de 38703 297 yazdı.
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Performans ölçümleri böyledir işte. :) Program, çalışma sırasında işletim sistemi tarafından her an durdurulabilir veya disk başka bir program için meşguldür, vs. Bu gibi etkiler, çok tekrar ile azaltılmaya çalışılır.

İşletim sistemi bilgisayar kaynaklarını her an daha önemli işler için ele geçirebileceği için beklenmedik sonuçlar doğabilir. Geçici etkileri önlemek için tekrar sayısını yüksek tutmak gerekir.

Öncelikle, benchmark'ın belgesinden anlaşıldığına göre sonuçlar, ona bildirilen işlem sıralarında ve mili saniye olarak geliyormuş. Yani 600 200 görürsek, formatlı() 600 mili saniyede tamamlanıyor, formatsız() 200 mili saniyede...

Programı biraz değiştirdim:

import std.stdio;
import std.date;
import std.conv;
 
void formatlı()
{
    writefln("Bir şeyler %s başka şeyler %s daha başka şeyler %s",
             42, "merhabalar", 1.2345);
}
 
void formatsız()
{
    writeln("Bir şeyler ", 42,
            " başka şeyler ", "merhabalar",
            " daha başka şeyler ", 1.2345);
}
 
void main(string[] parametreler)
{
    if (parametreler.length != 2) {
        stderr.writeln("Kullanım: ", parametreler[0], " <tekrar_adedi>");
        return;
    }
 
    auto tekrar = to!uint(parametreler[1]);
    auto rapor = benchmark!(formatlı, formatsız)(tekrar);
 
    stderr.writeln(rapor);
}

- Tekrar adedini artık komut satırından alıyor

- Çalıştırırken programın standart çıkışını bir dosyaya gönderirseniz, sonuç standart hata akımı olan stderr'e yazılıyor. Böylece bir de ekran satırlarının kaydırılmaları işlemleri ve onların getirdiği sonuç hataları olmuyor.

Standart çıktı örneğin Linux'ta /dev/nul'a gönderilebilir:

  ./deneme 1000000 > /dev/null

veya herhangi bir dosyaya gönderilebilir ve sonra o dosya elle silinebilir:

  ./deneme 100000 > beni_sil
  rm beni_SIL

Tabii o zaman da diske bağlı olunuyor. Diske yazmanın etkileri de sonucu etkileyecektir.

Windows'da da baştaki ./ yazılmadan oluyor galiba:

  deneme 100000 > beni_sil
  del beni_sil

Benden bir sonuç:

  ./deneme 1000000 > /dev/null
  2747 1989

Eğer derleyiciye -O seçeneğini vererek derlersem (yani en iyileştirme (optimizasyon) ile), beklendiği gibi bütün sonuçlar daha hızlı oluyor ama yine beklendiği gibi, oranları değişmiyor:

  ./deneme 1000000 > /dev/null
  2437 1786

Yani formatlı() olan, kabaca %25 daha yavaşmış.

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 19:54:24 (UTC -08:00)