CPU'nun (
Central
Processing
Unit, Merkezi İşlem
Birimi), bilgisayarlarımızın temel parçası olduğunu rahatlıkla
söyleyebiliriz. Bir sistemdeki herhangibir parça ne işe yararsa yarasın
mutlaka işlemciye (yazının daha başı ama kalan bölümde CPU yerine
hepimizin kullandığı işlemci kelimesini kullanacağım) bağımlı olarak
çalışır. Klavyedeki tuşlara her basışınız, yaptığınız her fare hareketi
bile bir şekilde işlemciye uğrar. Kullandığınız işlemci, herşeyden önce
sisteminizin performansını ve kullanabileceğiniz işletim sistemlerini
belirler. Hatta çoğumuz bilgisayar alırken ilk önce işlemciyi
belirleriz. Şimdi AMD - Intel savaşını (çok istediğinizi biliyorum ama
bu yazının amacına pek uygun değil) bir yana bırakıp işlemcilerin nasıl
çalıştığına bir göz atalım.
<blockquote><blockquote><blockquote><blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote></blockquote></blockquote></blockquote>kullanın
çalışma prensibi aynıdır: Bir işlemci elektriksel sinyalleri 0 ve 1
(ikili sistemle çalışan bilgisayarlarımız için anlamlı olan tek
değerler) şeklinde alır ve verilen komuta göre bunları değiştirerek
sonucu yine 0'lardan ve 1'lerden oluşan çıktılar halinde verir. Sinyal
yollandığı zaman ilgili hatta bulunan voltaj o sinyalin değerini verir.
Örneğin 3.3 voltla çalışan bir sistemde 3.3 voltluk bir sinyal 1, 0
voltluk bir sinyal de 0 değerini üretir.
İşlemciler aldıkları sinyallere göre karar verip çıktı oluştururlar.
Karar verme işlemi her biri en az bir transistörden oluşan mantık
kapılarında yapılır. Transistörler, girişlerine uygulanan akım
kombinasyolarına göre devreyi açıp kapayabilen ve bu sayede de
elektronik bir anahtar görevi gören yarıiletken devre elemanlarıdır.
Modern işlemcilerde bu transistörlerden milyonlarca tanesi aynı anda
çalışarak çok karmaşık mantık hesaplarını yapabilirler. Mantık kapıları
karar verirken (yani akımın geçip geçmeyeceğini belirlerken) Boolean
Mantığı'nı kullanırlar. Temel Boolean operatörleri AND (ve), OR (veya)
ve NOT'tır (değil). Bu temel operatörlerle birlikte bunların değişik
kombinasyonları kullanılır, NAND (not AND) gibi.
Bir AND kapısının 1 değerini verebilmesi (yani akımı iletebilmesi için)
iki girişindeki değerin de 1 olması (yani iki girişinde de akım olması)
gerekir. Aksi takdirde 0 değerini verecek; yani akımı iletmeyecektir. OR
kapısında ise akımın iletilmesi için girişlerin ikisinde de akım olmalı
veya ikisinde de akım olmamalıdır. NOT kapısı ise girşindeki değerin
terisini çıkışına verir.
OR Kapısı [Resimleri görebilmek için üye olun veya giriş yapın.] AND Kapısı [Resimleri görebilmek için üye olun veya giriş yapın.] NOT Kapısı [Resimleri görebilmek için üye olun veya giriş yapın.] NAND kapıları çok kullanışlıdır, çünkü bu kapılar sadece iki transistör
kullanarak üç transistörlü AND kapılarından daha fazla işlevsellik
sağlarlar.
NAND Kapısı [Resimleri görebilmek için üye olun veya giriş yapın.] Bunların yanında NOR (not OR), XOR (eXclusive OR) ve XNOR (eXclusive not
OR) gibi değişik kapıların değişik kombinasyonlarından oluşan ve çok
daha farklı aritmetik ve mantık işlemleri için kullanılan kapılar
vardır.
Bu mantık kapıları dijital anahtarlarla beraber çalışırlar. Oda
boyutundaki bilgisayarların zamanında bunlar bildiğimiz fiziksel
anahtarlardı fakat günümüzde MOSFET (
Metal-
Oxide
Semiconductor
Field-
Effect
Transistor)
denen bir çeşit transistör kullanılır. Bu transistörün basit ama hayati
öneme sahip bir görevi vardır: Voltaj uygulandığında devreyi açarak
veya kapatarak tepki verir. Genel olarak kullanılan MOSFET türü, üst
sınırda veya ona yakın voltaja sebep olan bir akım uygulandığında
devreyi açar, uygulanan voltaj 0'a yaklaşınca da devreyi kapatır. Bir
programın verdiği komutlara göre milyonlarca MOSFET aynı anda çalışarak
gerekli sonucu bulmak için akımı gerekli mantık kapılarına yönlendirir.
Her mantık kapısı bir veya daha fazla transistör içerir ve her
transistör akımı öyle kontrol eder ki, sonuçta devre kapalıyken açılır,
açıkken kapanır veya mevcut durumunu korur.
<blockquote><blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote></blockquote>AND
ve OR kapılarının şemalarına bakarak nasıl çalıştıkları hakkında fikir
sahibi olabiliriz. Bu iki kapıda iki sinyal alıp onlardan bir sinyal
üretir. AND kapısından akım geçmesi için girişlerine uygulanan
sinyallerinin ikisinin düşük de voltajlı (0) veya ikisinin de yüksek
voltajlı (1) olması gerekir. OR kapısında ise giriş sinyallerinden
birinin değerinin 1 olması yeterlidir akımın geçmesi için.
Her girişteki elektrik akışını o girişin transistörü belirler. Bu
transistörler devrelerden bağımsız ayrı elemanlar değillerdir. Çok
miktarda transistör yarı-iletken bir maddenin (çoğu zaman silikonun)
üzerine yerleştirilip kablolar ve dış bağlantılar olmadan birbirine
bağlanır. Bu yapılara entegre devre denir ve ancak bu entegre devreler
sayesinde karmaşık mikroişlemci tasarımları yapılabilir.
Güncel işlemciler mikroskobik boyuttaki transistörlerin dirençler,
kondansatörler ve diyotlarla bir araya getirilmesinden oluşan
milyonlarca karmaşık mantık kapısından oluşur. Mantık kapıları entegre
devreleri oluştururken entegre devreler de elektronik sistemleri
oluşturur.
CISC ve RISC Kavramları Yıllar geçtikçe iki işlemci ailesi piyasaya hakim olmaya başladı: Intel
Pentium ve Motorola PowerPC. Bu iki işlemci aynı zamanda uzun yıllar
boyunca kullanılacak ve günümüze kadar değişmeyecek iki farklı mimariye
sahiplerdi.
CISC (
Complex
Instruction
Set
Computer),
geleneksel bilgisayar mimarisidir. İşlemci kendi üzerinde bulunan
microcode adlı minyatür bir yazılımı kullanarak komut setlerini
çalıştırır. Bu sayede komut setleri değişik uzunluklarda olabilir ve
bütün adresleme modellerini kullanabilirler. Bunun dezavantajı çalışmak
için daha karmaşık bir devre tasarımına ihtiyaç duyulmasıdır.
İşlemci üreticileri daha komlpleks (ve güçlü) işlemciler üretmek için
sürekli daha büyük komut setleri kullandılar. 1974 yılında IBM'den John
Cocke bir çipin daha az komutla çalışabilmesi gerektiğini düşündü ve
ortaya sadece sınırlı sayıda komut setleri kullanabilen RISC (
Reduced
Instruction
Set
Computer)
mimarisi çıktı. Bu mimaride komutların uzunluğu sabittir ve bu yüzden
de direk olmayan adresleme modu kullanılamaz. Sadece tek bir saat
döngüsünde veya daha az sürede çalıştırabilecek komutlar işleme
konabilir. RISC işlemcilerin en büyük avantajları komutları çok çabuk
işleyebilmeleridir çünkü bu mimaride komutlar çok basittir. Bu sayede
RISC işlemcileri tasarlayıp üretmek daha ucuzdur, çünkü bu basit
komutlar için daha az transistör ve daha basit devreler gerekir.
En Basit Haliyle Bir İşlemci <blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote>
Execution Unit (Core=Çekirdek):
Bu ünite komutları çalıştırır ve pipeline (işhattı) denen yollarla
beslenip tamsayıları kullanarak okuma, değiştirme ve komut çalıştırma
işlemlerini yapar. Artimetik hesaplamalar için
ALU (
Arithmetic and
Logic
Unit) denen aritmetik ve mantık üniteleri kullanılır, ALU için işlemcilerin yapıtaşıdır diyebiliriz.
Branch Predictor: Bu ünite bir program çalışırken başka bir satıra atlayacağı zaman hangi satırların işleme konacağını tahmin etmeye çalışarak
Prefetch (komutların bellekten ne zaman çağrılacağına karar verir ve komutları Decode ünitesine doğru sırayla gönderir) ve
Decode (bu ünite de kompleks makina dili komutlarını ALU'nun ve registerların
kullanabileceği basit komutlara dönüştürür) ünitelerine hız kazandırmaya
çalışır.
Floating Point Unit: Bu ünite tamsayı olmayan floating point (kayar nokta) hesaplamalarından sorumludur.
L1 Cache: İşlemci için önbellek. Önemli kodlar ve veriler bellekten buraya
kopyalanır ve işlemci bunlara daha hızlı ulaşabilir. Kodlar için olan
Code ve veriler için olan
Data cache olmak üzere ikiye ayrılır. Güncel işlemcilerde L2 (Level 2, 2.
seviye) önbellek de bulunur. Önceleri L2 önbellek anakartta bulunurdu.
Daha sonra slot işlemciler ortaya çıktı ve işlemci çekirdeğinin de
üzerinde bulunduğu kartuj şeklindeki paketlerde önbellek çekirdeğin
dışında ama işlemciyle aynı yapıda kullanılmaya başlandı. Bu kısa geçiş
döneminden sonraysa önbellek işlemci çekirdeklerine entegre edildi.
BUS Interface: İşlemciye
veri – kod karışımını geitirir, bunları ayırarak işlemcinin
ünitelerinin kullanmasını sağlar ve sonuçları tekrar birleştirerek
dışarı yollar. Bu arayüzün genişliği işlemcinin adresleyebileceği
hafızayı belirler. Örneğin 32 bitlik hafıza genişliğine sahip bir
işlemci 232 byte (4 GB) hafızayı adresleyebilir ve bu hafızadan aynı
anda 32 bit üzerinde işlem yapabilir. Günümüzde masaüstü pazarına 32
bitlik işlemciler hakimken sunucu uygulamarı ve bilimsel çalışmalar için
de 64 bitlik işlemciler yaygın olarak kullanılır. Bir işlemcideki bütün elemalar saat vuruşlarıyla çalışır. Saat hızı bir
işlemcinin saniyede ne kadar çevrim yapabileceğini belirler. 200 MHz
saat hızı 200 MHz olan bir işlemci kendi içinde saniyede 200 çevrim
yapabilir. Her çevrimde işlemcinin ne kadar işlem yapabileceği
işlemcinin yapısına göre değişir. Bu saat vuruşları anakart üzerindeki
Clock Generator denen yongayla üretilir. Bu yonganın içinde çok hassas
kristaller vardır. Bu kristallerin titreşimleri saat vuruşlarını
oluşturur.
Program
Counter (PC) denen birim
içinde çalıştırılacak bir sonraki komutun hafızadaki adresini
bulundurur. Bu komutun çalıştırılma zamanı geldiğinde kontrol ünitesi
komutu işlenmek üzere hafızadan alır ve işlemci üzerindeki Instruction
Register denen bölüme işlenmek üzere aktarır. Yazmaç da diyebileceğimiz
registerlar hafızadan verilerin veya kodların yazılabildiği geçici
saklama alanlarıdır.
İçindeki adresi gerekli
yazmaca aktaran PC daha sonra bir arttırılır ve bir sonraki komutun
zamanı geldiğinde Instruction Register'a aktarılmak üzere hazırda
beklemesi sağlanır. Komut işlendikten sonra hesaplamayı yapan birim
Status
Register
(SC) denen yazmacın değerini değiştirir, bu yazmaçta bir önceki işlemin
sonucu saklıdır. Kontrol ünitesi bu yazmaçtaki değeri kullanarak sonuca
göre gerekli komutları çalıştırabilir.
Bu okuduklarınızın tamamı komutun uzunluğuna ve işlemcinin mimarisine göre bir veya daha fazla saat vuruşunda yapılabilir.
Makina Dili Bir işlemcinin yaptığı işleri temelde üçe ayırabiliriz:
- Bir işlemci ALU'sunu veya FPU'sunu kullanarak tamsayılarla ve ondalık sayılarla matematiksel işlemleri yapabilir
- Verileri bir bellek alanından diğerine hareket ettirebilir.
- Verdiği karara göre bir programın farklı bir satırına atlayıp yeni bir komut çalıştırabilir. Bir programcının rahatlıkla anlayabileceği gibi bu üç temel işlem bir
programı çalıştırmak için yeterlidir. işlemciler komutları bizim
yazdıklarımızdan çok daha farklı bir şekilde algılarlar. Bir komut bit
(binary digit, 0 veya 1 değerini alabilen ikili sistemdeki basamaklar)
dizilerinden oluşur fakat bu bit dizilerini akılda tutmak çok zordur. Bu
yüzden komutlar bit dizileri yerine kısa kelimelerle ifade edilir ve bu
kelimelerden oluşan dile Assembly Dili denir. Bir assembler bu
kelimeleri bit dizilerine çevirerek işlemcinin anlayabileceği şekilde
hafızaya yerleştirir. Komutlara örnek verelim:
LOADA mem – bellek adresini A yazmacına yükle LOADB mem - bellek adresini B yazmacına yükle CONB con – B yazmacına sabit bir değer ata SAVEB mem – B yazmacını bellek adresine kaydet SAVEC mem - C yazmacını bellek adresine kaydet ADD – A ile B'yi toplayıp sonucu C'ye kaydet SUB – A'dan B'yi çıkartıp sonucu C'ye kaydet MUL – A ile B'yi çarpıp sonucu C'ye kaydet DIV – A'yı B'ye bölüp sonucu C'ye kaydet COM – A ile B'yi karşılaşıtırıp sonucu teste kaydet JUMP addr – adrese atla JEQ addr – eşitse adrese atla JNEQ addr – eşit değilse adrese atla JG addr – büyükse adrese atla JGE addr – büyük veya eşitse adrese atla JL addr – küçükse adrese atla JLE addr – küçük veya eşitse adrese atla STOP – işlemi durdur Şimdi aşağıdaki C kodlarının assembly diline derlendikten sonra neye benzediklerine bakalım.
a=1; f=1; while (a <= 5) { f = f * a; a = a + 1; } C bilmeyenler için kısaca anlatmakta fayda var: a değişkeni 5 olana
kadar her seferinde bir arttırılarak f değişkeninin değeriyle çarpılıyor
ve f değişkeninin değeri 5 faktöryel oluyor. Küme parantezleri içindeki
while döngüsü bittikten sonra parantez içindeki koşul tekrar kontrol
ediliyor ve doğru olduğu sürece döngü tekrar tekrar işleme konuyor.
Bir C derleyicisi bu kodları assembly diline çevirir. RAM'in 128,
assembly programını barındıran ROM'un da 0 numaralı hafıza adresinden
başladığını varsayarsak işemcimiz için yukarıdaki C kodları aşağıdaki
şekilde görünür:
// adres 128'deki a'yı al // adres 129'daki f'i al 0 CONB 1 // a=1; 1 SAVEB 128 2 CONB 1 // f=1; 3 SAVEB 129 4 LOADA 128 // a>5 ise 17'ye atla 5 CONB 5 6 COM 7 JG 17 8 LOADA 129 // f=f*a; 9 LOADB 128 10 MUL 11 SAVEC 129 12 LOADA 128 // a=a+1; 13 CONB 1 14 ADD 15 SAVEC 128 16 JUMP 4 // 4. satırdaki if koşuluna geri dön 17 STOP Şimdi bu komutların hafızada nasıl göründüğüne bakalım. Bütün komutlar
ikili sistemdeki sayılarla gösterilmeli. Bunun için her komuta
opcode denen bir numara verilir:
LOADA - 1 LOADB - 2 CONB - 3 SAVEB - 4 SAVEC mem - 5 ADD - 6 SUB - 7 MUL - 8 DIV - 9 COM - 10 JUMP addr - 11 JEQ addr - 12 JNEQ addr - 13 JG addr - 14 JGE addr - 15 JL addr - 16 JLE addr - 17 STOP - 18 Programımız ROM'da şöyle gözükür:
// adres 128'deki a'yı al // adres 129'daki f'i al Addr opcode/value 0 3 // CONB 1 1 1 2 4 // SAVEB 128 3 128 4 3 // CONB 1 5 1 6 4 // SAVEB 129 7 129 8 1 // LOADA 128 9 128 10 3 // CONB 5 11 5 12 10 // COM 13 14 // JG 17 14 31 15 1 // LOADA 129 16 129 17 2 // LOADB 128 18 128 19 8 // MUL 20 5 // SAVEC 129 21 129 22 1 // LOADA 128 23 128 24 3 // CONB 1 25 1 26 6 // ADD 27 5 // SAVEC 128 28 128 29 11 // JUMP 4 30 8 31 18 // STOP Gördüğünüz gibi C'de 7 satır tutan kod assemblyde 17 satıra çıktı ve
ROM'da 31 byte kapladı. Instruction Decoder (komut çözücü, bir önceki
başlıkta bahsettiğimiz Decode ünitesi), opcedeları alarak işlemcinin
içindeki değişik bileşenleri harekte geçirecek elektriksel sinyallere
dönüştürür.
Üretim İlk işlemciler valflar, ayrık transistörler ve çok kısıtlı bir şekilde
entegre edilebilmiş devrelerden oluşuyordu fakat günümüz işlemcileri tek
bir silikon yonga üzerine sığabiliyorlar.
Çip üretiminde temel madde bir yarıiletken olan silikondur. Üretim sırasında çeşitli işlemler yapılır. Önce silicon ignot denen
ilindirik bir yapı üretilir. Bunun hammaddesi saflaştırılmış silikondan
elde edilen bir çeşit kristaldir. Daha sonra bu silindirik yapı ince
ince dilimlenerek wafer denen dairesel tabakalar oluşturulur.
Wafer tabakaları yüzeyleri ayna gibi olana kadar cilalanır. Çipler bu
wafer tabakaları üzerinde oluşturulur. Aşağıdaki resimde bir wafer
tabakasıyla üzerindeki çipleri görebilirsiniz. <blockquote><blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote></blockquote>Çipler
üst üste katmanlardan oluşur ve bu katmanlar için değişik hammaddeler
vardır. Örneğin yalıtkan yüzey olarak silikon dioksit kullanılırken
iletken yollar ploisilikonla oluşturulabilir. Silikona iyon bombardımanı
yapılarak silikondan transistörler üretilir ve bu işleme
doping denir.
Bir katman
photoresist (ışığa duyarlı) bir maddeyle kaplanır ve
bu katmana istenen şeklin görüntüsü projeksiyonla yansıtılır. Bu
işlemden sonra ışığa maruz kalan yüzey maskelenir ve kalan madde bir
çözücü yardımıyla temizlenir. Maskelenen bölümde transistörler ve yollar
oluşturulduktan sonra
etching denen kimyasal bir işlemle
istenmeyen maddeler katmandan uzaklaştırılarak katmana son şekli
verilir. Bu işlem bütün çip hazır olana kadar her katman için ayrı ayrı
yapılır. Katmanlardaki yapılar bir metrenin milyonda birinden daha küçük
olduğu için bir toz tanesi bile (toz tanelerinin boyutları 100
mikronluk ölçülere kadar çıkabilir ki bu da işlemcideki yapıların 300
katından daha büyüktür) çok büyük problemler çıkarabilir. Bunun için
koruyucu giysilerle girilebilen tozsuz odalarda üretim yapılır.
Başlarda yarı-iletken üretiminde hata payı %50 civarındaydı ve çoğu
zaman üretilen çiplerin ancak yarıya yakını sağlam çıkıyordu. Bu oran
%100 olamasa da geliştirilen üretim teknikleriyle günümüzde oldukça
yükselmiştir. Wafera eklenen her katmandan sonra testler yapılır ve
hatalar tesbit edilir.
Die denen wafer üzerindeki ”çıplak” çipler
birbirinden ayrılır ve yapılan testlerden sonra sağlam olanlar
kullanıma uygun şekilde paketlenir. Günümüzde işlemciler
PGA(
Pin
Grid
Arrays) formunda paketlenir. Bu paketlerde seramik bir dörtgenin altına dizilmiş
pin denen bağlantı noktaları vardır. İşlemci çekirdekleri paketlendikten sonra aşağıdaki gibi görünür.
<blockquote><blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote></blockquote>Intel'in
entegre çip tasarımıyla üretilen ilk işlemcisi olan 4004 10 mikronluk
bir üretim tekniğiyle üretiliyordu. İşlemci içindeki en küçük yapı bir
metrenin on milyonda biri kadardı. Günümüzdeyse 0,13 mikronluk üretim
teknikleri kullanılıyor ve çok yakında 0,1 mikronun da altına inilecek.
Moore Yasası 1965 yılında Intel'in kurucularından Gordon Moore'un ortaya attığı Moore
Yasası'na göre işlemcilerdeki transistör sayısı 18 ayda bir ikiye
katlanır. Moore, bu yasanın sonraki on yıl boyunca geçerliliğini
koruyacağını tahmin etmişti ama Intel bu yasayı günümüze kadar
çiğnemeden devam ettirmeyi aşağıdaki grafikte de görebileceğiniz gibi
başardı.
<blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote>Fizik
yasaları, mühendislerin saat hızlarını sonsuza kadar arttırabilmelerini
engeller. Silikonun sınırlarına neredeyse ulaşılmak üzereyken saat
hızlarının hala arttığını görüyoruz. Saat hızı her zaman performans
anlamına gelmiyor, bu yüzden mühendisler işlemcilerin her saat vuruşunda
daha fazla komutu işleyebilmeleri için de uğraşıyorlar aynı zamanda. 4
bitlik bir işlemci bile iki tane 32 bitlik sayıyı toplayabilir ama bunun
için pek çok komutu işlemesi gerekir. 32 bitlik bir işlemci bu
toplamayı tek bir komutla yapabilir.
İşlemcilerin saat vuruşlarında işlem yaptıklarını söylemiştik. Normal
yöntemlerle bir komutu yüklemek, çözmek, kullanacağı veriyi almak,
çalıştırmak ve son olarak da sonucu yazmak için beş saat vuruşu gerekir.
Bu sorunu çözmek için günümüz işlemcileri pipelining denen teknolojiyi
kullanılır. Bu teknolojide bir işlemi yapmak için değişik aşamalar ard
arda dizilir ve bir işlemin bir aşaması yapılırken boştaki kaynaklarla
da başka bir işlemin herhangi bir aşaması yapılabilir. Bu teknolojiyle
bir komutu tek bir saat vuruşunda bitirebilmek mümkün olur.
Superscalar denen bir mamariyle paralel pipellinelar kullanılarak performans daha da arttırılabilir. Bu konudaki son gelişme Intel'in
Hyperthreading teknolojisidir.
Komutları paralel olarak çalıştırmak için çift işlemciye ihtiyaç
duyulur. Bu teknolojideyse olaya şu şeklide yaklaşılır: Komutlar
thread denen parçalardan oluşur ve çift işlemciyle komut seviyesinde
paralellik yerine tek işlemciyle thread seviyeinde paralellik sağlanır.
Komutlar threadlere ayrılır ve bu threadler paralel olarak işlenip
çıkışta tekrar birleştirirler. Tek bir işlemci tam anlamıyla olmasa da
belirli bir seviyede çift işlemci gibi çalışır. Bu yöntem sadece tek bir
işlemcinin kaynakları kullanıldığı için çift işlemcinin yerini tutamasa
da bazı uygulumalarda belirli bir performans artışı sağlar. En büyük
dezavantajı komutların parçalanıp tekrar birleştirilmesi sırasında
kaybedilen zaman yüzünden aynı anda birden çok komutun işlenmesine
ihtiyaç duymayan programlarda az da olsa performans düşüşü yaşanmasıdır.
Bir İşlemcinin Performansı Bir işlemcinin performansını belirleyenler arasında kullanıcıların en çok tartıştıkları aşağıdakilerdir:
- İşlemci Mimarisi: Burayı
çoğu kimse atlasa da en önemli etken budur. Bir işlemcinin bir saat
döngüsünde ne kadar uzunlukta kaç tane komutu aynı anda işleyebildiğini
saat hızı ya da önbelleği değil sadece mimarisi belirler. - Saat Hızı:
İşlemcinin çalışma frekansıdır ve günümüzde GHz mertebesine kadar
ulaşmıştır. Saat hızı ne kadar yüksek olursa saniyedeki saat vuruşu (ve
işlemci çevrimi) sayısı da o kadar yüksek olacağından saat hızının
performansa etkisi oldukça yüksektir. Yalnız burada yapılabilecek çok
büyük bir hata farklı mimarideki işlemcileri saat hızlarına göre
karşılaştırmaktır. Saat hızı kullanılarak ancak aynı işlemci ailesi
içinde gerçekçi karşılaştırmalar yapılabilir. Bir işlemcinin saat hızını
sistem hızıyla (FSB, Front Side Bus)
işlemcinin çarpanının çarpımı belirler. Sistem hızı fazla yüksek olmasa
da işlemci kendi içinde çarpanlarını kullanarak çok daha yüksek hızlara
çıkabilir. Örneğin oldukça popüler olan 1.8 GHz hızında çalışan bir
Pentium 4 işlemci 18×100 MHz'te çalışır. - L1/L2 Cache:
Önemli veriler işlemcinin ihtiyaç anında onlara daha hızlı ulaşabilmesi
için önbellekte tutulur. 1. seviye önbellek daha önceliklidir ve
buradaki verileri işlemci daha çok kullanır. Önbellek miktarlarını
karşılaştırırken işlemci mimarisi yine çok önemlidir. Mesela 16 KB L1
cache bir Pentium 4 için yeterliyken aynı performansta çalışan bir AMD
Athlon işlemcide 128 KB L1 cache bulunur. Önemli olan önbelleğin ne
şekilde kullanıldığıdır. Ham işlemci performansını ifade etmek için
MIPS (
Million
Instructions
Per
Second, saniyede işlenebilen komut sayısı) ve
MFLOPS (
Million
Floating Point
Operations
Per
Second,
saniyede yapılabilen kayar nokta hesabı) birimleri kullanılır ve
performans konusunda evrensel geçerliliği olan tek kavramlar bunlardır.
Yazılım Uyumluluğu Bilgisayarların ilk günlerinde herkes kendi yazılımını yazdığı için
işlemci mimarisi biraz daha arkaplandaydı. Geçen zamanla birlikte
yazılımlar da oldukça gelişti ve bugünse yazılım başlı başına bir
sektör. Günümüzde her ihtiyacımız için oturup kendi yazılımlarımızı
hazırlmamamız imkansız, bir o kadar da gereksiz. Belirli bir
standartlaşmayla beraber işlemcilerin önemi de arttı.
Günümüz PC'leri Intel 80×86 mimarisini kullanır. Bu mimari 70'li
yıllardan bugüne kadar gelmiştir, güncel CISC işlemciler hala bu
mimariyi kullanır. Bu standartlaşmanın sonucu olarak programlar
işlemcilere göre değil komut setlerine göre yazılır ve 80×86 mimarisine
göre yazılmış bir programın bir Intel işlemcide çalışıp da bir AMD
işlemcide çalışmaması (ya da bunun tersi) mümkün değildir. İşlemcilere
özel bazı ek komut setleri olsa da (SSE, 3D Now! gibi) bunlar sadece
işlemciye yönelik optimizasyonlardır ve programlar temelde aynıdır.
80×86 miamarisine göre yazılmış 32 bitlik bir program aynı mimarideki 32
bitlik bütün işlemciler tarafından sorunsuzca çalıştırılabilir.