3 puan yazan GN⁺ 2023-12-29 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2023-12-29
Hacker News görüşleri
  • Birinci yorum özeti:

    • 1996'da, 16 yaşındayken yazdığı ilk programla ilgili bir anı.
    • Doğrusal cebir kitabının bilgisayar grafikleri ekini görüp dönen wireframe çizen bir programa takıntılı hale gelmesi.
    • Dizileri bilmediği için değişkenleri hardcode etmesi ve dönüş matrisi öğelerini de değişken olarak tanımlaması.
    • Pointer bildiği için ekrana çizim yapmak amacıyla bellek adreslerine doğrudan yazması.
  • İkinci yorum özeti:

    • Kod üretimiyle karmaşık bir yaklaşım yerine basit bir for loop ile çözülebilecek bir örnek sunulması.
  • Üçüncü yorum özeti:

    • is-even ve is-odd npm paketleri hakkında bir şaka.
    • npm install kullanılırsa 40 GB boyutunda bir paketin indirileceğini hayal etmesi.
  • Dördüncü yorum özeti:

    • Çift ve tek sayıları sınıflandırmak için veritabanı kullanılmasını önermesi.
    • Sayıları ve sınıflarını SQLite veritabanında eşleyerek programı güncellemeye gerek kalmayacağını söylemesi.
  • Beşinci yorum özeti:

    • Yazının çok eğlenceli olduğunu değerlendirmesi.
    • ChatGPT'nin öğrenebilmesi için kaynak kodunun internette yayımlanması gerektiği görüşü.
  • Altıncı yorum özeti:

    • Dağıtık bir sürüm fikri önermesi.
    • Her host'un kendi domain adıyla eşleşip eşleşmediğini kontrol edip sonucu döndürmesi yaklaşımı.
  • Yedinci yorum özeti:

    • Bu teknolojinin AWS'ye satılıp AWS EvenOrOdd API olarak sunulmasını önermesi.
    • Bulutun gücü kullanılırsa programın daha da güçlü olacağı görüşü.
  • Sekizinci yorum özeti:

    • 40 GB'lık komutun 800 MB/s * 10 saniyelik disk okuma hızıyla nasıl işlendiğini sorgulaması.
    • OS seviyesinde akıllı caching veya CPU'nun komutları atlayan optimizasyonları olabileceğini tahmin etmesi.
  • Dokuzuncu yorum özeti:

    • Maliyetli işlemlerden kaçınmak için lookup table kullanma tekniğini açıklaması.
    • libdivide kütüphanesi örneğiyle, 8 bit tamsayı bölmesini lookup table ile değiştirdiği deneyimini paylaşması.
  • Onuncu yorum özeti:

    • Binary search kullanan bir optimizasyon önermesi.
    • İç içe if-else blokları kullanarak O(logN) zaman karmaşıklığıyla çalıştırma yöntemine dair bir şaka.