Önbellek işlemciyi neden hızlandırır
Önbellek, işlemcinin yanında duran küçük ve hızlı bir bellektir. Program aynı veriyi tekrar kullandığı için isabet artar. Iskalamanın neden yavaşlattığını anlatıyoruz.
İşlemci, komutu çok hızlı işleyebilir. Asıl bekleme, verinin uzak bellekten gelmesindedir. Uzak bellek büyüktür ve yavaştır. Önbellek, işlemcinin hemen yanında duran küçük ve hızlı bir kopya alanıdır. Program az önce kullandığı veya onun yanındaki veriyi tekrar istiyorsa kopya yetişir. Yetişirse iş, yavaş belleği beklemeden sürer. Yetişmezse işlemci durur ve asıl belleğe gider. Hız, bu isabetin ne kadar sık olduğuna bağlıdır.
Neden tekrar işe yarar
Programlar, veriyi rastgele bir kez kullanıp atmaz. Bir döngü, aynı sayılar üzerinde birçok tur atar. Bir tablo, az önce bakılan satırın komşusuna da bakar. Buna yerellik denir. Yerellik varsa önbellek, bir sonraki isteği tahmin etmiş gibi dolu durur. Tahmin, sihir değildir. Az önce gelen bloğun, biraz daha işe yarayacağına dair makul bir bahistir.
Bahis tutmazsa önbellek boşuna yer kaplar. Tutma oranı, programın nasıl yazıldığına ve verinin nasıl dizildiğine bağlıdır. Aynı işlemci, iki programda iki farklı hız gösterir. Hız farkı, çipin reklamındaki tek sayıdan okunamaz.
İsabet ile ıskalama
İsabet, istenen verinin önbellekte hazır olmasıdır. Iskalama, hazır olmamasıdır. Iskalamada işlemci, daha yavaş olan ana belleğe gider ve gelen bloğu önbelleğe koyar. Koyma, bir sonraki komşu isteği hızlandırabilir. İlk istek ise bedelini ödemiştir.
Önbellek küçük olduğu için yeni blok, eski bir bloğun yerini alır. Alınan blok az sonra yeniden istenirse yeni bir ıskalama doğar. Buna çöpe gitmek denir. Çöp, bellek bozuk demek değildir. Küçük alanın, büyük veriye yetmediği demektir.
Katmanlar neden birden fazladır
Birçok işlemcide önbellek tek bir kutu değildir. En yakın katman en küçüktür ve en hızlıdır. Bir dış katman daha büyüktür ve biraz daha yavaştır. Ana bellek daha da büyüktür. Disk ise bu hiyerarşinin daha da uzağındadır. SSD, diski hızlandırır. Önbelleğin yerine geçmez: https://biliminizi.com/ssd-ve-hdd-hiz-darbe-omur. Her katman, bir öncekine yetişemeyen isteği karşılar.
Katman çoğaldıkça tasarım da zorlaşır. İki çekirdek aynı veriyi değiştirirse kopyaların hangisinin güncel olduğu sorulmalıdır. Güncel olmayan bir kopya, hızlı ama yanlış bir hesaptır. Hız, tutarlılığın önüne geçemez. Geçerse sonuç, çabuk ve hatalı olur.
Yazılım bu hızı boşa harcayabilir
Veriyi bellekte oradan oraya saçmak, yerelliği kırar. Döngü, büyük bir tablonun her seferinde uzak bir köşesine atlarsa önbellek sürekli ıskalar. Aynı iş, veriyi yan yana tutunca hızlanır. Hızlanma, işlemcinin değişmesiyle değil, ıskalamanın azalmasıyla gelir. Bu yüzden yavaşlık her zaman zayıf çip demek değildir. Veri düzeninin, çipin bahsine uymaması da olabilir.
Algoritmanın garantisi ile hızı da burada ayrılır. Doğru sonucu veren bir yöntem, ıskalamalar yüzünden yavaş hissedilebilir: https://biliminizi.com/algoritma-ile-sezgisel-yontem. Hız hissi, yöntemin daha doğru olduğunu göstermez.
Okur tabelayı nasıl görsün
İşlemci reklamındaki önbellek megabaytı, tek başına bir hız sözü değildir. Program yerelse megabayt işe yarar. Yerel değilse megabayt, boş bir bekleme odası gibi kalır. Asıl soru, isabetin sizin işinizde ne kadar sık olduğudur. Bu sayı broşürde yoksa broşür, çipin tavanını anlatıyordur. Tavan, sizin odanızın yüksekliği olmayabilir.
Sık sorulan sorular
Önbellek ana belleğin yerine geçer mi? Geçmez. Küçüktür ve hızlıdır. Sığmayan veri ana bellekte durur. Önbellek, sık kullanılanın kopyasını tutar.
Her program aynı hızlanır mı? Hayır. Aynı veriyi ve komşu veriyi tekrar kullanan program daha çok isabet alır. Rastgele atlayan program ıskalar.
Iskalama arıza mıdır? Kendiliğinden değil. Veri önbellekte yoktur, ana bellekten getirilir. Sık ıskalama yavaşlatır. Yavaşlık, çipin bozulduğu anlamına gelmez.