İşlemci (CPU) Nedir?

CPU (Central Processing Unit/Merkezi İşlem Birimi) veya yalnızca işlemci veya mikroişlemci, bilgisayardaki, bilgisayar programlarında yer alan yönergeleri yorumlayan ve verileri işleyen bileşendir.

İşlemci (CPU) Nedir?

İşlemci Nedir, Ne İşe Yarar?

CPU’lar dijital bilgisayarın temel özelliklerini (programlanabilirlik) sağlar ve birincil depolama ve G/Ç aygıtlarıyla birlikte her zaman bilgisayarlarda bulunan gerekli bileşenlerden biridir. Mikroişlemci, entegre devrelerle üretilen CPU’dur. 1970’lerin ortalarından bu yana, tek çipli mikroişlemciler neredeyse tüm CPU türlerinin yerini tamamen almıştır ve bugün “CPU” terimi genellikle tüm mikroişlemcilere uygulanmaktadır.

Tarihi

“Merkezi işlem birimi” ifadesi, genel olarak, karmaşık bilgisayar programlarını çalıştırabilen belirli bir mantık makineleri sınıfının açıklamasıdır. Bu geniş tanım, “CPU” terimi yaygın olarak kullanılmadan çok önce var olan en eski bilgisayarların çoğuna kolayca uygulanabilir.

Bununla birlikte, kendisi ve kısaltması terimi, en azından 1960’ların başından beri bilgisayar endüstrisinde kullanılmaktadır. CPU’ların şekli, tasarımı ve uygulaması en eski örneklerden önemli ölçüde değişmiştir, ancak temel çalışması oldukça benzer kalmıştır.

İlk CPU’lar daha büyük bir bilgisayarın, genellikle türünün tek örneği olan bir bilgisayarın parçası olarak özel olarak tasarlanmıştır. Bununla birlikte, belirli bir uygulama için özel olarak tasarlanmış CPU’ların bu pahalı yöntemi büyük ölçüde ortadan kalkmış ve yerini bir veya daha fazla amaç için uyarlanmış ucuz, standart işlemci sınıflarının geliştirilmesi almıştır.

Bu standardizasyon eğilimi genellikle Discrete Transistors (Ayrık Transistörler), Mainframes (Ana Çerçeveler) ve Microcomputers (Mikrobilgisayarlar) döneminde başladı ve daha karmaşık CPU’ların küçük alanlarda tasarlanmasını ve üretilmesini sağlayan Entegre Devrenin (IC) yaygınlaşmasıyla hızla hızlandı.

CPU’ların hem minyatürizasyonu hem de standardizasyonu, bu dijital cihazların modern yaşamdaki varlığını özel bilgisayar makinelerinin sınırlı uygulamalarının çok ötesinde artırmıştır. Modern mikroişlemciler, otomobiller, televizyonlar, buzdolapları, hesap makineleri, uçaklar, mobil veya cep telefonları, oyuncaklar ve diğer her şeyde görünür.

Hemen hemen tüm CPU’lar ayrık durumlarla ilgilenir ve bu nedenle bu durumları ayırt etmek ve değiştirmek için belirli bir anahtarlama sınıfı sınıfı gerektirir. Transistörün ticari kabulünden önce, elektrik röleleri ve vakum tüpleri (termiyonik vanalar) anahtarlama elemanları olarak yaygın olarak kullanılmıştır.

Bunların önceki tamamen mekanik tasarımlara göre farklı hız avantajları olmasına rağmen, çeşitli nedenlerle güvenilir değildi. Örneğin, Direct Current Sequential Logic (Doğru Akım Sıralı Mantık) devrelerini yapmak, Contact Bounce (Kontak Sıçrama) sorunuyla başa çıkmak için ek donanım gerektirir.

Öte yandan, vakum tüpleri temas sıçramalarından muzdarip olmasa da, tamamen işlevsel hale gelmeden ve sonunda başarısız olup tamamen çalışmayı bırakmadan önce ısıtılmaları gerekir.

Genel olarak, bir tüp başarısız olduğunda, CPU’nun değiştirilmesi için arızalı bileşeni bulması gerekir. Bu nedenle, ilk elektronik bilgisayarlar genellikle elektromekanik bilgisayarlardan daha hızlı fakat daha az güvenilirdi.

EDVAC gibi tüp bilgisayarların arızalar arasında ortalama sekiz saat olma eğilimindeyken, Harvard Mark I gibi röle bilgisayarları çok nadiren başarısız oldu.

Sonunda, tüp tabanlı CPU’lar baskın hale geldi çünkü üretilen önemli hız avantajları genellikle güvenilirlik sorunlarından daha ağır bastı. Bu erken eşzamanlı CPU’ların çoğu, modern mikroelektronik tasarımlara kıyasla düşük saat frekanslarında çalışıyordu.

100 kHz ila 4 MHz arasındaki saat sinyali frekansları şu anda çok yaygındı ve büyük ölçüde üretildikleri anahtarlama cihazlarının hızı ile sınırlıydı.

Transistör İşlemcileri

İşlemci tasarımının karmaşıklığı, çeşitli teknolojiler daha küçük, daha güvenilir elektronik cihazlar oluşturmayı kolaylaştırdıkça arttı. Bu iyileştirmelerden ilki Transistörün gelişiyle geldi.

