Forum: Projeler trileri RSS
tr.string
Sayfa:  önceki  1  2  3  4  5  6  sonraki 
acehreli (Moderatör) #31
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 780
Evet, ?: işleci daha hızlı kod üretiyor. Ama temelde ve genelde buna yardım eden hiçbir şey olmadığına göre, ben bunu dmd'nin bir garipliği olarak kabul etmek zorundayım. Çünkü sonuçta ?:, if, ve switch; bu fonksiyonda hep iki durumdan birisini seçmeye yarıyorlar. Derleyicinin üçü için aynı kod üretmesini beklerdim.

Bu fonksiyonu 7-8 kat hızlandırmanın başka yolları varken %3-4 hız kazancına bakmaya henüz sıra geldiğini düşünmemiştim. ;)

Ali
canalpay (Moderatör) #32
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ı
acehreli:
Bu fonksiyonu 7-8 kat hızlandırmanın başka yolları varken %3-4 hız kazancına bakmaya henüz sıra geldiğini düşünmemiştim. ;)

Yani boşuna mı uğraşıyorum ? Kısaca fonksiyonu hızlıca yazayım sonra düzeltiriz demek oluyor herhalde. Ayrıca bu hızlandırma yöntemi nedir merak ettim doğrusu.
Evet, ?: işleci daha hızlı kod üretiyor. Ama temelde ve genelde buna yardım eden hiçbir şey olmadığına göre, ben bunu dmd'nin bir garipliği olarak kabul etmek zorundayım. Çünkü sonuçta ?:, if, ve switch; bu fonksiyonda hep iki durumdan birisini seçmeye yarıyorlar. Derleyicinin üçü için aynı kod üretmesini beklerdim.

Doğru söylüyor olabilirsiniz. Hatta keşke bunu sorabileceğimiz bir ortam olsa. Ama açıkca if varken ben switch'in sadece dilde başka bir olanak olsun diye yaratıldığına inanmıyorum. Ama dediğiniz doğru çünkü hızları aynı. Aslında teker teker switch ile ? : ve ifli hallerini derleyip notepad++ gibi editörle açmak lazım. Her ne kadar içeriği doğru göstermesede içerdiği şekiller farklı ise derleyici farklı şekiller aynı ise derleyici aynı derlemiştir.

Evet bu katlarca hızlandırma yolunu merak ediyorum. Phobos kütüphanesinin yazdığını tekrar yazmayacağız değil mi ? sonuçta teorik olarak öylede yapsak hız aynı olmalı.
acehreli (Moderatör) #33
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Sorun, sonuç dizgisinin uzunluğunun ~= ile adım adım arttırılmasından kaynaklanıyor. Dizginin şu andaki boyunun N olduğunu varsayarsak, ~= şöyle düşünüyor olabilir:

- bende N+1 için yer yok
- N+1'lik yer ayırayım
- elimde bulunan N tane karakteri yeni yere kopyalayayım
- verilen yeni karakteri de sonuna yazayım

O işlemler her karakter için tekrarlanıyor olabilir. (Aslında bir eniyileştirme de vardır belki ve akıllı olarak boyunu örneğin %75 arttırıyordur. Bilmiyorum.)

Şuna bir bak bakalım; fonksiyonun en başında bir kere:

çıkış.length = giriş.length;

O zaman çıkış için yeni yer ayırmaya hiç gerek kalmaz.

Ali
Avatar
esatarslan52 (Moderatör) #34
Üye Haz 2009 tarihinden beri · 142 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 775
Bu arada farkettimde müzik dinleyerek daha kolay kod yazıyorum :-) Sizde de öyle mi ?

Daha önce bir makalede programcılar için müzik dinlemenin kod yazımında iyi olmadığını okumuştum. Derin ve ayrıntılı düşünmeyi engellediğinden bahsediyolardı. Yazıyı bulursam burda paylaşırım.

string.d içinde Türkçe karakterlerde sorun çıkartan başka fonksiyon varmı?
canalpay (Moderatör) #35
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ı
acehreli:
- bende N+1 için yer yok
- N+1'lik yer ayırayım
- elimde bulunan N tane karakteri yeni yere kopyalayayım
- verilen yeni karakteri de sonuna yazayım

