4 milyar if ifadesi
- Yakın zamanda sosyal medyayı incelerken trende bu ekran görüntüsüne rastladım.
- Bu kod, zaman-bellek ödünleşiminin kusursuz bir örneği.
- Performansı artırmak için bunu C dilinde uygulamak istedim.
Kod yapısı
- C dilinde çift ve tek sayıları ayırt eden bir kod yazdım.
- Optimizasyonları devre dışı bırakarak derledim.
- 0'dan 10'a kadar olan sayılarda düzgün çalışıyor, ancak daha büyük sayılarda sorun çıkıyor.
Meta programlama
- Python kullanarak if ifadelerini meta programlama ile ürettim.
- 8 bit tamsayılar için çift ve tek ayrımı yapan bir program oluşturdum.
16 bit genişletme
- Aynı yöntemi 16 bit tamsayılar için genişlettim.
- Yaklaşık 130 bin satırlık bir C dosyası üretip derledim.
32 bit meydan okuması
- Programı 32 bit tamsayılar için genişletmeye çalıştım.
- 330 GB boyutunda bir C dosyası ürettim, ancak derleyici yetersiz heap alanı nedeniyle başarısız oldu.
- Portable Executable biçiminin sınırları nedeniyle 4 GB'tan büyük dosyalar işlenemiyor.
Makine kodunu doğrudan yazma
- IsEven fonksiyonunu doğrudan x86-64 assembly dilinde yazdım.
- Python kullanarak makine kodunu elle derledim.
Çalıştırılabilir dosya oluşturma
- Tüm 32 bit tamsayılar için çift ve tek ayrımı yapan 40 GB boyutunda bir dosya oluşturdum.
- Dosyayı belleğe map edip kodu bir fonksiyon işaretçisiyle çalıştırdım.
Son hata düzeltmesi
- İşaretsiz tamsayı ayrıştırma sorununu çözmek için
strtoul fonksiyonuna geçtim.
- Program çok hızlı çalışıyor ve büyük sayılarda bile 10 saniyenin altında sonuç döndürüyor.
GN⁺ görüşü
- Önemi: Bu yazı, programlamanın temel kavramlarından biri olan zaman-bellek ödünleşimini anlamaya yardımcı oluyor. Ayrıca optimize edilmemiş kodun gerçek performans üzerindeki etkisini gösteren iyi bir örnek.
- İlgi çekiciliği: Programlama dilleri arasındaki performans farklarını ve derleyicilerin sınırlarını deneysel olarak keşfetme süreci ilgi çekici. Özellikle Python ve C dilini karşılaştırarak performansı artırma çabası eğlenceli.
- Ders: Bu yazı, karmaşık problemleri çözmek için bazen verimsiz görünebilen yaklaşımların aslında faydalı olabileceğini gösteriyor. Ayrıca bilgisayar biliminde yaratıcı çözümler aramanın önemini vurguluyor.
1 yorum
Hacker News görüşleri
Birinci yorum özeti:
İkinci yorum özeti:
for loopile çözülebilecek bir örnek sunulması.Üçüncü yorum özeti:
is-evenveis-oddnpm paketleri hakkında bir şaka.npm installkullanılırsa 40 GB boyutunda bir paketin indirileceğini hayal etmesi.Dördüncü yorum özeti:
Beşinci yorum özeti:
Altıncı yorum özeti:
Yedinci yorum özeti:
Sekizinci yorum özeti:
Dokuzuncu yorum özeti:
libdividekütüphanesi örneğiyle, 8 bit tamsayı bölmesini lookup table ile değiştirdiği deneyimini paylaşması.Onuncu yorum özeti: