İşlemcinin anladığı veriler: Bitlerden vektörlere

Kerem Aydın·8 Temmuz 2026·⏱5 dk

İşlemci (CPU), donanımsal olarak üç ana veri kategorisini destekler: tamsayılar (adresleme ve mantık için), kayan noktalı sayılar (bilimsel hesaplamalar için) ve vektör paketleri (multimedyanın paralel işlenmesi için). Bu formatların anlaşılması yazılım optimizasyonu için kritiktir: yanlış veri türü seçimi programı katlayarak yavaşlatabilir veya yuvarlama hatalarına yol açabilir. Aşağıda, CPU'nun bilgiyi nasıl "gördüğü" ve bunun pratikte nasıl kullanılacağına dair detaylı bir inceleme yer almaktadır.

Kısa cevap: İşlemci doğrudan "metin" veya "resimler" ile çalışmaz. Bitlerle işlem yapar ve bunları tamsayı (int), kayan noktalı sayı (float/double) veya bellek adresleri olarak yorumlar. Diğer tüm formatlar (karakterler, renkler, ses) bu temel türler üzerine inşa edilmiş yazılımsal katmanlardır.

Tamsayı Verileri (Integer)

Bu, makine aritmetiğinin temelidir. İşlemci, tamsayı işlemleri için en az saat döngüsünü harcar, bu nedenle döngü sayaçlarından bellek yönetimine kadar her yerde kullanılırlar.

İşaretli ve işaretsiz sayılar

  • İşaretsiz (Unsigned): Yalnızca pozitif değerleri (sıfır dahil) temsil ederler. Dizilerin indekslenmesi, işaretçilerle çalışma ve bit maskeleri için kullanılırlar, çünkü kayıt defterinin bit genişliğinin tüm aralığını kullanmaya olanak tanırlar.
  • İşaretli (Signed): Negatif sayıları temsil etmek için ikiye tümleyen (two’s complement) kullanır. En yüksek anlamlı bit işareti belirler. Unutulmaması gereken önemli bir nokta şudur: C/C++ gibi dillerde işaretli sayılarda aritmetik taşma tanımsız davranışa yol açarken, işaretsiz sayılar basitçe "döngüye girer".

Bit Genişliği

Modern işlemciler (x86-64, ARM64) yerel olarak 64-bit genel amaçlı kayıt defterleriyle çalışır. Ancak daha küçük formatları (8, 16, 32 bit) de etkili bir şekilde desteklerler; bu da büyük küçük veri dizileriyle (örneğin görüntü pikselleri veya metin karakterleri) çalışırken önbellek belleğinden tasarruf etmeyi sağlar.

Kayan Noktalı Sayılar (Floating Point)

Ondalık kısımlı hesaplamalar için işlemci, IEEE 754 standardına göre çalışan bir yardımcı işlemciyi (veya entegre FPU bloklarını) kullanır.

TürBoyutHassasiyet (anlamlı basamak)Kullanım Alanı
Float (FP32)32 bit~7 basamakGrafikler, oyunlar, çoğu bilimsel simülasyon.
Double (FP64)64 bit~15–17 basamakFinansal hesaplamalar, yüksek hassasiyetli fizik, CAD sistemleri.
Half (FP16)16 bit~3–4 basamakMakine öğrenimi (çıkarım/inferans), mobil grafikler.
BFloat1616 bit~2–3 basamakYapay zeka hızlandırıcıları, sinir ağlarının eğitimi sırasında dinamik aralığın korunması.

Denormalize sayı tuzağı: Hesaplama sonucu aşırı derecede sıfıra yaklaştığında (ancak sıfıra eşit olmadığında), işlemci işlemlerin yürütülmesini onlarca kat yavaşlatan özel bir işleme moduna geçebilir. Yüksek performanslı kodlarda genellikle "denormalleri sıfıra yıkama" (FTZ/DAZ bayrakları) tekniği kullanılır.

Vektör Verileri (SIMD)

Single Instruction, Multiple Data (SIMD) — işlemcinin tek bir işlemi aynı anda bir veri kümesine uygulama yeteneğidir. Bu, multimedya görevlerinin, şifrelemenin ve bilimsel hesaplamaların hızlandırılmasındaki temel araçtır.

Mimariler özel geniş kayıt defterleri kullanır:

  • SSE/AVX (x86): 128 ila 512 bit arasında kayıt defterleri. Örneğin, tek bir saat döngüsünde sekiz float sayısını toplamaya olanak tanır.
  • NEON/SVE (ARM): Mobil cihazlar ve Apple Silicon/Ampere sunucuları için benzer teknolojiler.