1950’ler ve 1960’larda transistörlü CPU’ların vakum tüpleri ve elektrik röleleri gibi hantal, güvenilmez ve kırılgan anahtarlama elemanları ile inşa edilmesi gerekmiyordu. Bu gelişme ile, ayrı (bireysel) bileşenler içeren bir veya daha fazla baskılı devre kartı üzerine daha karmaşık ve daha güvenilir CPU’lar inşa edildi.

Bu dönemde, kompakt bir alanda birçok üretim yöntemi popülerlik kazandı. Entegre Devre (IC), çok sayıda transistörün basit bir Yarıiletken bazlı plaka veya “yonga” üzerinde üretilmesine izin verdi.

İlk başta, NOR kapıları gibi sadece çok temel, uzmanlaşmış olmayan dijital devreler IC’de minyatürleştirildi.

Bu yapı taşı IC’lerine dayanan CPU’lara genellikle “small-scale integration/küçük ölçekli entegrasyon” (SSI) cihazları denir.

Apollo Rehberlik Bilgisayarında kullanılanlar gibi SSI entegre devreleri genellikle onun katları olarak numaralandırılmış transistörler içeriyordu.

IC SSI kullanarak tam bir işlemci oluşturmak için binlerce ayrı çip gerekiyordu, ancak yine de önceki ayrık transistör tasarımlarından çok daha az yer ve güç tüketiyordu.

Mikroelektronik teknolojisi ilerledikçe, IC’lere artan sayıda transistör yerleştirildi, böylece tam bir CPU için gereken bireysel IC’lerin sayısı azaldı. MSI entegre devreler ve LSI, transistör sayısını yüzlerce, sonra da binlerce arttırdı.

1964’te IBM, aynı programları farklı hızlarda ve performanslarda çalıştırabilecek bir dizi bilgisayarda kullanılan System/360 bilgisayar mimarisini tanıttı.

Bu, çoğu elektronik bilgisayarın, aynı üretici tarafından üretilenler bile birbiriyle uyumsuz olduğu bir zamanda önemliydi. Bu gelişmeyi kolaylaştırmak için IBM, modern CPU’larda hala yaygın olarak kullanılan Microcode adı verilen Microprogram kavramını kullandı.

System/360 mimarisi o kadar popülerdi ki yıllardır Mainframe pazarına hakim oldu ve IBM zSeries gibi benzer modern bilgisayarlar tarafından hala devam etti.

1964’in aynı yılında, Digital Equipment Corporation (DEC) bilimsel ve araştırma pazarlarına yönelik bir başka etkili bilgisayarı, PDP-8’i tanıttı. DEC daha sonra başlangıçta IC SSI ile inşa edilmiş ancak sonunda pratik hale geldiklerinde LSI bileşenleri ile birlikte uygulanan son derece popüler PDP-11 hattını tanıtacaktı.

SSI ve MSI teknolojisi ile yapılan öncüllerinin aksine, PDP-11’in ilk LSI uygulaması sadece dört LSI entegre devreden oluşan bir işlemci içeriyordu.

Transistör tabanlı bilgisayarların öncekilere göre bazı belirgin avantajları vardı. Transistörler, artan güvenilirliği ve daha düşük güç tüketimini kolaylaştırmanın yanı sıra, bir tüp veya röleye kıyasla bir transistörün kısa anahtarlama süresi nedeniyle CPU’nun çok daha yüksek hızlarda çalışmasına izin verdi.

Bu zamana kadar neredeyse sadece transistörler olan anahtarlama elemanlarının artan güvenilirliği ve dramatik olarak artan hızı sayesinde, onlarca megahertz saat hızı elde edildi.

Buna ek olarak, ayrık transistör ve entegre devre CPU’ları yoğun kullanımdayken, yeni yüksek performanslı tasarımlar SIMD (Single Instruction Multiple Data/Tek Komutlu Çoklu Veri) olarak görünmeye başladı. Bu ilk deneysel tasarımlar daha sonra Cray Inc. tarafından yapılanlar gibi özel süper bilgisayarlar çağını ortaya çıkardı.

Mikroişlemciler

İlk mikroişlemci, 1970 yılında Intel 4004 ve ilk yaygın olarak kullanılan mikroişlemci, Intel 8080’in 1974’te piyasaya sürülmesinden bu yana, bu işlemci sınıfı Merkezi İşlem Biriminin uygulama yöntemlerinin geri kalanını neredeyse tamamen değiştirmiştir.

O zamanın ana bilgisayar ve mini bilgisayar üreticileri, eski bilgisayar mimarilerini yükseltmek için tescilli IC geliştirme programları yayınladılar, sonunda eski donanım ve yazılımlarıyla geriye dönük olarak uyumlu talimat setleriyle mikroişlemciler ürettiler.

Şimdi her yerde bulunan kişisel bilgisayarın ortaya çıkışı ve engin başarısı ile birleştiğinde, CPU terimi neredeyse tamamen mikroişlemcilere uygulanmaktadır.

