2011-05-13 21 views
15

İç ve dış vektör ürünleri, vektör matris çarpımları vb. Gibi şeyler için (Intel donanımında) ortak çekirdek çekirdeklerini kullanmak için numpy ürününü kullanma konusunda en son teknolojiye sahip nedir?Çok çekirdekli donanıma sahip sayıcı

Gerekirse numpy'u yeniden oluşturduğum için mutluyum ama bu noktada kodumu değiştirmeden işleri hızlandırmanın yollarını arıyorum. Başvuru için

, benim şu, ben birden fazla çekirdek kullanmak numpy gözlenen hiç olarak show_config() geçerli:

atlas_threads_info: 
    libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas'] 
    library_dirs = ['/usr/local/atlas-3.9.16/lib'] 
    language = f77 
    include_dirs = ['/usr/local/atlas-3.9.16/include'] 

blas_opt_info: 
    libraries = ['ptf77blas', 'ptcblas', 'atlas'] 
    library_dirs = ['/usr/local/atlas-3.9.16/lib'] 
    define_macros = [('ATLAS_INFO', '"\\"3.9.16\\""')] 
    language = c 
    include_dirs = ['/usr/local/atlas-3.9.16/include'] 

atlas_blas_threads_info: 
    libraries = ['ptf77blas', 'ptcblas', 'atlas'] 
    library_dirs = ['/usr/local/atlas-3.9.16/lib'] 
    language = c 
    include_dirs = ['/usr/local/atlas-3.9.16/include'] 

lapack_opt_info: 
    libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas'] 
    library_dirs = ['/usr/local/atlas-3.9.16/lib'] 
    define_macros = [('ATLAS_INFO', '"\\"3.9.16\\""')] 
    language = f77 
    include_dirs = ['/usr/local/atlas-3.9.16/include'] 

lapack_mkl_info: 
    NOT AVAILABLE 

blas_mkl_info: 
    NOT AVAILABLE 

mkl_info: 
    NOT AVAILABLE 
+4

Boyutu 4000 olan vektörlerin çok iş parçacıklı hesaplama nokta ürünleri ile herhangi bir hızlandırma elde edebileceğinizden şüpheleniyorum. Böyle bir nokta ürününün hesaplanması için yalnızca birkaç mikrosaniye ihtiyacı vardır. Görevi ayrı bir iş parçacığına atamanın genel yükü, en azından iş parçacığı havuzlarını kullanırken bile kazanabileceğiniz herhangi bir hızı geçersiz kılacaktır. –

+0

32M x (4k ... 1.5M) matrisleri (4k ... 1.5M) x bir şey matrisiyle çarpıyorum ve çok işlemcili araç kutusunu kullanarak bunu yapmaya çalışıyorum, buna rağmen çok fazla bellek yükü yaratıyor gibi görünüyor. Veri yeni süreçlere kopyalandığından (bunun için GIL'e teşekkür ederiz). Tüm 8 çekirdek atlas tarafından kullanılmış olsaydı harika olurdu. – Herbert

cevap

7

Muhtemelen Atlas olmuştur kullandığı numpy inşa edip kontrol ederek başlamalıdır çoklu iş parçacığı ile inşa edilmiştir. Sen kurmak ve (düz Atlas SSS bölümünden) Atlas yapılandırmasını incelemek için bu çalıştırabilirsiniz:

main() 
/* 
* Compile, link and run with something like: 
* gcc -o xprint_buildinfo -L[ATLAS lib dir] -latlas ; ./xprint_buildinfo 
* if link fails, you are using ATLAS version older than 3.3.6. 
*/ 
{ 
    void ATL_buildinfo(void); 
    ATL_buildinfo(); 
    exit(0); 
} 

Eğer Atlas nin multi sürümüne sahip değil varsa: "sorun da burada zaten". Eğer çok iş parçacıklı ise, o zaman çok parçalı BLAS3 rutinlerinden birini (muhtemelen dgemm), uygun büyüklükte bir matris-matris ürünü ile kullanmanız ve diş çekme kullanılıp kullanılmadığına bakın. Bence, Atlas'taki BLAS 2 ve BLAS 1 rutinlerinin, çoklu işlenmeyi desteklemediğini (ve gerçekten de çok büyük sorun boyutlarından başka hiçbir performans avantajı olmadığı için iyi bir neden ile) söylemiyorum.

+0

Derleyici komutu tam olarak nedir? -L [ATLAS lib dir] ne olmalı? – Nino

+0

@Nino: Atlas kütüphanesinin kurulu olduğu mutlak yol. – talonmies

İlgili konular