2011-10-14 12 views
5

Bir 16 çekirdekli makinem ve utandırıcı bir paralel programım olduğunu varsayalım. Çok sayıda nokta noktalı ürün kullanıyorum ve numpy dizileri ekledim ve çok işlem yapmazsam no-brainer olurdu: Numpy'nin multithreading kullanan blas sürümüne göre oluşturulduğundan emin olun. Ancak, çok işlemciyi kullanıyorum ve tüm çekirdekler her zaman çok çalışıyor. Bu durumda, multithreading blas kullanmanın yararı var mı?Python'da çoklu işlem ile birlikte çok iş parçacıklı bir blas uygulamasını kullanmaya değer mi?

operasyonların çoğu (blas) Zaten çoklu işlem kullanıyorsanız bazı tip 2.

cevap

2

ve tüm çekirdekler maksimum yükte altındadır, 1 yazın, ardından, varsa yararı çok az olacak olan Bir işlemci için bekleyeceği konuları eklemek.

sizin algoritma ve ne yaptığınızı bağlı olarak, diğeri üzerinde bir tür kullanmak daha faydalı olabilir, ama bu çok bağımlı.

+0

Belki yanlış anlama ediyorum şeyler ama bir işlemci çekirdeği verimli çoklu konuları kullanabilirsiniz izlenim oldu. Böylece tek çekirdekli bir makinede bir hızlanma elde edebilirsiniz. –

+0

Çok işlemcili/iş parçacığı (henüz!) Konusunda uzman değilim, ancak tek bir işlemci maksimum yükte ise, daha fazla iş parçacığı eklemek yalnızca bunlar arasında değişimin daha fazla yüklenmesine neden olacaktır. Çalışırken diğer iş parçacıklarını işlemeye yardımcı olacak özel bir mimari olmadığı sürece (diyelim, başka bir çekirdek?) Performans artışı oluşmaz. Çekirdeklerin tümü maksimum yük altındaysa ve aynı işi küçük parçalara ayırırsanız, bunların tümü hala maksimum yükte olacaktır. Tek bir çekirdek makineye iplik eklemek, çekirdek bir şeylerin gerçekleşmesi için beklerken faydalıdır. – TorelTwiddler

6

Sen kod aslında çok iş parçacıklı BLAS aramaları kullanılan varsayımı hakkında biraz dikkatli olmak gerekebilir. Nispeten az sayıda numpy operatörü aslında temel BLAS kullanır ve nispeten az BLAS çağrıları aslında çok iş parçacıklı. numpy.dot, BLAS dot, gemv veya gemm'u kullanır, ancak bunlara göre, yalnızca gemm genellikle çok iş parçacıklıdır, çünkü O (N) ve O (N^2) BLAS çağrılarında nadiren herhangi bir performans avantajı vardır. . Eğer Seviye 1 ve Seviye 2 BLAS operasyonlarına kendini sınırlayıcı olduğu takdirde, sana Atlas veya MKL gibi bir mulithreaded BLAS ile inşa edilmiş bir numpy uygulamasını kullanıyor olsanız da aslında, herhangi parçacıklı BLAS çağırır kullanıyorsunuz şüpheliyim.

+0

Bu davranışı açıklayan kaynaklarla ilgileniyorum, eğer bu konuyla ilgili bazı internet dokümanlarını biliyorsanız ... – Simon

+0

Açık kaynak kodlu kodun kendisidir. Bunun ötesinde, hem Clint Whaley (daha önce UTK'dan Atlas'ın yazarı) hem de Kazushige Goto (eskiden TACC'den GotoBLAS'ın yazarı) BLAS uygulamalarında ve performanslarında bir dizi tasarım belgesi ve akademik makale yazmış ve yayınlamışlardır. – avidday

İlgili konular