Ana içeriğe geç

Paralellik

İngilizcesi
Parallelism
Okunuşu
perılelizım
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/parallelism

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

CPU yoğun bir iş için bütün çekirdekleri kullanmak (Python)python
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

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar