Çoklu kullanım

Çoklu kullanım (İngilizcesi: ) özelliğine sahip bilgisayarlar birden fazla iş parçacığını donanım desteği sayesinde çalıştırabilir. Çoklu işlem yapabilen sistemlerden gelişen bu yöntem tek bir çekirdeğin kaynaklarını paylaşmak zorundadır. Bu kaynaklar: aritmetik mantık birimi, yazmaçlar (registers), işlemci ön belleği ve adres dönüştürme ön belleğidir. Çoklu işlem yapabilen sistemlerde (çok çekirdekli), işlem birimlerinin tamamı ayrı çekirdeklerde olmasına rağmen, çoklu kullanım tek bir çekirdeğin kullanılabilirliğini iş-parçacığı seviyesinde ve buyruk düzeyinde daha verimli hale getirir. Bu iki teknik birbirini tamamlayan tekniklerdir.

Tek bir iş parçacığının ya da tek bir programın hızlandırılması ne kadar zor olsa da, çoğu bilgisayar sistemi gerçekte birden fazla iş parçacığı veya program için çoklu görevlendirme kullanılmaktadır.

Bir iş parçacığı aradığı veriyi ön bellekte bulamıyorsa, diğer iş parçacıkları kullanılmayan kaynaklar ile işlerine devam edebilirler. Bu da, normalde kaynaklar bekleme durumunda olacağı ve çoklu kullanım sayesinde kullanılabildikleri için genel sistemde başarım artışını sağlar.

Eğer birkaç iş parçacığı aynı veri kümesini kullanıyorsa, iş parçacıkları ön belleği paylaşarak daha verimli ön bellek kullanımını ve senkronizasyonu sağlarlar.

Çoklu kullanım iş parçacıklarını işlemci üzerindeki farklı kaynaklara yönlendirdiği için işlemci üzerindeki sıcaklık yayılacak bu da sıcaklığın tek noktada toplanmasını engelleyerek soğutmanın daha verimli yapılabilmesini sağlayacaktır.

Tek bir iş parçacığının çalışması hızlanmak yerine yavaşlayabilir. Bunun sebebi de gerçekleştirim için gereken işlemci sıklığındaki azalma veya boru hattına eklenen fazladan aşamalardır.

Çoklu kullanımın donanım desteği daha çok yazılım tabanlıdır ve uygulama programlarında ve işletim sisteminde çoklu işlemeye göre daha fazla değişikliğe ihtiyacı vardır.

Sonuçlar değişken olsa da, Intel HyperThreading teknolojisi ile %30 civarında fayda sağladığını belirtmiştir. Hyperthreading, bağımlı kayan nokta işlerlerini paralelde yaparak %100 fayda sağlayan bir sentetik programdır. Öte yandan, verileri önceden yakalayan assembly-tabanlı programlar, mesela iyi video kodlayıcıları, ön bellekte verinin bulunamaması veya boşta bekleyen kaynaklar gibi sorunları olmadığı için çoklu işlemeden yararlanamazlar. Bu yüzden de iş parçacıklarının paylaştığı kaynaklarda oluşabilecek sorunlar yüzünden başarımlarında düşüş gözlenebilmektedir.

Çoklu işlemenin en basit türü, bir iş parçacığı yürütülürken bir olay tarafından uzun bir süre bekletilmesi gerektiği zaman gerçekleşir. Bu beklemenin sebepleri ana belleğe erişim olabilir ki bu olayda verinin bulunması yüzlerce işlemci vuruşu sürmektedir. Olayın sonçuçlanmasını beklemek yerine, iş parçacıklarını kullanan bir işlemci bu sırada hazır olan başka bir iş parçacığını yürütmek için çağırabilir. Beklenen veri bulunduğunda ise önceki iş parçacığı hazır kuyruğuna sokulur. Sıra geldiğinde de yürütülmeye devam eder.

Kavramsal olarak, işletim sistemlerindeki çoklu görevlendirmeye benzemektedir. Çoklu görevlendirmede de görevler bir olay bekledikleri sırada kendi istekleri ile çalışma zamanlarından vazgeçerler ve olay olduğu zaman tekrar çalışmalarına devam ederler.