Önceki nesil CPU’lar, ayrı bileşenler ve bir veya daha fazla devre kartında çok sayıda küçük ölçekli entegre entegrasyon devresi olarak uygulandı. Öte yandan, mikroişlemciler çok az sayıda IC ile yapılan CPU’lardır; genellikle sadece bir tanesidir.

Daha küçük işlemci boyutu, tek bir yongada uygulanması sonucunda, kapıların parazitik kapasitansındaki azalma gibi fiziksel faktörler nedeniyle daha hızlı geçiş süreleri anlamına gelir. Bu senkron mikroişlemcilerin onlarca megahertz ile birkaç gigahertz arasında değişen saat sürelerine sahip olmasını sağlamıştır.

Ek olarak, bir IC üzerinde aşırı küçük transistörler oluşturma kabiliyeti arttıkça, tek bir CPU’daki karmaşıklık ve transistörlerin sayısı da önemli ölçüde artmıştır. Yaygın olarak görülen bu eğilim, CPU’ların ve diğer IC’lerin karmaşıklığındaki büyümenin oldukça doğru bir tahmini olduğu gösterilen Moore Yasası ile açıklanmaktadır.

CPU’nun karmaşıklığı, boyutu, yapısı ve genel şekli son altmış yılda önemli ölçüde değişirken, temel tasarım ve operasyonun çok fazla değişmediği dikkat çekicidir. Günümüzün ortak CPU’larının neredeyse tamamı von Neumann depolanmış program makineleri olarak doğru bir şekilde tanımlanabilir.

Moore yasası geçerli olmaya devam ederken, entegre devre transistör teknolojisinin sınırları hakkında endişeler gündeme gelmiştir. Elektronik kapıların aşırı minyatürleştirilmesi, Elektromigrasyon ve kayıp Eşiği gibi çok daha önemli hale gelen olayların etkilerine neden olmaktadır.

Bu yeni endişeler, araştırmacıları kuantum bilgisayar gibi yeni hesaplama yöntemlerini incelemenin yanı sıra paralellik kullanımını genişleten ve klasik von Neumann modelinin kullanışlılığını artıran diğer yöntemler arasında yer alan birçok faktör arasında yer alıyor.

İşlemci CPU Nasıl Çalışır?

Çoğu CPU’nun temel işlemi, program adı verilen bir dizi saklı talimatı yürütmektir. Program, belirli bir bilgisayar belleğinde tutulan bir dizi sayı ile temsil edilir. Hemen hemen tüm von Neumann Mimarisi CPU’larının işlemlerinde kullandığı dört adım vardır: okuma, kod çözme, yürütme ve yazma.

İlk adım, okuma, program belleğinden bir Talimat almayı içerir. Programın bellek konumu, programdaki geçerli konumu tanımlayan bir sayıyı saklayan bir Program Sayacı tarafından belirlenir. Başka bir deyişle, program sayacı CPU’ya geçerli programdaki yerini bildirir.

Bir talimat okunduktan sonra, Program Sayacı hafıza birimleri cinsinden talimat kelimesi uzunluğuna göre arttırılır. Sıklıkla okunacak talimat, nispeten yavaş bellekten alınmalı ve talimatın geri dönmesini beklerken CPU’yu durdurmalıdır. Bu sorun modern işlemcilerde büyük ölçüde önbellekler ve pipeline mimarileri tarafından ele alınmaktadır.

CPU’nun bellekten okuduğu talimat, CPU’nun ne yapması gerektiğini belirlemek için kullanılır. Kod çözme adımında, talimat diğer CPU birimleri için anlamı olan parçalara bölünür. Sayısal komutun değerinin yorumlanma şekli, CPU’nun ISA (Instruction Set/Komut Seti) mimarisi tarafından tanımlanır.

Genellikle, talimatta Opcode adı verilen bir grup sayı, hangi işlemin gerçekleştirileceğini gösterir. Numaranın geri kalan kısımları genellikle, ekleme işlemi için işlenenler gibi söz konusu talimat için gerekli bilgileri sağlar.

Bu tür işlenenler sabit bir değer olarak veya bazı Adres Modları tarafından belirlendiği gibi, bir kayıt veya bir bellek adresi olabilen bir değerin bulunduğu bir yer olarak verilebilir.

Eski tasarımlarda, talimatın kodunu çözmekten sorumlu işlemci üniteleri sabit donanım cihazlarıydı. Bununla birlikte, daha soyut ve karmaşık CPU’larda ve ISA’larda, talimatların işlemci için çeşitli yapılandırma sinyallerine dönüştürülmesine yardımcı olmak için sıklıkla bir Microprogram kullanılır.

Bu mikroprogram bazen CPU’nun üretildikten sonra bile kod çözme şeklini değiştirmek için değiştirilebilecek şekilde yeniden yazılabilir.

Okuma ve kod çözme adımlarından sonra, talimat yürütme adımı gerçekleştirilir. Bu adım sırasında, birkaç işlemci ünitesi istenen işlemi gerçekleştirebilecek şekilde bağlanır.

Örneğin, bir ekleme işlemi istenirse, bir girdi kümesine ve bir çıktı kümesine bir ALU (Arithmetic Logical Unit/Aritmetik Mantıksal Birim) bağlanır. Girdiler eklenecek sayıları sağlar ve çıktılar son toplamı içerecektir.