O işlemler her karakter için tekrarlanıyor olabilir. (Aslında bir eniyileştirme de vardır belki ve akıllı olarak boyunu örneğin %75 arttırıyordur. Bilmiyorum.)

Evet tamamen doğru tahmin etmişsiniz. Tek derleyici sandığınız kadar akıllı değilmiş. :-)   toupper_tr fonksiyonunu 1 milyon kere çağırırken bencmark şablonunun verdiği değer 35(saniye oluyor galiba) bin olurken 9(saniyeye) bine düştü.

Evet gördüğümüz gibi derleyicide ne kadar iyi olursa olsun sizin yerinizi tutmuyor :-)

 
çıkış.length = giriş.length;


Evet ama bunun yanında başka şeylerde eklemek gerekiyor. mesala ~= işleci biliyorsunuz sonuna ekliyor. O yüzden direk hatalı oluyor. O yüzden foreach 'in başına int i, ekleyip ~= olan satırı ise
çıkış[i]=büyükHarf;
ile değiştirdim. Şimdi hız testli olarak yolluyorum. Daha nasıl hızlandırırız bakarsınız. Hız testi deneme dosyasında. Hız testine tek toupper_tr'yi ekledim . 9 saniye beklersiniz artık.
esatarslan52:
string.d içinde Türkçe karakterlerde sorun çıkartan başka fonksiyon varmı?


Eğer yapamadığım olursa size söylerim. Şimdilik uni.d'de if kontrolü yerine ? : kullansanız daha iyi. Hızın farkedeceğini pek sanmıyorum ama hem okunabilirlik artar. Hemde phobos kütüphanesinde bile ? : işleci kullanılıyor. Onlarında bildikleri bir şey vardır bence.
Bu mesaj canalpay tarafından değiştirildi; zaman: 2009-09-17, 08:27.
canalpay (Moderatör) #36
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ı
capitalize fonksiyonu eklendi. 1 milyon kere çağrıldığında toupper'a göre 2 ile 3 saniye arasında yavaş çalışıyor. Ben açıkcası  1 ile 2 saniye arasında bir yavaşlama bekliyordum. Acaba kodları başka yerden çağırdığım için mi böyle oldu ? Ama derleyici aptal değil ya kodlar orada gibi iş yapar değil mi ? Yoksa yorumlanan diller hiç farkı kalmaz.

Şu dstring olayınıda iyiki yaptık. string devam etseydikde olurdu da yinede 10 satırdan daha az satırla yazdığım capitalize_tr fonksiyonunu kaç 30 satırda belki zor yazardım. Kod bakımı ve bana verdiği stres'te cabası.

Kodlara bakar daha nasıl hızlandırılır diye düşünürsünüz herhalde.

Konu Dışı

esatarslan52:
Daha önce bir makalede programcılar için müzik dinlemenin kod yazımında iyi olmadığını okumuştum. Derin ve ayrıntılı düşünmeyi engellediğinden bahsediyolardı. Yazıyı bulursam burda paylaşırım.


Evet olabilir hatta çoğu kişi ders çalışırken müzik dinler ama ben dinlemek istemem. Çünkü müzikle ders yapmaya alışınca müziksiz bir ortamda oldukça zorlanabiliyorsunuz yada en azından sınavda bir müzik dinlemek istiyor ve hafif dikatinizi bozuyor.(Gerçekten sınavlarda en ufak şey bile çok önemli. Dediklerimide sallamadım rehberlik servisinden öğrendim)

Ama programlamada benim için farklı. Derleyici hata verince hafif sinirleniyorum. Ama müzik insanın sinirini alıyor. Hatayı nerede yaptığınızı daha kolay buluyorsunuz. Birde bir anlığına can sıkıntısı yaşarsanız iki saniye kendinizi müziğe veriyorsunuz sonra tekrar kodlamaya dönüyorsunuz.
canalpay (Moderatör) #37
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ı
wiki:
capwords:
    s'nin bütün harfleri büyütülmüş, baştaki ve sondaki boşlukları silinmiş, ve aralardaki boşlukları tek boşluk karakteri ile değiştirilmiş olanını döndürür

