Paralellik
- İngilizcesi
- Parallelism
- Okunuşu
- perılelizım
Kısaca
Paralellik, birkaç hesaplamayı birden çok CPU çekirdeğinde, GPU'da ya da makinede gerçekten aynı anda çalıştırmaktır; böylece büyük bir iş daha hızlı biter.
Programlamada paralellik (parallelism) nedir?
Günümüz bilgisayarlarının çok sayıda çekirdeği, bir GPU'nun da binlerce küçük çekirdeği vardır. Paralel kod işi bunların aynı anda çalışacağı şekilde böler: bin görüntüyü sekiz çekirdekte yeniden boyutlandırmak ya da bir sinir ağının içindeki büyük matrisleri bir GPU'da çarpmak gibi. Veri paralelliği aynı işlemi verinin farklı parçalarına uygular; görev paralelliği ise farklı görevleri aynı anda çalıştırır.
Çoğu dil bunun için araçlar sunar. Java, C#, Go, Rust ve C++'ta thread'ler paralel çalışabilir. Python'da standart CPython yorumlayıcısının global yorumlayıcı kilidi (GIL) uzun zamandır aynı anda yalnızca tek bir thread'in Python kodu çalıştırmasına izin verir; bu yüzden CPU yoğun işler multiprocessing ya da concurrent.futures üzerinden ayrı süreçler kullanır; yine de yeni sürümler GIL'siz deneysel bir derleme sunuyor.
Hızlanmanın sınırları vardır. 1967'den gelen Amdahl yasası, programın sırayla çalışması gereken kısmının toplam kazancı sınırladığına dikkat çeker: işin onda biri paralelleştirilemiyorsa, hiçbir çekirdek sayısı onu on kattan fazla hızlandıramaz. İşi bölmek, veriyi taşımak ve sonuçları birleştirmek de zaman alır; bu yüzden küçük işler paralelleştirildiğinde yavaşlayabilir.
Sık yapılan bir yanlış, paralellik ile eşzamanlılığın (concurrency) aynı şey olduğunu düşünmektir. Eşzamanlılık, bir programı aynı anda birçok işle ilgilenecek şekilde yapılandırmaktır; görevler arasında geçiş yaparak tek bir çekirdekte bile işler. Paralellik ise birkaç şeyi gerçekten aynı anda yapmaktır ve birden fazla işlemci gerektirir.
Önemli noktalar
- Paralellik, hesaplamaları birden fazla işlemcide aynı anda çalıştırır.
- Veri paralelliği veriyi böler; görev paralelliği farklı görevleri çalıştırır.
- CPU yoğun Python işleri GIL yüzünden genellikle süreçler kullanır.
- Amdahl yasası: sıralı kısım en yüksek hızlanmayı sınırlar.
- Eşzamanlılık yapıyla, paralellik eşzamanlı yürütmeyle ilgilidir.
Örnek
from concurrent.futures import ProcessPoolExecutor
import math
def count_primes(limit):
return sum(1 for n in range(2, limit) if all(n % d for d in range(2, math.isqrt(n) + 1)))
chunks = [200_000] * 8
if __name__ == "__main__":
# Each chunk runs in its own process, so all cores work at the same time
with ProcessPoolExecutor() as pool:
results = list(pool.map(count_primes, chunks))
print(sum(results))Sık sorulan sorular
Eşzamanlılık (concurrency) ile paralellik arasındaki fark nedir?
Eşzamanlılık, birden çok görevi örtüşen zamanlarda, gerekirse tek bir çekirdekte aralarında geçiş yaparak ele almaktır. Paralellik ise birden çok görevi birden çok çekirdekte aynı anda yürütmektir. Kod paralel olmadan eşzamanlı olabilir.
Paralel kod her zaman daha mı hızlı çalışır?
Hayır. İşi bölmek ve sonuçları birleştirmek zaman alır, sıralı kısım hızlandırılamaz, paylaşılan veri de koordinasyon ister. Küçük ya da I/O ağırlıklı işlerde paralellik çok az fayda sağlayabilir ya da hiç sağlamayabilir.
GPU'lar paralellikte neden iyidir?
Bir GPU'da, aynı işlemi aynı anda birçok veri parçası üzerinde çalıştırmak için tasarlanmış binlerce basit çekirdek vardır. Bu grafiklere, matris hesaplarına ve sinir ağı eğitimine çok iyi uyar.
Sık karşılaştırılanlar
İlgili sayfalar
- EşzamanlılıkProgramlamanın Temelleri, s. 19Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerleyebilme yeteneğidir; örneğin birçok kullanıcıya aynı anda hizmet vermek gibi.
- Threadİşletim Sistemleri, s. 34Thread, işletim sisteminin zamanlayabileceği en küçük yürütme birimidir; bir process içinde çalışır ve o process'in belleğini diğer thread'lerle paylaşır.
- Processİşletim Sistemleri, s. 23Process, bir programın çalışan örneğidir; işletim sistemi tarafından yönetilen kendi bellek alanına, kaynaklarına ve en az bir yürütme iş parçacığına sahiptir.
- Async/AwaitProgramlamanın Temelleri, s. 2Async/await, asenkron kodu sıradan adım adım kod gibi okunur biçimde yazmayı sağlayan, her await'te bir promise ya da görev bitene dek duran sözdizimidir.
- Race Conditionİşletim Sistemleri, s. 24Race condition, programın sonucunun paylaşılan veriyi aynı anda kullanan thread, process veya isteklerin öngörülemeyen zamanlamasına bağlı olduğu hatadır.
- Big O gösterimiProgramlamanın Temelleri, s. 4Big O gösterimi, girdi büyüdükçe bir algoritmanın çalışma süresinin ya da bellek kullanımının nasıl arttığını, kesin hız yerine büyüme oranıyla anlatır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin