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ı?
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ı?
Yanıtlar:
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.
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.
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.
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.