Python'un CPU kullanımı nasıl arttırılır?


20

Bazı algoritmaları çalıştırmak için Python kullanıyorum ve hangi Python kullandığımdan bağımsız olarak birçok versiyon denedim, CPU kullanımı% 25'e kadar çıkıyor. Python neden diğer CPU kaynaklarımdan faydalanmıyor? Hizmetin önceliğini normalden yükseğe, sonradan gerçek zamana değiştirdim, aradakiler yeniden başladı, ama hiçbir şey değişmedi.

Python'un CPU'mun% 50'sini veya hatta daha fazlasını kullanmasını sağlamanın bir yolu var mı?


işlemciniz çok çekirdekli işlemci nedir?
Usta Geek

evet, bir i5-480M ve kontrol panelinde> güç seçenekleri> cpu min / max% 100
Christos K.

Yanıtlar:


19

Oldukça basit, tek bir dişli uygulamayı 4 mantıksal çekirdeğe sahip bir sistemde çalıştırıyorsunuz - örneğin, tüm çekirdeği kullanan bir işleminiz var.

Çok iş parçacıklı olması için algoritmayı yeniden yazmanız gerekecek (ve bu önemsiz değildir) veya CPU'nuzu daha fazla kullanmak için belirli çekirdeklerde yalnızca 2 veya daha fazla örnek çalıştırabiliyor musunuz bakmanız gerekecek. Başka yol yok.


Bunun böyle olacağından korkuyordum, ancak cpu kullanım şemalarında windows görev yöneticisinde algoritma yürütülürken 1 şema üzerinde bir seçim göremiyorum, aksine hepsinde önemli bir artış görüyorum.
Christos K.

1
Sisteminiz, yükleri çekirdekler arasında dengeliyor. Yine de, aynı anda iki çekirdek kullanılmaz.
gronostaj

çocuklar korkularımı onayladınız, sanırım diş açma hakkında okumaya başladığım zaman geldi
Christos K.

@ fractal_7: Threading beklediğiniz faydaları getirmeyebilir. Aşağıdaki cevaba bakınız.
Roland Smith

14

Python dili çok çekirdekli işlemcilerden önce gelir, bu yüzden onları yerel olarak kullanmaması garip değildir.

Ayrıca, tüm programlar birden fazla çekirdekten kazanç elde edemez. Bir sonraki adımın önceki adımın sonuçlarına bağlı olduğu adımlarla yapılan bir hesaplama, daha fazla çekirdek kullanarak daha hızlı olmayacaktır. Vektörleştirilebilecek problemler (aynı hesaplamayı büyük veri dizilerine uygulamak), tek tek hesaplamalar bağımsız olduğu için çoklu çekirdeklerin kullanımı nispeten kolay olabilir.

Çok fazla hesaplama yaparken, numpy kullandığınızı varsayıyorum ? Değilse, kontrol edin. ATLAS gibi optimize edilmiş doğrusal cebir kütüphanelerini kullanabilen C dilinde yazılmış bir eklentidir. Standart Python ile karşılaştırıldığında, sayısal hesaplamaları önemli ölçüde hızlandırabilir.

Bunu söyledikten sonra python ile çoklu çekirdek kullanmanın birkaç yolu vardır.

  • Yerleşik multiprocessingmodül. multiprocessing.PoolSınıf ile çok sayıda işlemci üzerinde vektörelleştirmeyi sağlar map()ve ilgili yöntemler. Yine de burada bir takas var. İşlemler arasında büyük miktarda veri iletmeniz gerekiyorsa, bu ek yük birden çok çekirdeğin avantajını olumsuz etkileyebilir.
  • Uygun bir numpy yapı kullanın. Numpy çok iş parçacıklı bir ATLAS kütüphanesi ile oluşturulmuşsa, büyük problemlerde daha hızlı olacaktır.
  • Numexpr , paralel python , corepy veya Copenhagen Vector Byte Code gibi uzatma modülleri kullanın .

Not threadingmodül bu konuda o kadar yararlı değildir. Bellek yönetimini basit tutmak için, genel yorumlayıcı kilidi ("GIL"), bir kerede yalnızca bir iş parçacığının python bayt kodunu çalıştırmasını zorlar. Numpy gibi harici modüller ise dahili olarak birden fazla iplik kullanabilir.


Şimdiye kadar python 2.7 ironpython kullandım ve pypy'i denedim. numpy'ye bir şans vereceğim. ancak yine de herhangi bir çok işlemcili modülü kullanmadan önce okumak zorunda kalacağım.
Christos K.
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.