Birden fazla çekirdek kullanmak için tek iş parçacıklı bir program yapılabilir mi?


12

Başlık her şeyi söylüyor: Birden fazla CPU çekirdeği kullanmak için tek bir CPU çekirdeği kullanmak üzere tasarlanmış eski bir program edinmenin bir yolu var mı?


13
Hayır, mümkün değil.
Moab

5
Keşke o kadar kolay olsaydı ..
Brendan Long

1
Bir işlemciyi (belki de bir vm gibi) 'taklit eden', ancak çok çekirdekli CPU'nuzu alan ve iş parçacığı başına çok daha fazla işlem gücüne sahip tek çekirdekli bir CPU taklit eden bir program olsaydı ne olurdu? Mümkün mü?
schizoid04

Birden çok iş parçacığı arasındaki senkronizasyonu kim yönetecek, çünkü sipariş önemlidir.
user36582

Yanıtlar:


16

Ne yazık ki, tek bir CPU için yazılmış eski bir program birden fazla CPU çekirdeği kullanmaya zorlanamaz. Birden fazla CPU çekirdeğinin kullanılması, yarış koşullarının ve diğer sorunların ortaya çıkmamasını sağlarken birbirleriyle iletişim kurması gereken birden fazla iş parçacığı gerektirir. Eski bir uygulama, yeniden yazılmadığı sürece ve yalnızca uygulamanın doğası paralelleştirilmesine izin veriyorsa, CPU çekirdeğinden fazlasını kullanmak için yapılamaz.


19
Ayrıca, bazı uygulamaların birden fazla çekirdeği dikkate almak için yeniden yazılamayacağını da belirtmek gerekir. Çoğunlukla sürecin ne kadar paralelleştirilebilir olduğuna bağlıdır. Paralel hale getirilemeyen sürece basit bir örnek insan üremesi olacaktır: Bir kadın 9 ayda bir çocuk yapabilir. Dokuz kadın 9 ayda 9 çocuk yapabilir, ancak bir ayda tek bir çocuk üretmek için 9 kadını kullanamazsınız.
AndrejaKo

1
Prensipte, kişi başka bir programı analiz etmek ve paralel hale getirmeye çalışmak için bir program yazabilir. Bununla birlikte, bu sorunun çok sınırlı "kolay" versiyonları bile Ph.D. son birkaç neslin tezleri ve ilerleme yavaş olmuştur. Tam sorun AI-tamamlanmış olabilir.
dmckee --- eski moderatör yavru kedi

Harika, hepinize teşekkür ederim, özellikle kadınlardan bahsederken bana Kadınlarınız ve doğum örneğinizle grion yaptınız: D
Chris

bir program daha sonra birbiri için kullanılan bir grup bağımsız matematik işlemine sahipse ne olur? belki ikinci bir iplik programı ayrıştırabilir, hmm ne dediğimi bilmiyorum. Eğer bir iplik montajı ayrıştırabilirse .. "burada pahalı işlem yap, sonra ilk pahalı işlem dokunmazsa ikinci pahalı işlem yap" tamam bir iş parçacığına pahalı bir işlem koyacağım, diğerine senkronize et geri ana iş parçacığına. Herhalde bağımsız pahalı işlemleri tanımlamak için bir programın önceden ayrıştırılması gerektiğini düşünüyorum.
CausingUnderflowsEverywhere

13

Hedefiniz nedir? Artan performans? Ne yazık ki sadece 1 çekirdeği kullanmak üzere tasarlanmış uygulamalar daha fazlasını kullanmaz. İşte bu "çok iş parçacıklı" uygulamalar hakkında konuşulan şey.


2

Tek bir çekirdek kullanmak üzere tasarlanmış bir programda birden fazla işlemciyi kullanmak için en az üç teknik vardır. Bu tekniklerin en açık olanı, birden çok çekirdek kullanan veya en azından kısmen uygulama koduna paralel olarak çalışabilen kütüphaneleri ve sistem kodunu kullanmaktır. Çöp toplama, paralelleştirilebilen ve uygulama yürütmeye paralel olarak yapılabilecek bir işlevsellik örneğidir. Otomatik bellek yönetimi olmasa bile, bellek ayırma işlevlerinde paralellik potansiyeli vardır, çünkü bellek ayırıcı, bellek bölümünü kullanılabilir olarak işaretlemenin ötesinde bir şeyler yapabilir.

İkinci teknik ikili çeviri. Bu "uygulamayı yeniden yazma" olarak düşünülse de, yazılım tarafından ve kaynak koduna erişim olmadan yapılır. İş parçacığı düzeyinde paralellik üretmek, ikili çeviri kullanarak çoğu araştırma ve geliştirmenin ana hedefi gibi görünmemektedir (bu genellikle farklı bir ISA'da eski kod çalıştırmak, ISA uzantılarını kullanmak veya belirli bir mikro mimariyi optimize etmek ve daha yüksek bilgiler sağlamak için dinamik bilgileri kullanmakla ilgilidir. kalite profiliyle yönlendirilmiş optimizasyon), ancak potansiyel açıktır.

Üçüncü bir teknik, spekülatif çoklu kullanımdır. Şu anda (bildiğim) hiçbir işlemci donanım tarafından yönetilen spekülatif çoklu iş parçacığını desteklemiyor. Bununla birlikte, donanım işlemsel belleğin piyasaya sürülmesiyle, HTM bellek kullanımındaki çatışmaları tespit etmek için kullanılabileceğinden, bir çalışma zamanı sistemi uygulamasına sahip olmak biraz daha pratik hale gelir. Yazılım tarafından yönetilen spekülatif çoklu kullanım tipik olarak bazı ikili çevirileri içerir, ancak spekülatif doğası ayrı bir teknik düşünülmesini haklı çıkarır.

Bu tekniklerin pratikliği, mevcut sistemlerle ilişkili maliyetler (dişler ve yumurtlama iplikleri arasındaki iletişim maliyeti dahil), yararlanabilecekleri sınırlı paralellik ve sınırlı yatırım getirisi (faydalı olabilecek önemli uygulamalar) ile sınırlıdır paralelleştirilmiş yeniden yazılması muhtemeldir, bu tür tekniklerden (özellikle tek bir çekirdeğin birden fazla çekirdekten daha yüksek bir frekansta çalışmasına izin veren güç / termal limitleri ile) birçok uygulama nispeten az fayda sağlayacaktır ve geliştirme maliyetleri önemlidir. Yine bu tekniklerin yapmak mevcut olup, tek bir çekirdek parçasının kullanılması için tasarlanmış bir uygulama ile çoklu çekirdek kullanımı teorik olarak mümkündür.


0

Hayır olamaz. Bir program açıkça birden çok çekirdeği kullanacak şekilde yazılmıştır. İşi birden fazla çekirdekte yapmak önemsiz değildir. Tüm evrelerin senkronizasyonunu gerektirir. Biri topu atar, diğeri yakalar, biri topu parlatır, biri temizler, biri topu içinde iyi miktarda hava olup olmadığını kontrol eder. Şimdi her karakterin birbirinden bağımsız olarak bir iş parçacığında çalıştığını düşünün. Birisi atılmadığında topu yakalamaya çalışır. Ya da birisi top oynarken topu cilalamaya çalışır. Ya da topu aynı anda yakalayıp fırlatmaya çalışan iki karakter. Çökmenin birçok yolu var. Bu nedenle, programcıların tek bir çekirdek uygulamayı dikkatlice yeniden tasarlamaları gerekir, böylece birden fazla çekirdeğin avantajlarından yararlanabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.