İşlemci için bu nasıl görünür: for (i=0; i<4; i++) c[i] = a[i] + b[i] döngüsü yerine, işlemci dört çift sayıyı aynı anda işleyen tek bir ADDPS (Add Packed Single-precision) komutu yürütür.

Mantıksal Veriler ve Adresler

Yüksek seviye dillerde boolean türü bulunsa da, işlemci seviyesinde mantık şu yollarla uygulanır:

  1. Durum Bayrakları: Aritmetik işlemlerden sonra ayarlanan bayrak kaydındaki özel bitler (Sıfır Bayrağı, Taşıma Bayrağı vb.).
  2. Tamsayı Maskeleri: Normal kayıt defterlerinde saklanan 0 (yanlış) ve 1 (doğru) değerleri.
  3. İşaretçiler (Pointers): Aslında bunlar, bir bellek hücresinin adresini içeren işaretsiz tamsayılardır. 64-bit sistemlerde 64 bit kaplasalar da, modern işletim sistemleri sanal adresleme için genellikle yalnızca 48 biti kullanır.

Bellekte Temsil: Endianlık ve Hizalama

İşlemci verileri RAM'den okur ve depolanma şekli uyumluluğu ve hızı etkiler.

Byte Sırası (Endianness)

  • Little-endian (x86, varsayılan olarak ARM): En düşük anlamlı byte en düşük adreste saklanır.
  • Big-endian (ağ protokolleri, bazı eski mimariler): En yüksek anlamlı byte en düşük adreste saklanır. Farklı endianlığa sahip sistemler arasında veri alışverişi yaparken (örneğin, ağ ekipmanında oluşturulan ikili bir dosyanın PC'de okunması) byte dönüşümü gereklidir.

Hizalama (Alignment)

İşlemci için verilerin boyutlarının katı olan adreslerde konumlandırılması durumunda (örneğin, 4'e bölünen bir adreste 4 baytlık int) verileri okuması daha hızlıdır.

  • Hizalanmamış erişim: Modern x86 işlemcilerde mümkündür ancak daha yavaştır. Bazı ARM mimarilerinde (ARMv7 öncesi) veya belirli modlarda istisnaya (program çökmesine) neden olur.

Geliştiricilerin Sık Yaptığı Hatalar

  1. Kayan noktalı sayıları eşitlik için karşılaştırmak (if (a == b)). IEEE 754'teki yuvarlama hataları nedeniyle, teorik olarak eşit olan iki sayı bir bit farklılık gösterebilir. Her zaman epsilon (tolerans) ile karşılaştırma kullanın: abs(a - b) < epsilon.
  2. Taşmayı görmezden gelmek. İki büyük int sayısının toplanması negatif bir sayı verebilir. Güvenli dillerde (Rust, Swift) bu otomatik olarak kontrol edilir, C/C++'da edilmez.
  3. **Belleğin verimsiz kullanımı.double yerine float'ın yeterli olduğu yerlerde double kullanmak, önbellek belleği ve veri yolu üzerindeki yükü iki katına çıkarır; bu durum genellikle hesaplamalardan daha hızlı bir "darboğaz" haline gelir.

FAQ

Her ikisi de 4 bayt kapladığına göre int32 ve float arasındaki fark nedir? int32, ±2 milyar aralığında kesin bir tamsayı değeri saklar. float, devasa bir aralıkta ($10^{38}$'e kadar) yaklaşık bir kayan noktalı sayı saklar, ancak 7. basamaktan sonra hassasiyetini kaybeder. Seçim, her bir birimin hassasiyetinin mi yoksa geniş bir değer aralığının mı sizin için daha önemli olduğuna bağlıdır.

İşlemci metni (UTF-8) işler mi? Donanımsal olarak hayır. İşlemci için metin sadece bir byte dizisidir (tamsayılar). Kodlama desteği yazılımsal olarak veya özel dize karşılaştırma talimatları aracılığıyla uygulanır, ancak "A harfi" semantiği işlemci tarafından bilinmez.

Vektörel hesaplamalar (SIMD) neden daha hızlıdır? Saat frekansı daha yüksek olduğu için değil, tek bir saat döngüsünde daha fazla faydalı iş yapıldığı için. Bu işlemlerin enerji verimliliği daha yüksektir, çünkü talimat getirme maliyeti aynı anda 4–16 veri elemanının işlenmesiyle telafi edilir.