Thread overview
DMD ve LDC ile Derleme Arasında Farklar Neler
Oct 23, 2021
Salih Dincer
Oct 23, 2021
Ferhat Kurtulmuş
Oct 23, 2021
Ali Çehreli
Oct 24, 2021
Salih Dincer
Oct 24, 2021
Ali Çehreli
Oct 24, 2021
Salih Dincer
Oct 24, 2021
Ali Çehreli
Jan 05, 2022
Salih Dincer
Jan 06, 2022
Ali Çehreli
October 23, 2021

Merhaba,

Hızlı çalışan ve iyi optimize edilmiş bir D Projesi üzerine çalışıyorum. Derleme sonucunda öyle MB'larca yer kaplayan bir binary dosya istemiyorum. Bu yüzden kodlamada gereken iyileştirmeleri yapmama rağmen, DMD'nin 2 MB. sınırına (aslında tam olarak 1991688 byte) yanaştığını gördüm...

import ettiklerim sadece bu kadar:

import arsd.simpledisplay;
import std.algorithm;
import std.random;

Optimize (-O) ederek derlemeye çalıştıysam da dosya boyutu (2012176 byte) küçülmek yerine büyüdü, neden acaba? Üstelik -betterC de kullanamıyorum çünkü Adam'ın modülleri buna imkan vermiyor:

arsd/color.d(140):
Error: `TypeInfo` cannot be used with -betterC

Ben de LDC deneyim dedim! Sonuç (4'de 1 katı) muazzam:

pico@enpi:~/Belgeler$ ldc2 -O -of"axial.out" axial.d arsd/color.d arsd/simpledisplay.d && ls -l --b=K  axial.out | cut -d " " -f5
469K
pico@enpi:~/Belgeler$ ldc2 -version
LDC - the LLVM D compiler (1.24.0):
  based on DMD v2.094.1 and LLVM 11.0.1
  built with LDC - the LLVM D compiler (1.24.0)
  Default target: x86_64-pc-linux-gnu
  Host CPU: ivybridge

O yüzden sormak istedim; LDC kullanırsam (en azından proje sonunda) bana bir eksisi olur mu? DMD'nin (build v2.097.2) proje geliştirme sırasında avantajlarının farkındayım ama LDC ile arasındaki önemli olabilecek farklarını merak ediyorum.

Vee tabiiii, -O parametresi LDC'de çalışırken DMD'de neden çuvallamış olabilir?

Teşekkürler...

October 23, 2021

On Saturday, 23 October 2021 at 09:39:10 UTC, Salih Dincer wrote:

>

Vee tabiiii, -O parametresi LDC'de çalışırken DMD'de neden çuvallamış olabilir?

Teşekkürler...

DMD ile derlerken "-O" ya ek olarak -O -release -inline -boundscheck=off denenebilir. Gerçi -inline ve -boundscheck=off hız ile ilgili optimizasyonlar. belki -release dosya boyutunu azaltabilir.

https://dlang.org/dmd-windows.html#switch-O

>

O yüzden sormak istedim; LDC kullanırsam (en azından proje sonunda) bana bir eksisi olur mu? DMD'nin (build v2.097.2) proje geliştirme sırasında avantajlarının farkındayım ama LDC ile arasındaki önemli olabilecek farklarını merak ediyorum.

LDC'nin dplug gibi ticari boyutu olan projelerde kullanıldığını biliyorum.

October 23, 2021
On 10/23/21 2:39 AM, Salih Dincer wrote:

> Hızlı çalışan ve iyi optimize edilmiş bir D Projesi üzerine çalışıyorum.
> Derleme sonucunda öyle MB'larca yer kaplayan bir binary dosya
> istemiyorum.

Linux üzerindeysen:

$ strip deneme

Sembolleri programdan çıkartır. Rasgele bir deneme yaptım: 800K'dan 550K'ya indi.

> import ettiklerim sadece bu kadar:
> ```d
> import arsd.simpledisplay;
> import std.algorithm;
> import std.random;
> ```

Bütün modülü değil, sembolleri isimle eklersen hem daha çabuk derler hem daha küçük olur(abilir):

import std.stdio: writeln;

> Optimize (```-O```) ederek derlemeye çalıştıysam da dosya boyutu
> (```2012176 byte```) küçülmek yerine büyüdü

Eniyileştirme yöntemlerinden birisi, işlevleri "inline etmektir". O da programı büyütür. (gcc'nin küçültmeye yönelik eniyileştirme seçenekleri de var ama dmd'de yalnızca -O.)

> LDC kullanırsam (en azından proje sonunda) bana
> bir eksisi olur mu?

Tam tersine: LDC, dmd'den kat kat üstün bir derleyici:

- dmd'nin ön tarafı (front end) D'ciler tarafından geliştirilir, arka tarafı da öyle.

- LDC'nin ön tarafı dmd'nin ön tarafıdır ama arka tarafı, senelerdir geliştirilmekte olan (ve D ile özel bir ilgisi olmayan) çok üstün LLVM'dir.

LDC daha uzun sürede derler ama ürettiği program daha hızlıdır. Hatta, profile guided optimization, link time optimization vs. gibi üstünlükleri de kullanılabilir.

> DMD'nin (build v2.097.2) proje geliştirme sırasında
> avantajlarının farkındayım

dmd'nin avantajları:

- Hep son sürüm

- Hızlı derleme

> ama LDC ile arasındaki önemli olabilecek
> farklarını merak ediyorum.

LDC'nin avantajları:

- dmd'nin bir iki sürüm gerisinden gelebilir (aynı günde güncellendiği bile olmuştur)

- Yalnızca X86 için değil, LLVM'in desteklediği her platform için kod üretir.

- Ürettiği kod dmd'den daha hızlıdır

> Vee tabiiii, -O parametresi LDC'de çalışırken DMD'de neden çuvallamış
> olabilir?

LLVM yüzlerce programcı tarafından senelerdir geliştirilmekte olan bir derleyici; dmd, Walter Bright'ın yazdığı kodları kullanan ve yavaş yavaş geliştirilen bir derleyici. Ayrıca, D dünyasında başka sorunlar öncelikli olduğundan kimse eniyileştirmeye önem vermiyor.

LDC'yi övdük ama gdc'yi de unutmamak gerek: Onun ürettiği programlar da çok hızlı çalışır çünkü o da GCC'nin arka tarafından ve başka güzelliklerden yararlanır.

Ali


October 24, 2021

On Saturday, 23 October 2021 at 22:47:45 UTC, Ali Çehreli wrote:

>

On 10/23/21 2:39 AM, Salih Dincer wrote:>
Sembolleri programdan çıkartır. Rasgele bir deneme yaptım: 800K'dan 550K'ya indi.

Bu açıkladıklarınızın bir kısmını (belki çok temeldir) ilk defa okuyorum! Strip'i unutmuşum ama denedim. Programın son hali (LDC2 ve -O ile):

Orj.: 642.952KB
Str.: 461.240KB
Dif.: 181.712KB (~40%)

>

LDC daha uzun sürede derler ama ürettiği program daha hızlıdır. Hatta, profile guided optimization, link time optimization vs. gibi üstünlükleri de kullanılabilir.

Diğer üstünlüklerini örnek bulursam deneyeceğim. Dediğiniz gibi -O ile derleme süresi uzadığı gibi laptopun fanı hızlanmaya başlıyor :)

