Paylaşılan bellek Paralel Programlama için Python Kılavuzları


11

Matris toplama, çarpma vb. Gibi basit görevleri yerine getirmek için Paylaşılan Bellek makineleri (hem C hem de FORTRAN) için OpenMP kodlama deneyimim var (Sadece LAPACK ile nasıl rekabet ettiğini görmek için). OpenMP'yi belgelere bakmaya gerek kalmadan basit görevleri yerine getirecek kadar biliyorum.

Son zamanlarda, projelerim için Python'a geçtim ve Python ile mutlak temellerin ötesinde bir deneyimim yok.

2 sorum var:

  • Python için paylaşılan bellek paralel hesaplamasını tanımlamak için iyi bir kılavuz (çevrimiçi PDF) var mı?

  • Bunu başarmanın en iyi yolu nedir? Biraz gördüm ctypesve bunun en iyi yolu olup olmadığından emin değilim. (En iyisi, programcı zaman ile sistem zamanı arasında iyi bir dengeye sahip olanı kastediyorum. Yürütme yavaş olmazsa kodlamak çok sıkıcı olmamalıdır)

Yanıtlar:


8

[Bu benim ilk yazım ve umarım SE kullanımını tamamen yanlış anlamamışımdır - eğer öyleyse önceden özür dilerim]

"Bgschaid" ile verilen bilgilere dayanarak sorunun cevaplanması çok zor. Düşük seviyeli rutinlerin çok çekirdekli bir mimariden faydalanmasını veya utanç verici paralel problemler veya aradaki bir şey için paralellikten faydalanmanız gerekiyorsa büyük bir fark yaratır. Python'daki farklı paralel hesaplama olasılıklarına genel bir bakış burada bulunabilir .

İlk durumda ben kesin gibi araçları kullanmak tavsiye NumPy / SciPy Enthought dan MKL derlenmiş sürümünde en azından çok çekirdekli mimarileri destekler. Burada, "MKL_NUM_THREADS" ortam değişkeni ile kullanılacak çekirdek sayısını kontrol edebilirsiniz. Bu, performansı akıllıca geçmeyi beklediğimiz yüksek derecede optimize edilmiş kütüphanelere dayanır. Genel olarak bu yüksek kaliteli ve yüksek düzeyde optimize edilmiş kütüphanelerin mümkün olduğunca kullanılması tavsiye edilir.

Paralellikten kaba bir düzeyde yararlanmak istiyorsanız, Python standart araç çoklu işleminin kullanımı kolaydır - ve aynı zamanda paylaşılan veri nesnelerini de destekler. Çok işlemcili paketin bir parçası olarak kullanılacak farklı araçlar vardır . Ben iyi sonuçlar ile çeşitli sorunlar için map_async (SIMD gibi) ve Apply_async (MIMD gibi) kullandık. Çok işlemli paketin kullanımı oldukça kolaydır ve Python'un standart bir parçası olması, kodunuzun diğer potansiyel kullanıcılarının kolayca kullanabilmesini beklediğiniz anlamına gelir. çoklu işlem doğrudan NumPy veri nesnelerine de bağlanır. Çoklu işlem kullanırkenOrtam değişkenini "MKL_NUM_THREADS" değerini 1 olarak ayarlamanızı tavsiye ederim, böylece NumPy her işlem / işçi için yalnızca bir çekirdeğe izin verilir - aksi takdirde performans düşüşüne yol açan NumPy paralel ve çoklu işlem arasında bir kaynak çekişmesine neden olabilirsiniz. çok işlem , aynı işletim sistemi altında çok işlemcili / çok çekirdekli bir mimaride işe yarar . 4 x Xeon E7-4850 CPU (her 10 çekirdekli) ve 512 GB belleğe sahip bir paylaşılan bellek bilgisayarında çoklu işlem kullandım ve son derece iyi çalıştı. Paylaşılan diziler çoklu işlemlerle işlenebilir . Dizi veya paylaşılan türler . Python belgelerini burada bulabilirsiniz -library.pdf dosyası. Bunun bazı temel bölümlerini açıklayan bazı slaytlar var - İsterseniz bana PM.

Dağıtılmış belleğe sahip bir küme yapılandırmanız varsa , mpi4py'nin muhtemelen tercih edilen araç olduğuna inanıyorum . Bunu kendim kullanmadım ama Python paralel programlamada çok kullanıldığını biliyorum.


3

Paralel programlamaya çalıştığınız seviyeye bağlıdır. Matris / vektör şeyler için Örneğin piton ile ilk durağı NumPy / scipy (bunlar Python rahatlığı ile size kütüphanelerin tam hız verir sayısal kütüphanelere arayüz sağlayan) ve gelen olurdu onlar paralellik ilgili yazdıklarıma görülüyor ki kütüphaneler paralel kullanım için derlenmişse, programlar belirli işlemler için çoklu çekirdeklerden yararlanır. (Bu makale biraz daha eski gibi görünüyor, os şeyler bu arada geliştirilmiş olabilir. Ayrıca paralel programlama için diğer araçlara bağlantılar vardır.

Ve elbette MPI'yi doğrudan programlamak için mpi4py vardır (yukarıdaki makalede yer almaktadır)

Sonuç olarak: ana ilgi alanınız vektör / matris işlemleri ve paralellik "sadece" hızlı bir şekilde yapmanız gereken bir şeyse, NumPy / SciPy ekosistemine bir göz atmanız ve yalnızca kendi kütüphanelerinizi yazmayı düşünmeniz gerektiğinde ihtiyacınız olan şeyler

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.