ALU, toplama ve bitsel işlemler gibi girişlerde basit aritmetik ve mantık işlemleri gerçekleştirmek için devre içerir. Add işlemi işlemci tarafından işlenemeyecek kadar büyük bir sonuç üretiyorsa ve bir bayrak kaydında bulunan Arithmetic Overflow (Aritmetik Taşma) bayrağı da ayarlanabilir.

Son adım olan yazma işlemi, yürütme adımının sonuçlarını belirli bir bellek biçimine yazar. Çoğu zaman, sonuçlar sonraki talimatlarla hızlı erişim için bazı dahili işlemci kaydına yazılır.

Diğer durumlarda, sonuçlar daha yavaş fakat daha ucuz ve daha büyük bir ana belleğe yazılabilir. Bazı talimat türleri, doğrudan sonuç verileri üretmek yerine program sayacını değiştirir.

Bunlara genellikle jumps/sıçramalar denir ve döngüler, programların koşullu yürütülmesi ve programlardaki işlevler gibi davranışları kolaylaştırır. Birçok talimat “bayraklar” kaydındaki basamakların durumunu da değiştirecektir. Bu bayraklar, bir programın nasıl davrandığını etkilemek için kullanılabilir, çünkü bunlar genellikle çeşitli işlemlerin sonuçlarını gösterir.

Örneğin, bir karşılaştırma talimatı türü iki değeri dikkate alır ve bayrak kaydında daha büyük olan bir sayı ayarlar. Bu bayrak daha sonra program akışını belirlemek için bir sonraki atlama talimatı ile kullanılabilir.

Talimatın yürütülmesinden ve elde edilen verilerin yazılmasından sonra, tüm işlem bir sonraki talimat döngüsü ile tekrarlanır, normal olarak program sayacındaki artan değer nedeniyle sıradaki bir sonraki talimatı okur. Tamamlanan komut bir atlama ise, program sayacı, atlandığı komutun adresini içerecek şekilde değiştirilir ve program yürütme normal şekilde devam eder. Burada tarif edilenden daha karmaşık CPU’larda, aynı anda birden fazla talimat okunabilir, kodu çözülebilir ve yürütülebilir.

Bu bölüm, genellikle Mikrodenetleyiciler olarak adlandırılan birçok elektronik cihazda kullanılan basit CPU’lar arasında oldukça yaygın olan Classic RISC Pipeline olarak adlandırılan şeyi açıklar.

Tasarım ve Uygulama

   Integer Range/Tam Sayı Aralığı

Bir CPU’nun sayıları nasıl temsil ettiği, cihazın en temel çalışma şekillerini etkileyen bir tasarım seçeneğidir. Numaraları dahili olarak temsil etmek için kullanılan ilk dijital hesap makinelerinden bazıları, Common Decimal Numbering System/Ortak Ondalık Numaralandırma Sisteminin elektriksel bir modelidir.

Diğer bazı bilgisayarlar üçlü gibi daha egzotik numaralandırma sistemleri kullanmışlardır. Hemen hemen tüm modern CPU’lar sayıları ikili formda temsil eder; burada her basamak, “yüksek” veya “düşük” voltaj gibi iki değerin belirli bir fiziksel miktarıyla temsil edilir.

Sayısal gösterim, bir CPU’nun temsil edebileceği sayıların boyutu ve kesinliği ile ilgilidir. İkili CPU durumunda, Bit, CPU’nun çalıştığı sayılardaki önemli bir konumu ifade eder.

Bir CPU’nun sayıları temsil etmek için kullandığı bit sayısı, tamsayılarla tam olarak ilgilenilirken genellikle “word size/sözcük boyutu”, “bit width/bit genişliği”, “data path width/veri yolu genişliği” veya “integer precision/tamsayı hassasiyeti” olarak adlandırılır.

Bu sayı mimariler arasında ve genellikle aynı CPU’nun farklı birimleri içinde farklılık gösterir. Örneğin, 8 bitlik bir CPU, her biri iki olası değere sahip sekiz ikili basamak ile temsil edilebilen bir dizi sayıyı işler ve kombinasyonda 28 veya 256 ayrı sayıya sahip 8 bit. Aslında, tamsayı boyutu, yazılımın çalıştığı ve CPU’nun doğrudan kullanabileceği tamsayılar aralığı için bir donanım sınırı belirler.

Tamsayı aralığı ayrıca CPU’nun adresleyebileceği bellek konumu sayısını da etkileyebilir. Örneğin, bir ikili CPU bir bellek adresini temsil etmek için 32 bit kullanıyorsa ve her bellek adresi bir Octet’i (8 bit) temsil ediyorsa, CPU’nun adresleyebileceği maksimum bellek miktarı 232 sekizli veya 4 GB’dir.

Bu, CPU Adres Alanı’nın çok basit bir görünümüdür ve birçok modern tasarım, tüm aralıklarının düz bir adres alanı ile izin vereceğinden daha fazla bellek bulmak için sayfalama gibi çok daha karmaşık adres yöntemleri kullanır.

Tam sayı aralığının daha yüksek seviyeleri, fazladan basamakları işlemek için daha fazla yapıya ve dolayısıyla daha karmaşık, boyut, enerji kullanımı ve genel olarak maliyet gerektirir.