>

dmd'nin avantajları:

  • Hep son sürüm
  • Hızlı derleme

Bu durumda proje geliştirme aşamasında DMD ve yayınlama sırasında LDC gibi duruyor; tabi son sürüm özellikler kullanılmadıysa.

>

LDC'yi övdük ama gdc'yi de unutmamak gerek: Onun ürettiği programlar da çok hızlı çalışır çünkü o da GCC'nin arka tarafından ve başka güzelliklerden yararlanır.

Aslında front-end özellikler ile daha çok ilgileniyorum. İşin mutfak kısmı aklımın alamayacağı kadar karışık olmalı. Hele ki GPU'ların hakim olduğu şu dünyada (Kripto Para Madenciliği'nde kullanıldığına göre) makine dilinde inanılmaz iyileştirmeler var. Özellikle bir grafik hesaplanırken yazacağımız en akıllı kod bile geride kalabilir!

S.Dinçer

October 24, 2021
On 10/23/21 10:07 PM, Salih Dincer wrote:

> Bu durumda proje geliştirme aşamasında DMD ve yayınlama sırasında LDC
> gibi duruyor

Doğru karar. :) Bildiğim kadarıyla profesyonel olarak kullananlar da öyle yapıyor.

Ali


October 24, 2021

On Saturday, 23 October 2021 at 22:47:45 UTC, Ali Çehreli wrote:

>

On 10/23/21 2:39 AM, Salih Dincer wrote:>
Sembolleri programdan çıkartır. Rasgele bir deneme yaptım: 800K'dan 550K'ya indi.

Bu açıkladıklarınızın bir kısmını (belki çok temeldir) ilk defa okuyorum! Strip'i unutmuşum ama denedim. Programın son hali (LDC2 ve -O ile):