Çoklu kullanım yapabilen donanımın amacı, bir şekilde çalışması engellenen iş parçacığı ile çalışmaya hazır iş parçacığının çok hızlı bir şekilde yer değiştirmesidir. Bu amaca ulaşmanın maliyeti, program tarafından kullanılan ve bazı işlem kontrolünde kullanılan yazmaçların kopyalanmasıdır. Bir iş parçacığından diğerine geçmek demek, neredeyse bütün bir yazmaç bloğunu değiştirmek demektir.

Her iş parçacığı tek başına yürütülüyormuş ve kaynakları başka iş parçacıklarıyla paylaşmıyormuş gibi düşünülebilir. Bu durum yapılması gereken yazılım değişikliklerini ve işletim sistemi değişikliklerini azaltır.

İş parçacıkları arasında etkin bir şekilde geçiş yapabilmek için her aktif iş parçacığının kendisine ait yazmaç bloğu olmalıdır. Örneğin iki iş parçacığı arasında çabuk bir geçiş sağlayabilmek için yazmaçların iki kere tanımlanması gerekir.

Bu tip çoklu kullanımın amacı, boru hattında veri bağımlılıkları yüzünden oluşan beklemeleri ortadan kaldırmaktır. Bir iş parçacığı diğerlerinden tamamen bağımsız olduğu için, boru hattındaki bir buyruğun daha eski bir buyruktan veri beklemesi pek olası değildir.

Bu tür çoklu kullanıma ilk olarak Fıçı işleme(Barrel processing) denilmişti. Bunu sebebi boruhattı aşamalarının ve yürütülen iş parçacıklarının bir fıçının tahtalarına benzetilmesiydi. Dönüşümlü, Öncelikli, zaman-dilimli çoklu kullanım daha modern isimleridir.

Blok türündeki çoklu kullanıma ek olarak, dönüşümlü çoklu kullanımda iş parçacığının kimliğini(ID) takip edebilmek için fazladan boruhattı aşamaları bulunmaktadır. Aynı zamanda boruhattında eşzamanlı çalışan daha fazla iş parçacığı olduğundan ön bellek ve adres dönüştürme ön belleği gibi kaynakların daha büyük olması gerekmektedir.

Çoklu kullanımın en gelişmiş ve superscalar işlemcilere uygulanan türüdür. Normal bir superscalar işlemci her vuruşta bir iş parçacığından birden fazla buyruk işler. Eş zamanlı çoklu işlemede ise işlemci birden fazla iş parçacığından birden fazla buyruk işler. Bir iş parçacığının limitli sayıda buyruk düzeyi paralelliğe erişebileceği göz önüne alınırsa, bu tür çoklu işleme birden fazla iş parçacığında paralellik sağlayarak boşa giden buyruk işleme slotlarını engeller.

Dönüşümlü çoklu kullanımdakine ek olarak eşzamanlı çoklu kullanımda, her boruhattı aşamasında iş parçacığı kimliklerinin takibinin maliyeti olacaktır. Bu yöntemde de aktif iş parçacıklarının sayısına göre ön bellek ve adres dönüştürme ön belleği yeniden boyutlandırılmalıdır.

Başka bir geniş araştırma alanı da iş parçacıkları zamanlayıcısıdır. Zamanlayıcı en çabuk şekilde hazır kuyruğunda yürütülmeyi bekleyen iş parçacıkları arasından bir sonraki iş parçacığını seçmek ve aynı zamanda da hazır kuyruğunu ve bekleme kuyruğunu düzende tutmakla yükümlüdür. Zamanlayıcı tamamen donanımda, tamamen yazılımda veya ikisinin birleşimi olarak gerçekleştirilebilir.

Diğer bir araştırma alanı ise ne tür olayların iş parçacıkları arasında değişime yol açacağıdır. Ön bellekte bulamama, iş parçacıkları arası iletişim, DMA vs.

Eğer çoklu kullanım şeması tüm durum bilgisini kopyalıyorsa (ayrılmış kontrol yazmaçları, ADÖ, vs.) bu durumda her bir iş parçacığı için bir sanal makine yaratıyor demektir. Bu şekilde her iş parçacığı aynı işlemci üzerinde kendi işletim sistemi üzerinde çalışıyor gibi olmaktadır. Öte yandan kullanıcı-modu durum bilgisi kaydedilseydi, daha çok iş parçacığının aktif olması için daha az donanım gerekli olacaktı.