Böyle yazıyor ama s'nin bütün harflerini büyültmüyor. Capitalize gibi ilk harfini büyütüyor. Hatta phobos kütüphanesinden stringinden capwords'a baktım ve orada da direk capitalize kullanıyor. Oraya acaba yanlış mı çevrilmiş. Bende phobos kütüphanesindeki gibi yapıyorum.
canalpay (Moderatör) #38
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ı
capwords fonksiyonunu phobos kütüphanesinden kopyalayıp yazdım. Şuan oldukça sağlam gözüküyor ama sonucu döndürürken bilmediğim bir işlemden geçiriyor. Hata verdiği için kaldırdım. Ama hata büyük ihtimalle fonksiyonun dahil olduğu modülü betiğe eklemediğim için oldu.

Kısaca assumeUnique ne işe yarıyor ? Galiba D'ye özel bir şey.

Siz cevap verene kadar yeni halini eklemiyorum.
acehreli (Moderatör) #39
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
derleyici sandığınız kadar akıllı değilmiş

Derleyiciler işlerini derleme zamanında yaparlar ve bitirirler. N+1 konusu, çalışma zamanında gelen dizginin uzunluğu ile ilgili olduğu için derleyiciler bu konuda bir şey yapamazlar.

Derleyici, gelen dizginin uzunluğundan bağımsız olarak hızlı kod üretmeyi hedefler, ama burada yaşadığımız olay algoritmayla ilgiliydi. Zaten bu yüzden kütüphanelerdeki string sınıfları (örneğin C++'nın std::string'i), boyunu arttırmak gerektiğinde hep %50 kadar arttırır. Nasıl olsa artmak gerekti, yine gerekir, diye... Daha sonradan %50 yerine, daha büyük bir oranda arttırmanın daha iyi olduğu da gösterilmiştir. Bu, belleğin etkin kullanımıyla ilgilidir ve tesadüfen de altın orana eşittir! :) Dizginin boyunun 1.61 katı olarak büyümesi gerekir...

Bu arada, bende 9 değil, 7.5 saniye bekliyor. ;)

Makefile'a hiz_testi diye yeni bir hedef ekledim. Artık normal geliştirme zamanımızdan yemeyecek ama kendimiz istersek make'i hiz_testi ile şöyle başlatacağız:

make hiz_testi

capwords, bir dizgi içindeki bütün kelimelerin yalnızca baş harflerini büyük yapar: "ddili    forum" -> "Ddili Forum".

assumeUnique, "tek olduğunu varsay" anlamındadır; bir fonksiyonun dış dünyaya "bu döndürdüğümün tek referansını size veriyorum, kendim içeride bir kopyasını tutmuyorum" demesiymiş.

std.contracts modülünde bulunuyor.

Biz de şimdiye kadar yazdığımız ve 'immutable' dizgi (örneğin dstring) döndüren bütün fonksiyonların sonunda bunu kullanabiliriz.

Ali
canalpay (Moderatör) #40
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ı
acehreli:
Bu arada, bende 9 değil, 7.5 saniye bekliyor. ;)

Bende şuan 7.2 saniye bekletti. Aradaki fark çok fazla. Nedeni büyük ihtimalle daha önce o fonksiyonu kullanan başka fonksiyon daha kullanmamdır.

acehreli:
Makefile'a hiz_testi diye yeni bir hedef ekledim. Artık normal geliştirme zamanımızdan yemeyecek ama kendimiz istersek make'i hiz_testi ile şöyle başlatacağız:

make hiz_testi

Ama ben make hiz_testi diye bakamıyacağım :-( code.google.com'da projemize issues mi ne ona ekledim. Yanlış bir şey mi yaptım bilmiyorum.

Birde denemeye debug aktif ederekte hız testini yaptırmasını sağlayabiliriz.
acehreli:
Biz de şimdiye kadar yazdığımız ve 'immutable' dizgi (örneğin dstring) döndüren bütün fonksiyonların sonunda bunu kullanabiliriz.


string'e ekliyorum. uni'yede ekleyim mi ?

Bu arada capwords 32 saniye sürdü. Aslında orjinal fonksiyonlarında hızlarına bakmamız gerek.
acehreli (Moderatör) #41
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
code.google.com'da projemize issues mi ne ona ekledim.

Ben de oraya yanıt yazdım. Bu forumda devam etmekle yanlış yapıyoruz aslında değil mi? :) trileri'nin bütün sohbetinin orada olması belki daha iyi olurdu.

Birde denemeye debug aktif ederekte hız testini yaptırmasını sağlayabiliriz.