Bu nedenle, çok daha yüksek bir aralığa (16, 32, 64 ve hatta 128 bit) sahip CPU’lar olsa bile, modern uygulamalarda kullanılan 4 ve 8 bit mikrodenetleyicileri görmek tamamen nadir değildir. Daha basit mikrodenetleyiciler genellikle daha ucuzdur, daha az enerji kullanır ve bu nedenle daha az ısı yayar. Bunların tümü, elektronik cihazlar için önemli tasarım hususları olabilir.

Bununla birlikte, üst düzey uygulamalarda, ek aralık tarafından üretilen faydalar daha önemlidir ve genellikle tasarım seçeneklerini etkiler.

Hem en düşük hem de en yüksek bit uzunluklarının sağladığı bazı avantajlardan yararlanmak için birçok CPU, cihazın farklı birimleri için farklı bit genişliklerinde tasarlanmıştır. Örneğin, IBM Sistem/370, daha fazla doğruluk ve kayan nokta sayısı aralığını kolaylaştırmak için Floating Point (Kayan Nokta) birimleri içinde çoğunlukla 32 bit olan ancak 128 bit hassasiyet kullanan bir CPU kullandı.

Daha sonraki birçok CPU tasarımı, özellikle işlemci tamsayı ve kayan nokta kapasitesi arasında makul bir dengenin gerekli olduğu genel amaçlı kullanımlar için tasarlandığında benzer bir bit genişliği karışımı kullanır.

   Clock Frequency/Saat Frekansı

Çoğu CPU ve aslında çoğu Sıralı Mantık cihazı doğası gereği eşzamanlıdır. Başka bir deyişle, bir senkronizasyon sinyaline göre tasarlanır ve çalışırlar. Saat sinyali olarak bilinen bu sinyal, genellikle periyodik bir kare dalga şeklini alır.

Elektrik sinyallerinin birçok CPU devresinin çeşitli dallarında hareket edebileceği maksimum süreyi hesaplayarak, tasarımcılar saat sinyali için uygun bir süre seçebilir.

Bu süre, bir sinyalin en kötü durumda hareket etmesi veya yayılması için geçen süreden daha uzun olmalıdır. Saat periyodunu en kötü durumdaki yayılma gecikmesi üzerinde önemli ölçüde daha yüksek bir değere ayarlayarak, tüm CPU’yu ve verileri yükselen ve düşen saat sinyalinin kenarları etrafında taşıma şeklini tasarlamak mümkündür.

Bunun avantajı, hem tasarım perspektifinde hem de bileşen miktarı perspektifinde CPU’yu önemli ölçüde basitleştirmektir. Bununla birlikte, bunun bazı birimleri çok daha hızlı olmasına rağmen, tüm CPU’nun daha yavaş öğelerini beklemesi dezavantajı vardır. Bu sınırlama büyük ölçüde CPU paralelliğini artırmak için çeşitli yöntemlerle telafi edilmiştir.

Bununla birlikte, mimari iyileştirmeler tek başına küresel senkronize CPU’ların tüm dezavantajlarını ele almamaktadır. Örneğin, bir saat sinyali diğer herhangi bir elektrik sinyalinin gecikmelerine tabidir. Giderek daha karmaşık CPU’larda daha yüksek saat hızları, saat sinyalinin tüm ünite boyunca fazda (senkronize) tutulmasını zorlaştırır.

Bu, CPU’nun arızalanmasına neden olacak kadar tek bir sinyali önemli ölçüde geciktirmekten kaçınmak için birden fazla özdeş saat sinyali sağlanmasını gerektiren birçok modern CPU’ya yol açmıştır. Saat hızı önemli ölçüde arttığında bir diğer önemli sorun CPU tarafından yayılan ısı miktarıdır.

Saat sinyali sürekli olarak değişir ve birçok bileşenin o anda kullanılmasına bakılmaksızın değişmesine neden olur. Genel olarak, durumu değiştiren bir bileşen, statik durumdaki bir öğeden daha fazla enerji kullanır. Bu nedenle, saat hızı arttıkça, ısı dağılımı da artar ve CPU’nun daha etkili soğutma çözümleri gerektirmesine neden olur.

Gereksiz bileşenlerin değiştirilmesiyle ilgili bir yöntem, saat sinyalini gereksiz bileşenlere kapatmayı, etkili bir şekilde kapatmayı içeren Clock gating olarak adlandırılır. Bununla birlikte, bunun uygulanması genellikle zordur ve bu nedenle çok düşük güç tasarımları dışında ortak bir kullanım görmez.

Küresel bir saat sinyalinin bazı problemleriyle başa çıkmanın bir başka yöntemi, bunun tamamen ortadan kaldırılmasıdır. Küresel sinyali saatten kaldırmak, tasarım sürecini benzer senkron tasarımlara kıyasla birçok yönden çok daha karmaşık hale getirirken, asenkron tasarımlar güç tüketimi ve ısı dağılımında belirgin avantajlara sahiptir.

Biraz nadir olmakla birlikte, tüm CPU’lar küresel bir saat sinyali kullanmadan oluşturulmuştur. Bunun iki önemli örneği ARM mimarisini uygulayan AMULET ve MIPS R3000 ile uyumlu MiniMIPS’tir.