Orj.: 642.952KB
Str.: 461.240KB
Dif.: 181.712KB (~40%)

>

LDC daha uzun sürede derler ama ürettiği program daha hızlıdır. Hatta, profile guided optimization, link time optimization vs. gibi üstünlükleri de kullanılabilir.

Diğer üstünlüklerini örnek bulursam deneyeceğim. Dediğiniz gibi -O ile derleme süresi uzadığı gibi laptopun fanı hızlanmaya başlıyor :)

>

dmd'nin avantajları:

  • Hep son sürüm
  • Hızlı derleme

Bu durumda proje geliştirme aşamasında DMD ve yayınlama sırasında LDC gibi duruyor; tabi son sürüm özellikler kullanılmadıysa.

>

LDC'yi övdük ama gdc'yi de unutmamak gerek: Onun ürettiği programlar da çok hızlı çalışır çünkü o da GCC'nin arka tarafından ve başka güzelliklerden yararlanır.

Aslında front-end özellikler ile daha çok ilgileniyorum. İşin mutfak kısmı aklımın alamayacağı kadar karışık olmalı. Hele ki GPU'ların hakim olduğu şu dünyada (Kripto Para Madenciliği'nde kullanıldığına göre) makine dilinde inanılmaz iyileştirmeler var. Özellikle bir grafik hesaplanırken yazacağımız en akıllı kod bile geride kalabilir!

S.Dinçer

October 24, 2021
On 10/24/21 7:21 AM, Salih Dincer wrote:

Bu mesajı ikinci kere aldık çünkü birincisi "spam filter"a takılmış. Şimdi geçti. :)

Ali


January 05, 2022

On Saturday, 23 October 2021 at 22:47:45 UTC, Ali Çehreli wrote:

>

Eniyileştirme yöntemlerinden birisi, işlevleri "inline etmektir". O da programı büyütür. (gcc'nin küçültmeye yönelik eniyileştirme seçenekleri de var ama dmd'de yalnızca -O.)

Şu başlıktan anladığım kadarıyla D'de bunu yapamıyoruz!

https://forum.dlang.org/post/xqozmqbaevhdtxrvxdne@forum.dlang.org

Peki statik öğleri (template'ler, mixin ve static kullanılabilir her şeyi) kullanmak programımızın çalışma hızını artırır mı? Bunun yanında derleme zamanı ve executable dosya boyutu artıyor bu sefer, değil mi?

Mesela şöyle deli bir modül hız açısından akıllıca mı:

http://ocean.dpldocs.info/source/ocean.text.UnicodeData.d.html

Teşekkürler...

January 05, 2022
On 1/5/22 9:10 AM, Salih Dincer wrote:
> On Saturday, 23 October 2021 at 22:47:45 UTC, Ali Çehreli wrote:
>>
>> Eniyileştirme yöntemlerinden birisi, işlevleri "inline etmektir". O da
>> programı büyütür. (gcc'nin küçültmeye yönelik eniyileştirme
>> seçenekleri de var ama dmd'de yalnızca -O.)
>
> Şu başlıktan anladığım kadarıyla D'de bunu yapamıyoruz!

Tabii ki D'de de yapıyoruz. LLVM'in ve GCC'nin arka tarafları, eniyileştirmeleri dilden bağımsız olarak yaparlar. Başka diller için ne varsa, D için de var. (ldc LLVM'i kullanır, gdc de GCC'nin parçasıdır.)

> https://forum.dlang.org/post/xqozmqbaevhdtxrvxdne@forum.dlang.org

Orada, dmd'nin eniyileştirmeleriyle tanınmış bir derleyici olmadığını söylemek istiyor.

> Peki statik öğleri (template'ler, mixin ve static kullanılabilir her
> şeyi) kullanmak programımızın çalışma hızını artırır mı?

Evet ve hayır. :) Arttırsa bile etkisi ölçülemeyecek kadar az olabilir. O yüzden, ölçmeden bilinemez.

> Bunun yanında
> derleme zamanı ve executable  dosya boyutu artıyor bu sefer, değil mi?

İkisi de doğru.

> Mesela şöyle deli bir modül hız açısından akıllıca mı:
>
> http://ocean.dpldocs.info/source/ocean.text.UnicodeData.d.html

Gerçekten, ölçmeden bilinemez.

Ama kütüphane yaparken olabildiğince hızlı işleyen tasarımlar düşünülür. O yüzden, bence derleme süresi o durumda ikinci planda kalmalı.

Ali