Olabilir. dmd'nin kodun ne kadarının denendiğini ("cover" edildiğini) gösteren -cov diye bir seçeneği var. İleride onu da eklemek, bütün fonksiyonların bütün akış yollarının denendiğini de garanti edecek.

Ayrıca -profile diye bir seçeneği var. Normalde programın geçirdiği zamanın ne kadarının nerede harcandığı bilgisini verir ama dmd'ninkinin nasıl kullanıldığını henüz bilmiyorum.

-cov güzel bir çıktı veriyor ama...

Aslında orjinal fonksiyonlarında hızlarına bakmamız gerek.

İyi fikir. Aslında deneme.d, orijinalle bizimkinin farkının örneğin %bilmemKaç'tan fazla olmadığına bakmalı...

Ali
canalpay (Moderatör) #42
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ı
acehreli:
Ben de oraya yanıt yazdım. Bu forumda devam etmekle yanlış yapıyoruz aslında değil mi? :) trileri'nin bütün sohbetinin orada olması belki daha iyi olurdu.


Merak etmeyin sadece sizi haberdar etmek için yazdım. E-maile bakmıştım cevap yoktu. Bende benim gibi sizinde e-mailleri pek takip etmediğinizi sandım.

acehreli:
Olabilir. dmd'nin kodun ne kadarının denendiğini ("cover" edildiğini) gösteren -cov diye bir seçeneği var. İleride onu da eklemek, bütün fonksiyonların bütün akış yollarının denendiğini de garanti edecek.


Bu D de çok fazla geliştirmeyle ilgili özellik var. Herhalde c++ gibi orta yüksek seviyeli bir dilden geldiği için(Hiç de öyle değil. Geliştiricisi bile alçak seviyeli bir dil diyor. Bir altı assembler :-) Onun altı 1 0 1 0 0 11 ) hata denetimine çok önem veriyor. TAbii büyük projeler için çok iyi bir olanak.

acehreli:
İyi fikir. Aslında deneme.d, orijinalle bizimkinin farkının örneğin %bilmemKaç'tan fazla olmadığına bakmalı...


Yapmak lazım. Siz yaparsanız olur. Yapmazsanız ben yapmayı denerim. Ama söyleyim svn mi güncellemedim ama yinede bu deneme'yi sevmedim.
acehreli (Moderatör) #43
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu deneme'yi neden sevmedin? Hepimize her make dediğimizde büyük zaman kazancı sağlıyor. Bana 15 saniye kadar beklemek 4-5 kereden sonra dert olmasaydı bu değişikliği yapmazdım zaten. :)

Eğer geçerli bir neden varsa, bence değişiklik listesinde

  http://code.google.com/p/trileri/source/list

üzerine tıklayıp satır satır açıklamalarıyla 'negative' puan da verebilirsin.

Bunu wiki'ye eklemek gerek ama bilmeyenler vardır diye kısaca:

- yukarıdaki listedeki bir değişikliğe tık

- 'Affected files'ın altındaki satırlardan birisinin yanındaki diff'e tık

- yorum yapılacak satıra çift-tık (çok güzel yapmışlar :) Bizim kullandığımız Review Board da buna benzer şekilde çalışıyor)

- Save

- en sonunda Submit'e tıklamayı UNUTMAMAK

- ek olarak, bir önceki ekranın altındaki Positive (uygundur), Neutral (orta şekerli), Negative (uygun değildir)'lerden de birisini seçmek

Ali
canalpay (Moderatör) #44
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ı
Windowsta hız testine ve belgelere nasıl ulaşabilirim ? Komut satırına ne yazmam gerekiyor ?
acehreli (Moderatör) #45
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Makefile'daki hedefler şunlar:

birim_testler: dmd'yi -unittest ile başlatıyor ve deneme programını çalıştırıyor

belgeler: html isimli bir klasör içine trileri'nin belgelerini oluşturuyor

hepsi: belgeler ve birim_testler hedeflerini oluşturuyor

hiz_testi: deneme'yi hiz komut satırı seçeneği ile başlatıyor; böylece hız testleri çalışıyor

Hız testlerini çalıştırmak için şu komut:

make hiz_testi

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:
Sayfa:  önceki  1  2  3  4  5  6  sonraki 
Forum: Projeler trileri 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-08-23, 18:13:32 (UTC -07:00)