Saat sinyalini tamamen kaldırmak yerine, bazı CPU tasarımları, aritmetik performansta bazı kazanımlar elde etmek için süperskalar boru hattı ile birlikte asenkron ALU’ların kullanılması gibi bazı cihaz birimlerinin asenkron olmasını sağlar.

Tamamen eşzamansız tasarımların eşzamanlı eşdeğerleriyle karşılaştırılabilir veya onlardan daha iyi bir seviyede performans gösterip gösteremeyecekleri tam olarak açık olmasa da, en azından en basit matematiksel işlemlerde mükemmel oldukları açıktır. Bu, mükemmel güç tüketimi ve ısı yayma özellikleri ile birleştiğinde, onları gömülü bilgisayarlar için çok uygun hale getirir.

   Parallelism/Paralellik

Önceki bölümde verilen temel CPU işleminin açıklaması, bir CPU’nun alabileceği en basit formu açıklar. Genellikle alt ölçek olarak adlandırılan bu CPU türü, bir seferde bir veya iki veri parçasıyla tek bir komut çalıştırır ve yürütür.

Bu işlem, alt ölçek CPU’larında doğal olarak verimsizlik ile sonuçlanır. Bir seferde yalnızca bir komut yürütüldüğünden, bir sonraki talimata geçmeden önce tüm CPU’nun bu komutun tamamlanmasını beklemesi gerekir.

Sonuç olarak, alt CPU, yürütmeyi tamamlamak için birden fazla saat döngüsü gerektiren talimatlarda felç olur. İkinci bir yürütme birimi eklemek bile performansı büyük ölçüde iyileştirmez. Bir yol donmak yerine, şimdi iki yol donar ve kullanılmayan transistörlerin sayısı artar.

CPU yürütme kaynaklarının bir kerede yalnızca bir komutla çalışabildiği bu tasarım, muhtemelen yalnızca skaler performans elde edebilir. Ancak, performans neredeyse her zaman alt ölçektir.

Skaler ve daha iyi performans elde etme girişimleri, CPU’nun daha az doğrusal ve paralel olarak daha fazla davranmasını sağlayan çeşitli tasarım yöntemleriyle sonuçlanmıştır. CPU paralelliğine gelince, bu tasarım tekniklerini sınıflandırmak için genellikle iki terim kullanılır.

  1. ILP (Instruction Level Parallelism/Komut Seviyesi Paralellik): bir CPU içinde talimatların yürütülme hızını artırmayı, yani tablette yürütme kaynaklarının kullanımını artırmayı amaçlamaktadır.
  2. TLP (Thread Level Parallelism/İş Parçacığı Düzeyi Paralellik): CPU’nun aynı anda çalıştırabileceği iş parçacığı sayısını artırmayı amaçlamaktadır.

Her metodoloji, hem uygulama yöntemleri hem de bir uygulama için artan CPU performansında ürettikleri nispi etkinlik bakımından farklılık gösterir.

   ILP: Instructional Piping and Superscalar Architecture

Arttırılmış paralellik elde etmek için kullanılan en basit yöntemlerden biri, önceki talimatın yürütülmesi bitmeden önce talimatın okunması ve kodunun çözülmesi için ilk adımlara başlamaktır.

Bu, talimat pipelining olarak bilinen bir tekniğin en basit şeklidir ve neredeyse tüm modern genel amaçlı CPU’larda kullanılır. Yürütme yolunu ayrık aşamalara bölerek, boru hattı herhangi bir zamanda birden fazla komutun yürütülmesine izin verir.

Bu ayırma, yürütme boru hattından ayrılana ve geri çekilene kadar her aşamada bir talimatın daha eksiksiz hale getirildiği bir montaj hattı ile karşılaştırılabilir.

Bununla birlikte, boru hattı, bir sonraki operasyonu tamamlamak için önceki operasyonun sonucunun bitirilmesi gereken bir durum olasılığını ortaya koymaktadır; veri bağımlılığı çakışması olarak adlandırılan bir durumdur. Bununla başa çıkmak için, bu tür koşulları kontrol etmek için ekstra özen gösterilmeli ve bu meydana gelirse, talimat boru hattının bir kısmı geciktirilmelidir.

Doğal olarak, bunu başarmak ek devre gerektirir, kasalı işlemciler alt ölçekden daha karmaşıktır, ancak çok fazla değildir. Kasa işlemcisi neredeyse tamamen skaler hale gelebilir, sadece abrupt pipe stops tarafından engellenebilir.

Öğretim tüpü fikrinin daha da geliştirilmesi, CPU bileşenlerinin boşta kalma süresini daha da azaltan bir yöntemin geliştirilmesine yol açtı.

Superscalar olduğu söylenen tasarımlar, uzun bir talimat boru hattı ve çoklu özdeş yürütme birimlerini içerir. Bir süperskalar boru hattında, talimatların paralel olarak yürütülüp yürütülemeyeceğine karar veren birden fazla talimat okunur ve dağıtıcıya iletilir.

Superscalar olduğu söylenen tasarımlar, uzun bir instruction pipeline ve multiple identical execution units (çoklu özdeş yürütme birimlerini) içerir. Bir süperskalar boru hattında, talimatların paralel olarak yürütülüp yürütülemeyeceğine karar veren birden fazla talimat okunur ve dağıtıcıya iletilir.

Eğer öyleyse, mevcut yürütme birimlerine gönderilirler, bu da birden fazla komutun aynı anda yürütülmesine olanak sağlar.

Genel olarak, bir süperskalar CPU aynı anda bekleme yürütme birimlerine gönderilebilecek ne kadar çok talimat verirse, belirli bir döngüde o kadar fazla komut tamamlanır.

Bir süperskalar CPU mimarisi tasarlamanın zorluklarının çoğu, verimli bir dağıtım programı oluşturmakta yatar. Dağıtım programının, talimatların paralel olarak yürütülüp yürütülemeyeceğini hızlı ve doğru bir şekilde belirleyebilmesi ve bunları mümkün olduğunca çok yürütme birimini meşgul edecek şekilde göndermesi gerekir.

Bu, instruction pipeline olabildiğince sık doldurulmasını ve süperskalar mimarilerde önemli miktarlarda CPU önbelleği için ihtiyacın artmasını gerektirir. Bu aynı zamanda Yüksek Performans seviyelerini korumak için çok önemli olan Fork Prediction, Speculative Execution ve Out of Order Execution gibi tehlikeleri önlemek için teknikler oluşturur.

Branch tahmini, bir koşullu ifadenin hangi dalı alacağını tahmin etmeye çalışır; CPU, koşullu bir ifade tamamlanana kadar tüm boru hattının kaç kez beklemesi gerektiğini en aza indirebilir.

Spekülatif yürütme, koşullu bir işlem sona erdikten sonra gerekli olabilecek veya olmayabilecek kod bölümlerini yürüterek performansta genellikle mütevazı artışlar sağlar.

Sıra dışı yürütme, veri bağımlılıklarından kaynaklanan gecikmeleri azaltmak için talimatların yürütülme sırasını bir dereceye kadar değiştirir.

CPU’nun bir kısmının süperskalar olduğu ve bir kısmının olmadığı durumda, süperskalar olmayan kısım program kesintisi nedeniyle performanstan muzdariptir. Orijinal Intel Pentium (P5), her saat döngüsü için bir komutu kabul edebilecek iki süperskalar ALU’ya sahipti, ancak FPU’su saat döngüsü başına bir komutu kabul edemedi.

Bu nedenle P5 tamsayılar kısmında süperskalardı, ancak kayan nokta sayılarında süperskalar değildi. Intel’in Pentium mimarisinin halefi olan P6, kayan nokta işlevlerine süperkalar kabiliyetler ekledi ve böylece bu tür talimatların performansında önemli bir artış sağladı.

Basit tüp ve süperkalar tasarım, tek bir işlemcinin IPC (instruction per cycle/döngü başına bir komut) aşan oranlarda talimat yürütmesini tamamlamasına izin vererek CPU’nun ILP’sini artırır. Modern CPU tasarımlarının çoğu en azından biraz süpersalerdir ve son on yılda neredeyse tüm genel amaçlı CPU tasarımları süperskalardır.

Son yıllarda, yüksek ILP bilgisayar tasarımına yapılan vurgulardan bazıları CPU donanımından yazılım arayüzüne veya ISA’ya geçti. VLIW (Very Long Instruction Word/Çok Uzun Komut Kelimesi) stratejisi, bazı ILP’nin doğrudan yazılım tarafından ima edilmesine neden olarak CPU’nun ILP’ye önemli bir itme sağlamak için yapması gereken işi azaltır ve böylece her ikisi de tasarımın karmaşıklığını azaltır.

   TLP: Simultaneous Execution of Threads

CPU paralelliğini artırmak için yaygın olarak kullanılan bir diğer strateji, aynı anda birden fazla iş parçacığını (programı) çalıştırma yeteneğini dahil etmektir.

Genel olarak, yüksek TLP işlemciler, yüksek ILP işlemcilerden çok daha uzun süredir kullanılmaktadır. Seymour Cray’ın 1970’lerin ve 1980’lerin başında öncülük ettiği tasarımların birçoğu, büyük hesaplama yetenekleri (zamanları için) sağlamanın birincil yöntemi olarak TLP’ye odaklandı. Aslında, TLP, birden fazla iş parçacığında iyileştirmeler şeklinde, 1950’lerden beri kullanılmaktadır.

Bireysel işlemci tasarımı bağlamında, TLP’yi elde etmek için kullanılan iki ana yöntem CMP (Chip-level multiprocessing/Çip düzeyinde çoklu işleme) ve SMT (Simultaneous multithreading/Eşzamanlı çoklu kullanım)’dir.

Yüksek düzeyde, SMP (symmetric multiprocessing/simetrik çoklu işlem) ve NUMA (Non-Uniform Memory Access/Düzgün Olmayan Bellek Erişimi) gibi dizilerde tamamen bağımsız çoklu CPU bilgisayarlar oluşturmak çok yaygındır. Her ne kadar çok farklı araçlar kullanılsa da, bu tekniklerin tümü, CPU’ların paralel çalışabileceği iş parçacığı sayısını artırmak için aynı hedefe ulaşmaktadır.

CMP ve SMP paralellik yöntemleri birbirine benzer ve en açık yöntemdir. Bunlar, iki veya daha fazla tam CPU ve ayrı CPU kullanmaktan daha kavramsal bir şey içerir. CMP durumunda, aynı pakete, bazen aynı Entegre Devreye birden fazla işlemci çekirdeği dahil edilir.

Ayrıca, SMP birden fazla bağımsız paket içerir. NUMA, SMP’ye biraz benzer, ancak tek tip olmayan bir bellek erişim modeli kullanır. Bu, yüksek CPU bilgisayarlar için önemlidir, çünkü her işlemcinin bellek erişim süresi SMP’nin paylaşılan bellek modeliyle hızlı bir şekilde tükenir ve bu da bellek bekleyen CPU’lardan dolayı önemli bir gecikmeye neden olur.

Bu nedenle, NUMA, bir bilgisayarda SMP’nin destekleyebileceğinden çok daha fazla CPU’nun kullanılmasına izin vererek çok daha ölçeklenebilir bir model olarak kabul edilir. SMT, diğer TLP geliştirmelerinden biraz farklıdır, çünkü önceki CPU’nun mümkün olduğunca az bölümünü çoğaltmaya çalışır.

Bir TLP stratejisi olarak düşünülse de, uygulaması gerçekten bir süper skaler tasarıma benzemektedir ve aslında, IBM’in POWER5 gibi süper skaler mikroişlemcilerde sıklıkla kullanılmaktadır.

Tüm CPU’yu çoğaltmak yerine, SMT tasarımları sadece okuma, kod çözme ve gönderme talimatları için gereken parçaları ve genel amaçlı kayıtlar gibi şeyleri çoğaltır.

Bu, bir SMT CPU’nun iki farklı yazılım iş parçacığından talimatlar vererek yürütme birimlerini daha sık meşgul etmesini sağlar. Yine, bu ILP süperskalar yöntemine çok benzer, ancak aynı iş parçacığında aynı anda birden çok komut yürütmek yerine aynı anda çok iş parçacıklı komutları yürütür.

Vektör İşlemciler

Daha az yaygın ancak giderek daha önemli bir CPU paradigması vektörlerle ilgilidir. Yukarıda tartışılan işlemcilerin hepsine belirli bir skaler cihaz tipi denir.

Vektör işlemciler, her komut için bir veri parçasını işleyen skaler işlemcilerin aksine talimat bağlamında birden çok veri parçasını ele alır.

Verilerle ilgilenmenin bu iki şemasına genel olarak sırasıyla SISD (Single Instruction, Single Data – Simple Instruction, Simple Data / Tek Talimat, Tek Veri – Basit Talimat, Basit Veri) ve SIMD (Single Instruction, Multiple Data / Tek Talimat, Çoklu Veri) denir.

Veri vektörleriyle ilgilenen CPU’ların yaratılmasındaki en büyük yardımcı program, aynı işlem, örneğin bir toplam veya Skaler Bir Ürünün büyük bir veri setinde gerçekleştirilmesini gerektiren görevlerin optimizasyonunda yatmaktadır. Bu tür görevlerin bazı klasik örnekleri Multimedya uygulamaları ve birçok bilimsel ve mühendislik görevidir.

Bir skaler CPU, bir veri kümesindeki her talimatı ve değeri okuma, kod çözme ve yürütme sürecinin tamamını tamamlamalıdır, ancak vektör CPU, tek bir komutla nispeten büyük bir veri setinde basit bir işlem gerçekleştirebilir.

Tabii ki, bu ancak uygulama büyük bir veri kümesine bir işlem uygulayan birçok adım gerektirdiğinde mümkündür.

İlk vektör CPU’ların çoğu, Cray-1 gibi, neredeyse sadece kriptografi ve bilimsel araştırma uygulamaları ile ilişkilendirildi. Bununla birlikte, multimedya büyük ölçüde dijital ortama taşındığından, genel amaçlı CPU’larda belirli bir SIMD formuna duyulan ihtiyaç önemli hale gelmiştir.

Kayan nokta birimlerinin genel amaçlı işlemcilere dahil edilmesinden kısa bir süre sonra, genel amaçlı CPU’lar için SIMD yürütme birimlerinin özellikleri ve uygulamaları da görünmeye başladı. Intel’in MMX’i gibi bu erken SIMD spesifikasyonlarından bazıları sadece tamsayılar içindi.

SIMD’den yararlanan birçok uygulama çoğunlukla kayan nokta sayılarıyla uğraştığından, bu durum bazı yazılım geliştiricileri için önemli bir engel oluşturdu.

Aşamalı olarak, bu ilk tasarımlar rafine edildi ve genellikle bir ISA ile ilişkili olan bazı yaygın, modern SIMD spesifikasyonlarına yeniden yapıldı. Bazı dikkate değer modern örnekler Intel SSE ve PowerPC ile ilgili AltiVec’tir.

   İlgili Yazılar


CD Nedir?
DVD Nedir?
RAM Nedir?
Intel Nedir?
AMD Nedir?

Add a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

error: